1,思路:参考原子的程序,在flash上封装了文件系统fatfs(但是fatfs不太会使用,不知道是不是这个原因导致flash数据掉电不能保存~~~)
2,介绍:介绍下程序逻辑.我使用ucos创建2个任务(task1和task2),使用task1采集数据,通过fatfs写到flash上,然后在task2上通过fatfs将数据读出来,然后进行处理~~~
如下是在task1上写数据到flash的代码:
[mw_shl_code=c,true]static FRESULT fatfs_write(FIL *p_file, struct lwip_info *p_info)
{
FRESULT res1, res2, res3, res4;
res1 = f_mount(fs[1], "0:", 1);
res2 = f_open(p_file, "0:config.dat", FA_CREATE_ALWAYS | FA_WRITE);
res3 = f_write(p_file, (const void *)p_info, sizeof(struct lwip_info), &bw);
res4 = f_close(p_file);
return (FRESULT)(res1|res2|res3|res4);
}[/mw_shl_code]
如下是在task2上读数据的代码:
[mw_shl_code=c,true]static FRESULT fatfs_read(FIL *p_file, struct lwip_info *p_info)
{
FRESULT res1, res2, res3, res4;
res1 = f_mount(fs[1], "0:", 1);
res2 = f_open(p_file, "0:config.dat", FA_OPEN_ALWAYS | FA_READ);
res3 = f_read(p_file, (void *)p_info, bw, &br);
res4 = f_close(p_file);
return (FRESULT)(res1|res2|res3|res4);
}[/mw_shl_code]
3,现象:额,如果不断电的情况下,在task1上写入的数据是能够在task2上读出来的(没有使用ucos的邮箱或者消息队列,直接在task2上通过fatfs读flash).
但是,在突然断电然后上电后,task2无法再次读取到flash上的数据.
恳请大神指教~~~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>