stm32f4 fatfs f_write 白标
stm32f4 fatfs f_write whitemarks
我在 stm32f4 上与 fatfs 作斗争。没问题,我可以挂载、创建文件并通过以下方式写入:char my_data[]="hello world"
并且在 windows 文件中正常显示,但是当我尝试使用代码作为记录器时:
float bmp180Pressure=1000.1;
char presur_1[6];//bufor znakow do konwersji
sprintf(presur_1,"%0.1f",bmp180Pressure);
char new_line[]="\n\r";
if(f_mount(&myFat, SDPath, 1)== FR_OK)
{
f_open(&myFile, "dane.txt", FA_READ|FA_WRITE);
f_lseek(&myFile, f_size(&myFile));//sets end of data
f_write(&myFile, presur_1, 6, &byteCount);
f_write(&myFile, new_line,4, &byteCount);
f_close(&myFile);
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);
}
当我从计算机读取时,我有:top : notepad ++ buttom :windows notepad
您的代码中至少有两个问题:
数字字符串太短。 C 字符串以空字节结束。所以 presur_1
需要至少 7 个字节长(6 个用于数字,1 个用于空字节)。由于它只有 6 个字节长,sprintf
将超出分配的长度写入并破坏一些其他数据。
换行符的字符串用 2 个字符的字符串(加上空字节)初始化。但是,您向文件写入了 4 个字符。所以除了换行符,一个NUL字符和一个垃圾字节也会在文件中结束。
固定代码如下所示:
float bmp180Pressure = 1000.1;
char presur_1[20];//bufor znakow do konwersji
int presur_1_len = sprintf(presur_1,"%0.1f\n\r",bmp180Pressure);
if(f_mount(&myFat, SDPath, 1)== FR_OK)
{
f_open(&myFile, "dane.txt", FA_READ|FA_WRITE);
f_lseek(&myFile, f_size(&myFile));//sets end of data
f_write(&myFile, presur_1, presur_1_len, &byteCount);
f_close(&myFile);
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);
}
我在 stm32f4 上与 fatfs 作斗争。没问题,我可以挂载、创建文件并通过以下方式写入:char my_data[]="hello world"
并且在 windows 文件中正常显示,但是当我尝试使用代码作为记录器时:
float bmp180Pressure=1000.1;
char presur_1[6];//bufor znakow do konwersji
sprintf(presur_1,"%0.1f",bmp180Pressure);
char new_line[]="\n\r";
if(f_mount(&myFat, SDPath, 1)== FR_OK)
{
f_open(&myFile, "dane.txt", FA_READ|FA_WRITE);
f_lseek(&myFile, f_size(&myFile));//sets end of data
f_write(&myFile, presur_1, 6, &byteCount);
f_write(&myFile, new_line,4, &byteCount);
f_close(&myFile);
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);
}
当我从计算机读取时,我有:top : notepad ++ buttom :windows notepad
您的代码中至少有两个问题:
数字字符串太短。 C 字符串以空字节结束。所以 presur_1
需要至少 7 个字节长(6 个用于数字,1 个用于空字节)。由于它只有 6 个字节长,sprintf
将超出分配的长度写入并破坏一些其他数据。
换行符的字符串用 2 个字符的字符串(加上空字节)初始化。但是,您向文件写入了 4 个字符。所以除了换行符,一个NUL字符和一个垃圾字节也会在文件中结束。
固定代码如下所示:
float bmp180Pressure = 1000.1;
char presur_1[20];//bufor znakow do konwersji
int presur_1_len = sprintf(presur_1,"%0.1f\n\r",bmp180Pressure);
if(f_mount(&myFat, SDPath, 1)== FR_OK)
{
f_open(&myFile, "dane.txt", FA_READ|FA_WRITE);
f_lseek(&myFile, f_size(&myFile));//sets end of data
f_write(&myFile, presur_1, presur_1_len, &byteCount);
f_close(&myFile);
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);
}