Esto es parte de una implementación minimalista de printf que he estado usando. Fue escrito originalmente por Georges Menie de www.menie.org, de acuerdo con el aviso de la GPL en la parte superior del archivo. Sin embargo, he estado modificando la implementación en su totalidad y, en realidad, no he estado al tanto de los cambios, por lo que probablemente debería usar el original que parece estar disponible en enlace
La función que se lista a continuación convierte un int en su cadena ascii. Puede intentar seguir el código y eliminar las partes que no necesita. Hay llamadas a impresiones en la función, que se ocupa del relleno y el manejo del ancho de la cadena. También hace el envío real de caracteres a través de putchar. No he incluido esa función aquí para reducir el desorden. Debe implementar su propia función para hacer eso aquí, que básicamente enviaría cada uno de los caracteres a través de su periférico serial / rs232 / uart hasta que encuentre \ 0.
static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase)
{
char print_buf[PRINT_BUF_LEN];
register char *s;
register int t, neg = 0, pc = 0;
register unsigned int u = i;
if (i == 0) {
print_buf[0] = '0';
print_buf[1] = 'static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase)
{
char print_buf[PRINT_BUF_LEN];
register char *s;
register int t, neg = 0, pc = 0;
register unsigned int u = i;
if (i == 0) {
print_buf[0] = '0';
print_buf[1] = '%pre%';
return prints (out, print_buf, width, pad);
}
if (sg && b == 10 && i < 0) {
neg = 1;
u = -i;
}
s = print_buf + PRINT_BUF_LEN-1;
*s = '%pre%';
while (u) {
t = u % b;
if( t >= 10 )
t += letbase - '0' - 10;
*--s = t + '0';
u /= b;
}
if (neg) {
if( width && (pad & PAD_ZERO) ) {
printchar (out, '-');
++pc;
--width;
}
else {
*--s = '-';
}
return pc + prints (out, s, width, pad);
}
';
return prints (out, print_buf, width, pad);
}
if (sg && b == 10 && i < 0) {
neg = 1;
u = -i;
}
s = print_buf + PRINT_BUF_LEN-1;
*s = '%pre%';
while (u) {
t = u % b;
if( t >= 10 )
t += letbase - '0' - 10;
*--s = t + '0';
u /= b;
}
if (neg) {
if( width && (pad & PAD_ZERO) ) {
printchar (out, '-');
++pc;
--width;
}
else {
*--s = '-';
}
return pc + prints (out, s, width, pad);
}