打印

中断处理程序注意事项

[复制链接]
5187|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianli1980|  楼主 | 2012-4-13 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,尽量不要在ISR内使用全局变量,如果一定要使用的话要做好保护,我们称这种应该受保护的区段为critical section.(方法很多,最简单的是在进入critical section之前,先禁止中断的产生,所以在critical section中全局变量不会被ISR破坏,从而达到保护的效果。
2,ISR的第一个动作一定是将所有的CPU内部缓存器存储起来,一般都是存在stack memory内,而ISR的最后一个动作就是返回所有缓存器的值。
3,调用外部函数时要确认其是否“可重进入”,如果一定要在ISR内调用非常reentry的函数,则一般程序在使用同一个模块的函数时,一定要加以保护。
4,ISR的程序或执行时间尽量不要太长。
5,IST尽量不要牵涉到复杂的算法,它的任务只是负责弄清楚发生了什么硬件送给上层的程序,交由系统或应用程序决定要如何处理这个硬件事件。

相关帖子

沙发
jayy| | 2012-4-13 18:38 | 只看该作者
过来了解下

使用特权

评论回复
板凳
jayy| | 2012-4-13 18:39 | 只看该作者
谢谢楼主分享

使用特权

评论回复
地板
xiaoxi053| | 2012-4-13 18:52 | 只看该作者
这个要好好看看

使用特权

评论回复
5
xiaoxi053| | 2012-4-13 18:53 | 只看该作者
都是些细节的概念

使用特权

评论回复
6
liwsx| | 2012-4-13 21:37 | 只看该作者
过来学习一下
长长见识

使用特权

评论回复
7
拿起书本| | 2012-4-13 21:44 | 只看该作者
挺好的经验小技巧,驱动程序开发有两个地方和一般程序比较不一样的地方,一个是中断处理程序ISR,另一个是测试手法。

使用特权

评论回复
8
jxmzzr| | 2012-4-13 22:43 | 只看该作者
驱动程序开发的门槛还是比较高的。
学习了。谢谢楼主

使用特权

评论回复
9
nongfuxu| | 2012-4-14 04:51 | 只看该作者
尽量不要在ISR内使用全局变量

LZ能否说点具体情况?

使用特权

评论回复
10
xlsbz| | 2012-4-14 08:08 | 只看该作者
1  8bit机在全局单字节时候,中断用到 不用保护。全局U16 U32得保护。
2 32位机则全局U16 U32不用保护
保护方法可以禁用中断  也可以比较两值是否相同

中断调用自己写的函数 那么这个函数就仅在中断用。水平不够的话 不要自己写重入

自己的一点理解

使用特权

评论回复
11
meihongpu| | 2012-4-14 08:12 | 只看该作者
感觉说得还不够到位

使用特权

评论回复
12
chenbb8| | 2012-4-14 10:29 | 只看该作者
volatile型的全局变量A,在主循环中被多次使用到,而A的值会被ISR修改,那么在主循环的时候可能会导致出错,而使用保护的话那就会导致长时间中断得不到相应,因此在主循环的某个位置将A赋值给B,然后再使用B来参与任务就OK了

使用特权

评论回复
13
nongfuxu| | 2012-4-14 13:28 | 只看该作者
学习讨论: 询问LS,那是否需要在ISR中设置变量A被改动的标志?:)

使用特权

评论回复
14
vivilzb1985| | 2012-4-15 23:10 | 只看该作者
每次只是用,没系统的去想过的啊,温习一下的

使用特权

评论回复
15
sqcumt123| | 2012-4-17 16:47 | 只看该作者
若是改写系统中断,尽量保存系统中断的原地址;
如果是自定义中断,需要注意是否允许多重中断,即能否被另一个中断(包括同一个中断号的相同中断)打断,若不希望被打断,应当在中断处理程序开始时关闭中断允许位IF(用CLI指令),并且在程序结束时开启中断位(用STI指令)。
另外,中断处理程序本身也是一个过程,也有可能出错,所以尽量不要在中断处理程序中产生错误,以免程序不可控。

使用特权

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

本版积分规则

482

主题

2214

帖子

11

粉丝