Comportamiento extraño de FatFs al escribir en un archivo de texto

0

Escribí un pequeño programa con el microcontrolador PIC32MX que envía datos a un archivo txt en la tarjeta SD, luego lee los datos del archivo y finalmente compara los datos antes de enviarlos con los datos después de enviarlos, desde el archivo txt de la SD.

Lo hago para verificar si los bytes se guardan / recuperan correctamente (o no) en / desde el archivo txt creado en la tarjeta SD.

Los datos constan de solo dos caracteres, 'G' y 'H'. Primero escribo 500 bytes de 'G' y luego 500 bytes de 'H'. repetidamente por 10 veces y el número total de bytes en el archivo txt sería 10kB.

Además, los datos en el archivo txt de la SD aparecerían así: GGG ... HHH ... GGG ... HHH ... etc. Para escribir estos datos en el archivo, uso la función f_write ()

FRESULT f_write (
   FIL* fp,          /* [IN] Pointer to the file object structure */
   const void* buff, /* [IN] Pointer to the data to be written */
   UINT btw,         /* [IN] Number of bytes to write */
   UINT* bw          /* [OUT] Pointer to the variable to return number of bytes written */
);

Y aquí radica el problema. Cuando configuro el Número de bytes para escribir, a 1000 bytes (500 'G's y 500' H's, el resultado en el archivo txt es solo GGGGG ... con no'H's. Cuando doblo el número de bytes para escribir, desde 1000 a 2000, solo entonces la secuencia GGG ... HHHH ... GGG ... HHH aparece correctamente.

Y la pregunta es, ¿por qué sucede esto? Normalmente, el último (correcto) resultado debería ocurrir cuando establezco el número exacto de bytes para escribir, en la función (1000) y no duplicándolo (2000)

¿Alguna idea de por qué sucede esto?

Gracias por tu tiempo

    
pregunta Lefteris

1 respuesta

0

Lo encontré,

Inicialmente establecí los buffers como uint16_t porque pensé en rellenarlos con números enteros y luego lo olvidé y decidí rellenarlos con los caracteres G y H.

Bien, se podría decir que los caracteres también pueden interpretarse como valores decimales, pero no convertí a valores enteros porque olvidé que eran de tipo entero.

Así que cambié los buffers de uint16_t al tipo char y ahora todos los datos se registran como se esperaba inicialmente. No sé qué sucede detrás de la escena, pero supongo que tiene algo que ver con las direcciones de memoria. De todos modos, muchas gracias a todos por su tiempo.

    
respondido por el Lefteris

Lea otras preguntas en las etiquetas