搜索

如何实现删除430单片机Flash中的其中一个数据

[复制链接]
1338|27
| 2016-6-10 20:51 | 显示全部楼层
没有好办法,flash的性质决定了擦除必须按段来操作

使用特权

评论回复
 楼主 | 2016-6-10 20:56 | 显示全部楼层
先读出来,再判断是删除哪一组,把其他的再写入到Flash中,这样能实现吗?感觉好麻烦

使用特权

评论回复
 楼主 | 2016-6-10 20:57 | 显示全部楼层
dirtwillfly 发表于 2016-6-10 20:51
没有好办法,flash的性质决定了擦除必须按段来操作

先读出来,再判断是删除哪一组,把其他的再写入到Flash中,这样能实现吗?感觉好麻烦

使用特权

评论回复
| 2016-6-10 21:12 | 显示全部楼层
sgq151679 发表于 2016-6-10 20:57
先读出来,再判断是删除哪一组,把其他的再写入到Flash中,这样能实现吗?感觉好麻烦
...

是的。
也可以想其他办法。
比如为每个数多留出一个字节存储数据状态,如果删除某个数就标记一个删除状态。当段内数据满的时候,整体更新一次

使用特权

评论回复
| 2016-6-11 14:06 | 显示全部楼层
用CCS,设计一个常量FLASH段,用CMD文件把要擦写的常量放进去,这样跟其他执行代码没有关糸啦。

使用特权

评论回复
 楼主 | 2016-6-11 20:53 | 显示全部楼层
zyj9490 发表于 2016-6-11 14:06
用CCS,设计一个常量FLASH段,用CMD文件把要擦写的常量放进去,这样跟其他执行代码没有关糸啦。 ...

没用过CCS

使用特权

评论回复
| 2016-6-11 21:40 | 显示全部楼层

不知IAR有没有这样的功能,把变量任意指定某个内存或FALSH区哉,关键是刷FALSH不能跟指令码一起刷,还有在操作FALSH时,指令要跑在RAM里面,因为操作FALSAH的总线与CPU读取FALSH的总线不能共用。

使用特权

评论回复
| 2016-6-12 21:51 | 显示全部楼层
flash是分区刷的还是全刷的

使用特权

评论回复
 楼主 | 2016-6-12 22:25 | 显示全部楼层
Bjorn 发表于 2016-6-12 21:51
flash是分区刷的还是全刷的

都存到同一段的

使用特权

评论回复
| 2016-6-13 16:07 | 显示全部楼层
那就分别存放咋不同的sector上的

使用特权

评论回复
| 2016-6-13 21:52 | 显示全部楼层
设计一个常量FLASH段,用CMD文件把要擦写的常量放进去

使用特权

评论回复
| 2016-6-14 21:01 | 显示全部楼层
删除430单片机Flash中的其中一个数据

是不是往里边写0就行了

使用特权

评论回复
| 2016-6-19 10:44 | 显示全部楼层
309030 发表于 2016-6-14 21:01
是不是往里边写0就行了

擦是把全部FLASH都变成1,而写是把1变成0,FLASH写没有把0变成1的功能,除非EARSE,跟它的硬件机理有关。并且写FLASH必须要按FLASH控制器的寄成器设置来写的,速 度比较慢,以上说,在写FLASH时,读指令(从FALSH)必须停止,或跑在RAM上,否则硬件出错,崩。

使用特权

评论回复
| 2016-6-19 10:51 | 显示全部楼层
430还有一个FLASH可以任意时可以擦写,不过同样,在擦写时不要运行FLASH指令,就是INFO A,INFO B ,专门为保存信息准备的,430的FLASH不是作为一个外设准备的,不如微星片子有作为外设准备的,随时可以擦写,不需要考量读指令的共存问题。

使用特权

评论回复
| 2016-6-19 21:26 | 显示全部楼层
读取地址直接覆盖吧。

使用特权

评论回复
| 2016-6-19 21:27 | 显示全部楼层
如果你使用数据链就可以删除。

使用特权

评论回复
| 2016-6-20 22:34 | 显示全部楼层
这个直接覆盖掉地址就行了

使用特权

评论回复
| 2016-6-20 22:36 | 显示全部楼层
你想连续读取这个不一定好弄的。

使用特权

评论回复
| 2016-6-21 16:47 | 显示全部楼层
这个删除是不是全置位成1

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表