Actualmente estoy trabajando en la placa de evaluación STM32F479. Tengo que recopilar datos de los nodos sensores y almacenarlos en un archivo de texto usando FatFs. Los valores de mi sensor están en valores hexadecimales. Estoy usando la biblioteca STM32F4Cube HAL que incluye FatFs. Estoy usando la función f_write() para pasar estos valores hexadecimales a un archivo de texto. Pero está almacenando como valores basura que no es como se esperaba. Cuando uso f_printf(), funciona perfectamente como se esperaba (los valores hexadecimales se almacenan). Pero al volver a leer, muestra algunos otros valores que no son los valores almacenados. Tengo dos preguntas.
¿Cuál es la manera perfecta de almacenar valores hexadecimales en un archivo de texto y leer lo mismo desde un archivo de texto usando FatFs?
¿Hay alguna otra forma de convertir estos valores hexadecimales a caracteres antes de pasarlos a un archivo y volver a convertirlos 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
}
Esta línea hace un puntero a partir de un valor aleatorio en la pila, solicitando una falla (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 binario en el archivo, no en hexadecimal.
Esa f_printf()
línea debería darle una advertencia del compilador como "hacer un puntero a partir de un número entero sin conversión", porque espera una cadena (puntero a char) como segundo argumento.
Línea corregida para salida hexadecimal:
f_printf(&MyFile," %X",Buff[i]);
fread()
en fwrite()
una PC.
Daniel
Marca
jahir hussain