意外的中断问题

[复制链接]
1747|10
 楼主| logokfu 发表于 2013-6-25 07:33 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 **kfu 于 2013-6-25 11:34 编辑

读写数据时候如果有意外中断,会导致数据出错,怎么才能在不关闭中断的前提下可靠读写数据。且不影响程序的实时性。
 楼主| logokfu 发表于 2013-6-25 11:31 来自手机 | 显示全部楼层
有没有好的解决方案
受不了了 发表于 2013-6-25 12:00 | 显示全部楼层
?读写什么器件
 楼主| logokfu 发表于 2013-6-25 12:38 来自手机 | 显示全部楼层
受不了了 发表于 2013-6-25 12:00  ?读写什么器件

用51单片机模拟iic总线读写eeprom。
受不了了 发表于 2013-6-25 12:55 | 显示全部楼层
没发现过这样的问题呢,我有一款产品,每分钟存储一百多次,都是在主循环里处理,被打断那是肯定经常发生的
受不了了 发表于 2013-6-25 12:56 | 显示全部楼层
是存储用的某个变量被中断修改了吧
 楼主| logokfu 发表于 2013-6-25 13:09 来自手机 | 显示全部楼层
受不了了 发表于 2013-6-25 12:55  没发现过这样的问题呢,我有一款产品,每分钟存储一百多次,都是在主循环里处理,被打断那是肯定经常发生的 ...

我这个程序要求定时器100us中断一次,这个中断纯粹是为了模拟出一路pwm做呼吸灯效果。pwm呼吸灯频率100Hz从最暗到最亮要做100级的梯度。所以选的100us的定时器中断。还要模模拟iic读写,定时器的中断会影响通信。偶尔会读出错误的数据。当然程序中还要扫按键,数码管。不过这个不是很主要。
 楼主| logokfu 发表于 2013-6-25 13:24 来自手机 | 显示全部楼层
当然我可以把呼吸灯的pwm频率降低些。做到50Hz,低于50Hz会有闪的感觉。那样100阶的pwm,也需要定时器200us中断一次。有时任务多,还是会出现任务做不完。
 楼主| logokfu 发表于 2013-6-25 13:32 来自手机 | 显示全部楼层
受不了了 发表于 2013-6-25 12:56  是存储用的某个变量被中断修改了吧

数据读写函数用的相关变量定义的是局部变量。这个存在堆栈中容易出现被修改的问题。如果改成局部静态变量,虽然不会被修改,但是会有通信挂起的风险阿。
 楼主| logokfu 发表于 2013-6-25 20:29 来自手机 | 显示全部楼层
大家来讨论下
xyz549040622 发表于 2013-6-26 00:12 | 显示全部楼层
在通讯中加入数据的简单校验可以不
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

2646

帖子

7

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