OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4568|回复: 3

flash数据掉电不能保存,恳请指教~~~

[复制链接]

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2016-9-20 15:28:12 | 显示全部楼层 |阅读模式
10金钱
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上的数据.
恳请大神指教~~~

电子爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2016-9-20 17:19:37 | 显示全部楼层
为什么每次都挂载一次文件系统res1 = f_mount(fs[1], "0:", 1);,初始化的时候挂载一次就好了。
态度决定一切
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
 楼主| 发表于 2016-9-20 17:30:22 | 显示全部楼层
因为我有的时候可能不会去写,而只是从flash读取数据,这样,写的函数就不会被调用,当然就不会调用写函数中的f_mount
电子爱好者
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
 楼主| 发表于 2016-9-20 19:05:35 | 显示全部楼层
问题解决了
这里的bw默认上电是0,所以没有读出数据,该个正数就OK了
res3 = f_read(p_file, (void *)p_info, bw, &br);
电子爱好者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 17:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表