打印
[STM32F4]

FreeRTOS中FATFS文件系统

[复制链接]
3554|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
当我们遇到存储数据时候就需要对flash或者SD卡两种最通用的存储进行操作,而且需要一种方法把数据进行读取出来,这里我推荐一种方法,也是各位STM32软件工程师使用最多的,那就是
USB+FATFS+SD/FLASH,通过USB读取存储信息,也可把网页之类的配置信息保存,STM32进行读取。
加入freertos很简单,也就是几个文件。
cc936.c:支持中文系统,字库这个文件最好是放在flash中,减小程序文件对flash的消耗,调程序也快啊。
diskio.c:硬件驱动,硬件相关的驱动,只要spiflash.c这个文件写好了,往里填充即可。
ff.c:文件系统的文件,无需修改。
MYFF.c:自定义的读写文件。
FREERTOS系统,本人一般是分为四条任务:
MAINTask,放一些文件读取之类的进程
USBTask, freertos系统里面的USB进程的任务,一般是读取flash文件,SD卡文件,等等
TickTask,定时处理的一些函数。
TESTTask,预留的控制程序任务。
FATFS文件系统是直接放到MAINTask中,开机直接挂载到系统中去。
MountDriver(DRV_SPI_FLASH);  挂载SPIFLASH,SD卡一般不插入,不挂载,放在之后吧。。。。
FRESULT MountDriver(u8 pdrv)
{
u32 free_size;
FATFS *fs = &FAT_Fs[pdrv];
FRESULT rt = f_mount(fs,"0:",1);
if (rt == FR_OK)
{
Printf("\nNumber of driver: %c", 'A'+fs->drv);
Printf("\nFile system: %s", FatType[fs->fs_type]);
Printf("\nAmount of fats: %d", fs->n_fats);
Printf("\nSectors per clust: %d", fs->csize);
rt = f_getfree("0:", &free_size, &fs);
if (rt == FR_OK)
{
free_size *= fs->csize; // get free sectors
free_size *=512u; // get free bytes
Printf("\nFree size: %d", free_size);
}
else
{
Printf("\nGet free clust failed: %d", rt);
}
}
else
{
Printf("\nAdd file driver %d failed: %d",0, rt);
}
return rt;
}
直接挂载SPIFLASH,并且把flash的信息打印到串口上去,这里的Printf全是我自己写的带信号量的打印函数。不会在打印过程中遭受别的进程影响。
以我自己写程序习惯,我会去保存开机信息,包括时间啊,开机啊,之类的。
SaveLog("开机重启",8);    保存开机重启这几个字,还有就是当时的开机时间
void SaveLog(char *date,u16 len)
{
PFILE fp;
UINT length;
char head[10];
char path[22];
sprintf(path, "0:/d.d.d.txt", rtctime.Year, rtctime.Month, rtctime.Date);                // 时间  path用来创建TXT文件


fp = FileOpen(path, FA_WRITE);
if(fp == NULL)
{
fp = FileOpen(path, FA_CREATE_NEW|FA_WRITE);      
//自己的freertos的创建函数
}
sprintf(head, "d:d:d  ", rtctime.Hours, rtctime.Minutes, rtctime.Seconds);
if(fp != NULL)
{
f_lseek(fp,f_size(fp));                         //文件系统上一个地址开始
f_write(fp, "\r\n", 2, &length);
f_write(fp, head, 10, &length);
f_write(fp, date, len, &length);
FileClose(fp);  //自己的关闭函数,里面要归还申请的内存的。
}
}

把重启信息保存
可以保存重启信息,也可以保存别的任何信息。



沙发
orangebanana| | 2016-4-24 20:38 | 只看该作者
这个freertos操作系统本身占用的资源多吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

173

主题

3358

帖子

13

粉丝