OpenEdv-开源电子网

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

怎样在SPI FLASH中保存记录、删除记录?

[复制链接]

56

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2013-1-18
在线时间
57 小时
发表于 2016-2-14 11:06:18 | 显示全部楼层 |阅读模式
100金钱
    大家好,怎样在SPI FLASH中保存记录、删除记录?
    由于记录数据不多,每次也就几十个字节,在设备运行时,可以手动保存一些记录,也需要手动删除某个记录,
如果用FATS系统,觉得太浪费,每次存几十个字节,生成1个记录文件,需要占用512个字节。大家有无合适的方案,
谢谢!

最佳答案

查看完整内容[请看2#楼]

这个问题目前准备保守处理,由于存储空间很大,可以存10万组数据,因此,存储空间不会紧缺,不提供单个记录删除功能,需要删除记录,直接清空所有记录。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

56

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2013-1-18
在线时间
57 小时
 楼主| 发表于 2016-2-14 11:06:19 | 显示全部楼层
这个问题目前准备保守处理,由于存储空间很大,可以存10万组数据,因此,存储空间不会紧缺,不提供单个记录删除功能,需要删除记录,直接清空所有记录。
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-2-14 11:13:53 | 显示全部楼层
用FATFS也不一定每次都生成一个记录文件啊,一个记录文件没用完下次接着用,不必每次都重新创建
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-2-14 11:26:55 | 显示全部楼层
如果是以顺序写入为主,最简单的是用指针数组吧
定义文件头为
[mw_shl_code=c,true]typedef struct
{
        char name[32];//名字
        char param[32];//其它参数
        u16 headersize;//文件头长度
        u16 sizeperlog;//每条记录长度
        struct tm time;
        u16 logsum;//日志总数,运行时即为当前日志ID
        u32 logptr[MYFATFS_LOG_MAX];//日志指针表(以与开头的偏移量为指针)
}Log_Header_Typedef;[/mw_shl_code]
然后每次续写一个记录时查表,读取相应扇区入缓存、写入记录、写入FLASH即可。

如果是频繁插入、删除,那就需要用链表了
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-2-14 11:36:20 | 显示全部楼层
可以去掉文件系统,直接写入数据。但你需要记录好每个文件所在区域,不然会乱
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2015-6-10
在线时间
223 小时
发表于 2016-2-14 16:07:16 | 显示全部楼层
本帖最后由 止天 于 2016-2-14 16:09 编辑

直接向地址里面寻址写入就可以
至于什么文件系统什么的   完全没有必要
回复

使用道具 举报

6

主题

41

帖子

0

精华

高级会员

Rank: 4

积分
821
金钱
821
注册时间
2012-3-31
在线时间
177 小时
发表于 2016-2-14 17:06:15 | 显示全部楼层
建立一个结构体,在内存中,刷新完后用SPI底层写入函数直接写入固定地址。,记得写入前要先擦除扇区。
饭量有限,技术无线。
电子开发,时间充裕。
QQ:58692647
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-2-14 17:46:11 | 显示全部楼层
00000222.jpg

直接在需要的地址写入数据,就OK了。。
擦除的时候有点麻烦,为了不把其他有用的数据擦除,
需要定义个临时数组,把要擦除的扇区里面需要的数据读出来,
然后在写回去!
我有时候都是把flash当EEPROM来用,单个字节读写!
除了擦除麻烦点,其他也没什么!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-2-27 19:15:28 | 显示全部楼层
建议写SD卡比较好。 SPI FLASH,容易写废
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 04:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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