文件系统的使用还是C语言的方式,但是我的工程用的是C++,
如果有网友需要移植到自己的C语言的工程,需要做一些改动。。。比较繁锁。。。估计大家更倾向于现在网上流行的FATFS,
我的代码,有兴趣下载来直接用C++玩玩就行,功能也不多,实际意义不大。
以后打算用C++来完善这个系统,C++能直接使用C语言的代码,不过既然要走向C++,就基本上意味着没办法再给C语言使用了。
我又哆嗦了。。。上代码。。。
#include "sys.h"
#include "iostream.h"
using namespace periph;
using namespace nstd;
#include "utilities.H"
#include "MMC_SD.H"
#include "memory.H"
#include "FAT_FS.h"
const u8* NAME = "welcome.txt"; // 实验用的文件名
const u8* CONTENT = "欢迎来到开源电子网~大家相互学习,多多指教!"; // 写入到文件中的内容
u8 buf[60] = {0};
int main(void)
{
sys.Init();
Mem_Init(); //初始化动态内存管理模块
Delay_ms(1000);
while(SD_Init()!=0)//检测不到SD卡
{
output<<"failed..."<<endl;
Delay_ms(1000);
}
output<<"sd init success!!!"<<endl;
// 初始化文件系统
if(FileSysInit()) {
output<<"\nfat_fs init failed!\n";
while(1);
}
output<<"\nfat_fs init success!\n";
File* p;
// 打开文件,以创建方式打开
p = fopen(NAME, FILE_READ | FILE_WRITE | FILE_CREATE);
if(p == NULL){
output<<"open file failed."<<endl;
while(1);
}
output<<"open file success."<<endl;
fwrite(p,CONTENT, StringLength(CONTENT));
fclose(p); // 关闭文件,如果文件中写入了新的数据,那么必须关闭文件,新的数据才不会丢失
// 以只读方式打开刚才创建的文件
p = fopen(NAME, FILE_READ );
if(p == NULL){
output<<"文件打开失败"<<endl;
while(1);
}
output<<"文件打开成功."<<endl;
u16 cnt = fread(p, buf, 60); // 从刚刚写入的文件中读取内容,并把读取到的数据量保存到 cnt
output<<"fread 读到了 "<<cnt<<"个字节."<<endl
<<"从文件中读到的文本为 :"<<buf<<endl;
while(1){}
}
上面的代码应该不难懂,实现的功能就是,打开一个文件,写入文件,关闭文件。然后重新打开,读取文件,串口显示。
顺便提一下,我比较希望我开源的代码,网友下载了,只要把所有的文件添加的工程里就能编译成功的,
这也算是我脱离库的原因之一,一般更倾向于使用自己写的函数,不喜欢依赖库
现在MDK的新版本默认是用3.5版的STM32固件库了。。。好多以前的源码都不能直接编译了。。。
才移植没多久,重新审视了一下,感觉比较乱,但是现在没多少时间去整理。。。