【发布时间】:2016-07-14 11:02:05
【问题描述】:
我在 ZedBoard 上,我正在尝试在 SD 卡上写字。 我正在开发嵌入式系统,我没有任何操作系统,我正在运行裸机。
我可以从 SD 卡中正常读取,它们没问题。
但是当我尝试阅读时,我有一些奇怪的行为:
- f_write 返回 FR_OK
- bw(写入的字节数)变量是正确的
- 文件已创建(从 PC 读取 SD 卡时可以看到)
但是当我读取文件时,它是空的。
这是我的代码:
void WriteFile(char const* fileName, char* buffer, size_t size)
{
FIL file;
FATFS fs;
UINT bw;
FRESULT fr;
f_mount(&fs, "", 0);
f_open(&file, fileName, FA_WRITE | FA_CREATE_ALWAYS);
fr = f_write(&file, buffer, size, &bw);
if (size != bw || fr != FR_OK)
PRINT(("Error in writing !\n"));
f_close(&file);
f_mount(NULL, "", 0);
}
我这样称呼这个方法:
WriteFile("Hello.txt", "Hello World !", 13);
知道我做错了什么吗?
【问题讨论】:
-
FatFs 不提供低级设备 I/O - 您必须由第三方(例如板卡或芯片供应商)自己提供,所以这可能是一个问题,尽管它很难看出文件是如何创建的。此外,FatFs 可以配置为“只读”文件系统 - 但再次创建了文件,因此情况似乎并非如此。无论如何,问题似乎不在于您提供的代码级别,而在于库配置级别的驱动程序,因此就目前而言,您不太可能得到“这是您的问题”的答案。跨度>
-
我和你有同样的问题 Aymen 但是当我尝试在从我的电脑创建的文本文件上使用 f_write 时,我可以覆盖该文件的内容。但我无法让它与我用 f_open 创建的空文件一起工作。
-
@Frostbite :当您说覆盖时,您的意思是在其中添加您自己的数据,而不仅仅是一个空白文件?有趣,我还没有尝试过……但是在阅读了您的消息后,我记得我应该更新要回答的问题,因为我找到了一个可行的解决方案。
-
我很确定 f_sync() 可以完成这项工作,如下文stackoverflow.com/a/37568289/558639中所述
标签: c embedded sd-card bare-metal fatfs