Tengo el siguiente código compilado con el compilador MPLab y XC8 de Microchip y ejecutándome en un PIC18F2550 que está haciendo algo bastante extraño:
char output[20];
int i = 0;
char currentStatus = readShiftReg();
for (i = 0; i < 8; i++) {
if ((currentStatus & (1 << i)) == (1 << i))
sprintf(output, "Sensor %d is currently on \r\n", i + 1);
else
sprintf(output, "Sensor %d is currently off \r\n", i + 1);
putsUSART(output);
}
El bucle for solo se repite una vez y durante esa iteración se ejecuta correctamente el segundo sprintf
, pero después de ejecutarlo, el valor de i
es algo aleatorio (26154, 8294, ...). He intentado cambiar i
por otra variable j
asignando el valor de i
a j
al comienzo del bucle, pero lo mismo sucede con i
.
Parece que es algo con sprintf
porque cuando uso el depurador, el valor de i
no cambia hasta que se ejecuta sprint
. Una cosa a tener en cuenta es que el valor en la salida es correcto (es decir, "el sensor 0 está actualmente desactivado \ r \ n") lo que hace que esto sea aún más desconcertante.
Este debe ser un código muy simple, pero no funciona y estoy seguro de que hay una explicación simple. ¿Dónde debería estar buscando?