平常我们嵌入式开发,多采用Fatfs作为文件系统,但是和window下的文件系统函数用法差别还挺大的,所以为了让PC上写的文件操作能直接移植到单片机上,我把Fatfs文件系统又封装了一层,即加了一层user层,使得PC上的文件操作可以直接移植到单片机上,几乎不用再做修改。只要在PC的文件操作前加个u即可,如PC中类型FILE* P只需修改为uFILE* P即可,具体使用参考fatfs_test();
这个测试中,在电脑中开辟了一块内存模拟W25Q128 进行文件系统测试,显示器采用之前的LCD模拟器进行模拟绘制,内存管理采用MemDbg内存管理调试器,在之前的工程里都有
基于的Fatfs版本是R0.14,想移植可以参考文件下的移植说明
PC上的所有文件相关操作,前面都加u即可,目前支持的函数有:uf_open;uf_close;uf_read; uf_write;uf_gets;uf_putc; uf_puts;uf_tell;uf_size;uf_seek;uf_opendir;uf_closedir;uf_mkdir;uf_scan_dir;uf_readdir;uf_unlink;uf_rename;uf_typetell; uf_rename; uf_cpy_msg;uf_filecopy;uf_get_file_name;uf_foldercopy;uf_folderdsize;uf_mount; uf_mkfs;uf_getfree; uf_setlabel; uf_getlabel;
上述兼容Stdio的文件操作,函数原型与stdio中的相同,函数原型如下:
uFILE * uf_open(const char *path, const char *mode);//打开文件
int uf_close(uFILE *ufile);//关闭文件
size_t uf_read(void *ptr, size_t size, size_t nmenmb, uFILE *ufile);//读文件内容
size_t uf_write(void *ptr, size_t size, size_t nmenmb, uFILE *ufile);//写文件内容
char* uf_gets(char* outbuf, uint32 size, uFILE* file);//读取一行内容
int uf_putc(char c, uFILE *ufile);//写入单个字符
int uf_puts(char *str, uFILE *ufile);//写入一个字符串
........................
基本上PC上会用到的文件函数都在这边了吧,不过打开大文件要注意,如果文件太大,内存会出问题,内存不足,多大限制我忘了,这个是好久之前写的了,现在不想查了,哪个大佬要是发现了请多多指教,直接告诉我就好啦,我太懒了,不想去查了,反正一般单片机上打开的文件也不会特别大,所以大体没问题。
PC上的FILE类型,就是这边的uFILE类型,前面加u即可,但是DIR、FILINFO这两个可以不用改,具体参考fatfs_test()函数使用示例
可以通过设置user_fats.h文件中的 UFILE_DEBUG_ENABLE 为1 开启调试模式,打印输出文件操作相关的具体信息
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。