打印

[讨论]关于单片机如何在处理多个中断保持实时性

[复制链接]
8739|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yxdengos|  楼主 | 2008-12-8 17:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题:当51单片机系统中,中断嵌套只有两层,高低优先级之分。如果我们有一个5ms的中断(来自外部的定时),还有串口,SPI等等
当中断数目有两个以上的时候(包括两个) 单片机处理多个中断肯定存在不实时,也许会漏去5ms速度很快的中断(单片机处理低优先级的中断时候,恰好来了5ms的中断)

所以向大家请教一下 如果规划或安排一个单片机的程序设计结构 以及中断服务程序的编写(要求)

欢迎大家讨论!

相关帖子

沙发
hab2000| | 2008-12-8 18:16 | 只看该作者

首先考虑高优先级的不会丢失!

如果死乞白赖的要求所有的中断都不丢失,第一提高MCU处理速度,第二降低中断产生频率!然后软件处理.......

使用特权

评论回复
板凳
5880527| | 2008-12-8 18:25 | 只看该作者

既然都需要5ms来处理一次中断

那再慢点又何妨

使用特权

评论回复
地板
ayb_ice| | 2008-12-8 20:48 | 只看该作者

中断尽量短 小

中断只管收集必要信息

使用特权

评论回复
5
yxdengos|  楼主 | 2008-12-9 15:09 | 只看该作者

继续请教

如果我要在INT来临后 固定做一些操作 如存储数据 且判断;使用SPI操作等等

自然会想到在INT外面做 但是INT结束后又会返回现场 我不知道怎么处理 只好

写在ISR中了

使用特权

评论回复
6
zhang123| | 2008-12-9 15:46 | 只看该作者

多核

使用特权

评论回复
7
yxdengos|  楼主 | 2008-12-10 10:15 | 只看该作者

使用特权

评论回复
8
acmilann| | 2008-12-10 17:23 | 只看该作者

换成 contex-M3

使用特权

评论回复
9
工控秀才| | 2008-12-11 09:18 | 只看该作者

6楼正解

我们已经有成熟的产品了

使用特权

评论回复
10
yxdengos|  楼主 | 2008-12-11 10:36 | 只看该作者

应该有办法避免 或者少发生

看到其他友人给的建议

1. 中断ISR尽量短 尽量用汇编

2. ISR中只置标志位 存buffer  在while(1)中进行状态机轮转

  或者加入定时器的中断 进行轮询查看

呵呵多核对于产品的开发商不是我们而言 似乎是一种奢望 在这个版里面 当然用单片机 可能我孤陋寡闻 没有听说过多核单片机……

谢谢大家!

使用特权

评论回复
11
yxdengos|  楼主 | 2008-12-11 10:42 | 只看该作者

多个中断

看到前面的楼“提高MCU速度”

我觉得尽管MCU的速度 频率高于中断 但是多中断 肯定会造成中断冲突啊……

使用特权

评论回复
12
aceice| | 2008-12-11 10:48 | 只看该作者

中断中只安排查询标志,在while循环检测做响应任务

应该还是很好安排的吧~

使用特权

评论回复
13
HWM| | 2008-12-11 10:51 | 只看该作者

对于单核系统,只能按照轻重缓急,分级规划。否则就没优

原则上是,短而急的服务放在前面(高优先),长而缓的服务放在后面(低优先)。

使用特权

评论回复
14
yxdengos|  楼主 | 2008-12-11 14:06 | 只看该作者

谢谢大家

目前来看 实现实时任务 势必是要加任务控制表…… 最简单就按照UCOS那样

但是合理地编写中断 以及设置优先级 不要漏掉中断就好了

使用特权

评论回复
15
yxdengos|  楼主 | 2008-12-12 09:33 | 只看该作者

顶一下

使用特权

评论回复
16
yxdengos|  楼主 | 2008-12-13 14:30 | 只看该作者

使用特权

评论回复
17
xwj| | 2008-12-17 10:54 | 只看该作者

唉... 很简单,中断做标志

然后用状态机做标记轮询即可

中断占用时间基本为零,根本就不会存在多个中断处理不过来的情况

合理使用状态机做零耗时中断程序是最基本的技能
如果你这都,只能说你的思维方式不适合于编程

那就去学会用OS吧...

使用特权

评论回复
18
xwj| | 2008-12-17 10:57 | 只看该作者

如果你的编程思路不对,就算再多的“多核”也会永远不够..

使用特权

评论回复
19
aceice| | 2008-12-17 11:18 | 只看该作者

除非硬件有中断保存队列,否则即使做标志,也有可能丢失

中断里置位标志还是需要时间的吧,假设你先响应的是高优先级中断,来了个低优先级的,就有可能丢失掉这个低优先级的.......不过这个几率一般很小。
即使有中断保存队列,能否实时处理中断又是个问题。
SO.........没有一劳永逸的解决方案,一切还是要合理安排了

使用特权

评论回复
20
computer00| | 2008-12-17 11:33 | 只看该作者

设计得好的裸奔,肯定要比上OS快,不要存在上OS什么都解决

上了OS,增加了任务调度以及一些另外额外的开销,CPU处理能力要打一个折扣。

在中断中,只处理必要的事情,其它事情回到主程序中处理。

使用特权

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

本版积分规则

28

主题

132

帖子

0

粉丝