[STM32] 求问大神这个逻辑功能如何实现

[复制链接]
1065|6
 楼主| 雨声 发表于 2017-9-2 10:20 | 显示全部楼层 |阅读模式
单片机的主程序是一个循环程序:通过I2C不断的去读一台设备里的数据,然后检测数据是否异常,有异常要马上关闭设备。同时我的单片机又和外部多台设备有通讯连接关系,他们通讯时会中断打断我的主程序。那么问题来了,我不想让这些中断打断我主程序里的检测该怎么办?因为主程序里的检测涉及到安全问题很重要,有故障要马上停止,万一在中断时设备出了故障被延时了一段时间岂不是完蛋。虽然像485这类的通讯中断子程序执行速度很快,但是要换成其他延时长一点的中断呢,就会对主程序造成很大的威胁了。所以请问一下大神有没有什么好的解决办法?
mailshichao 发表于 2017-9-2 20:28 | 显示全部楼层
这个考验的是你的程序架构的问题了,不管是不是涉及安全的问题,在任何产品上, 如果有这样的问题,都是不行的。
 楼主| 雨声 发表于 2017-9-4 17:02 | 显示全部楼层
mailshichao 发表于 2017-9-2 20:28
这个考验的是你的程序架构的问题了,不管是不是涉及安全的问题,在任何产品上, 如果有这样的问题,都是不 ...

那么大神你看有什么好的程序构架方案可以解决我这个问题呢?我是想了很久想不出好方法才来问的
宇容创行 发表于 2017-9-4 19:08 | 显示全部楼层
方法1 关中断
方法2 中断执行时间尽可能短,把耗时的放到主程序
方法3 再加一个cpu
mailshichao 发表于 2017-9-6 13:39 | 显示全部楼层
雨声 发表于 2017-9-4 17:02
那么大神你看有什么好的程序构架方案可以解决我这个问题呢?我是想了很久想不出好方法才来问的[em:tsj05: ...

就是任何程序都不能长时间占用CPU的时间,也就是你要把任务打碎分时处理,如果有用操作系统,就好弄多了,我觉的,你这个安全性的操作放到中断中嘛,
ningling_21 发表于 2017-9-6 14:36 | 显示全部楼层
楼上正解
john_lee 发表于 2017-9-6 17:05 | 显示全部楼层
要保证实时性:I2C用硬件,不要软件模拟,I2C中断设置为最高优先级,并且在中断里直接进行数据异常处理。

评分

参与人数 1威望 +1 收起 理由
雨声 + 1 结贴的时候分给错了,你的答案才是最好的,提到硬件i2c是关键

查看全部评分

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

本版积分规则

4

主题

24

帖子

0

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