Escribir y leer valores hexadecimales en un archivo de texto con FatFs

3

Actualmente estoy trabajando en STM32F479 Eval Board. Tengo que recopilar datos de los nodos de los sensores y almacenarlos en un archivo de texto con FatFs. Los valores de mi sensor están en valores hexadecimales. Estoy utilizando STM32F4Cube HAL Library que incluye FatFs. Estoy usando la función f_write () para pasar estos valores hexadecimales a un archivo de texto. Pero se está almacenando como valores de basura que no son los esperados. Cuando uso f_printf () funciona perfectamente como se esperaba (los valores hexadecimales se almacenan). Pero al volver a leer, muestra otros valores que no son los valores almacenados. Tengo dos preguntas.

  1. ¿Cuál es la manera perfecta de almacenar valores Hex en un archivo de texto y leer lo mismo de un archivo de texto usando FatFs?

  2. ¿Hay alguna otra forma como convertir estos valores hexadecimales a char antes de pasarlo a un archivo y volver a convertir después de leer un archivo?

Mi código:

uint8_t Buff[]; // Buffer to read data from Sensors 

uint32_t byteswritten;

f_write(&MyFile,Buff,sizeof(Buff),(void*)byteswritten); //But writing some other values

for(i=0;i<sizeof(Buff);i++)
{
    f_printf(&MyFile,Buff[i]); //Writing properly But reading throws unexpected values
}
    
pregunta Jahir Hussain

1 respuesta

6

Esta línea crea un puntero a partir de un valor aleatorio en la pila, solicitando un error (difícil):

f_write(&MyFile,Buff,sizeof(Buff),(void*)byteswritten); 

El código correcto se vería así:

UINT byteswritten;
f_write(&MyFile,Buff,sizeof(Buff),&byteswritten);

Tenga en cuenta que f_write() escribe datos en binary en el archivo, no en hexadecimal.

Esa línea f_printf() debería darte una advertencia del compilador como "crear un puntero desde un entero sin una conversión", porque espera una cadena (puntero a char) como segundo argumento.

Línea corregida para salida hexadecimal:

f_printf(&MyFile," %X",Buff[i]);
    
respondido por el Turbo J

Lea otras preguntas en las etiquetas