打印

最近遇到的问题

[复制链接]
2927|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
e08610318|  楼主 | 2013-4-3 08:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    200个字节的全局变量,用来存参数,其中有些参数很重要,比如IP地址。设备有时候需要自己重启,重启前先将这些数据存入FLASH,重启后从FLASH读出来,之后这个变量是只读不写的。但是发现,有一定的概率IP地址的值和某些重要参数会莫名其妙地变掉,IP变了就导致设备无法上线。
两种分析可能:
1.这些参数在设备运行时都不会写它,只会读它,应该不会有多进程冲突访问导致数据错误的可能,如果FLASH在读写过程中没有错误,那么可能是在某些复杂电磁环境下意外导致这些变量值改变。
2.有可能是FLASH读写的时候出现错误
3.其他可能。
请前辈赐教

相关帖子

沙发
SunFans| | 2013-4-3 08:58 | 只看该作者
貌似2的可能性非常大,记得大约五年前我们刚用EN25T80的时候,也有开机掉代码之类问题,后来软件做了修正就解决了……

使用特权

评论回复
板凳
jlass| | 2013-4-3 09:13 | 只看该作者
重启前先将这些数据存入FLASH,重启后从FLASH读出来

这两步比较容易出错


之后这个变量是只读不写的

这是谁来保证的,是你的代码不去进行写操作还是数据空间是只读属性的。前者是不靠谱的。


那么可能是在某些复杂电磁环境下意外导致这些变量值改变

基本不可能,这会全面破坏你的数据,不会针对特定的数据。

使用特权

评论回复
地板
dirtwillfly| | 2013-4-3 09:18 | 只看该作者
楼上分析得很详细

使用特权

评论回复
5
e08610318|  楼主 | 2013-4-3 14:45 | 只看该作者
SunFans 发表于 2013-4-3 08:58
貌似2的可能性非常大,记得大约五年前我们刚用EN25T80的时候,也有开机掉代码之类问题,后来软件做了修正就 ...

我们用的是芯片内部FLASH,开机掉代码啥意思啊?代码存到FLASH里面?软件如何修正解决的呢?

使用特权

评论回复
6
e08610318|  楼主 | 2013-4-3 14:51 | 只看该作者
jlass 发表于 2013-4-3 09:13
重启前先将这些数据存入FLASH,重启后从FLASH读出来

这两步比较容易出错

数据空间没有const属性 就是一个全局变量。重启后,程序只会读这些数据,不会修改这些数据,这是代码保证的。“重启前先将这些数据存入FLASH,重启后从FLASH读出来”这两部容易出错,是否有一些比较好的办法避免。写FLASH的函数是芯片内部IAP函数实现的,是否在操作FLASH的时候全局中断关掉比较好?

使用特权

评论回复
7
jlass| | 2013-4-3 15:02 | 只看该作者
e08610318 发表于 2013-4-3 14:51
数据空间没有const属性 就是一个全局变量。重启后,程序只会读这些数据,不会修改这些数据,这是代码保证 ...

先做一下flash的读写测试,测试上百万次,确保flash本身的读写没有问题。

剩下的就重点考虑代码的问题了,可能性很多,地址溢出啊,中断没保护好啊,各种问题都有可能导致你的程序在无意中更改了你的参数,这就的靠你自己查了。

使用特权

评论回复
8
jlass| | 2013-4-3 15:07 | 只看该作者
重启前先将这些数据存入FLASH,重启后从FLASH读出来

写完了之后可以读出来对比一下,读完了可以再读一遍对比一下
注意:做保护只是在回避问题而不是解决问题,不过可以测试一下是否是读写不可靠引起的问题。

使用特权

评论回复
9
ma2shuan| | 2013-4-3 20:09 | 只看该作者
像这些不经常擦写的数据可以直接定义到固定的flash段内,程序中需要用的时候读一下就行了,速度也不会慢到哪!

使用特权

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

本版积分规则

个人签名:你可能不知道今天所做的事情会对未来有多大的干预能力!

67

主题

310

帖子

12

粉丝