我正在尝试编写一个记录器,在设备的 SD 卡上创建一个文件,并将数据存储到其中。现在,我要做的就是将文本“hello123”写入日志文件,但是当我从卡上下载文件并用文本编辑器打开时,那里没有 ASCII 数据,而是包含二进制数据(系列
^@
) 个字符。
文件创建没有任何问题,就在我尝试写入它的时候。我在设备固件上运行的另一个日志函数之后调用此函数,因此我们可以假设已安装 SD 卡并且 SD 的 CS 引脚为高电平(很低,但倒置)。
所以事件的顺序是:
我的代码如下:
#include <ff.h>
#include <stdio.h>
#include <string.h>
#include "main.h"
unsigned char filename[10] = "debug.log";
unsigned char line[360];
static FIL logFile;
unsigned char error = 0;
FRESULT fresult;
UINT written = 0;
FATFS fatfs[1];
void writeLog()
{
volatile unsigned char retVal;
memset(line, 0, sizeof(line));
// check if sd card is mounted
if(f_mount(&fatfs[0], "0:", 1) != FR_OK)
{
error = 1; // breakpoint purposes
}
else
{
if(f_open(&logFile, (const char*)filename, FA_CREATE_ALWAYS | FA_WRITE) == FR_OK){
retVal = f_lseek(&logFile, f_size(&logFile));
line[0] = 'h';
line[1] = 'e';
line[2] = 'l';
line[3] = 'l';
line[4] = 'o';
line[5] = '1';
line[6] = '2';
line[7] = '3';
line[8] = 0x00;
f_puts((char const*)line, &logFile) ;
f_puts("\r\n", &logFile);
f_sync(&logFile);
retVal = f_close(&logFile);
}
}
}
我不确定为什么它没有在文件中写入任何内容。我的意思是好像我向其中写入 8 个字节,文件大小为 8 个字节,当我用
^@^@^@^@^@^@^@^@^@^@
查看它时,我可以在我的 ubuntu 终端中看到 less
。
十六进制转储:
$ xxd DEBUG.LOG
00000000: 0000 0000 0000 0000 0000 ..........