倚楼等红颜的个人空间 https://bbs.21ic.com/?1553790 [收藏] [复制] [RSS]

日志

说说中断处理

已有 173 次阅读2017-5-12 15:32 |系统分类:兴趣爱好

单片机教科书上都说:中断处理程序不要做太长。
开始的时候我也不知道为什么,经过多次惨痛的教训以后,总结除了如下经验。

第一:中断程序处理一般在中断开始的时候关总中断,在结尾的时候开总中断这样可以保证中断处理的时候不被打断,否则有可能你的程序在中断中一直走下去直到死机。
第二:中断内代码多了,如果涉及变量很多,会导致需要比较大的堆栈需要,不合适,会有可能导致堆栈溢出。
第三:中断内最好不要调用其他函数,假如需要,也不要太多,调用其他函数有可能由于寄存器组不一致而出问题,当然,如果实在需要,调用一个也不是不行。

假设如下,系统有两个中断A和B,优先级等同或者A比B高
      其中中断A比较频繁,中断B不是那么频繁
      时刻一,中断B发生了,由于你在中断B内处理时间较长,而你又没有在中断B开始的时候关总中断,那么很有可能在你处理中断B的时候,中断A来了,于是,中断B的处理暂停,开始执行中断A的程序,执行A的时候你又调用了其他的函数(而调用函数有可能将B里面用到的参数给修改掉,即使不修改B的参数也有问题),经过一段时间的处理以后,回到了B中断,B中断继续执行,还没有执行完,A又来了……
    你可以看到,你的前台程序已经很长时间没有运行了,假设你有养狗的话,此时就很有可能没有喂狗导致系统重新启动了。
    没有养狗的话,你的前台程序长时间不运行,实时性将变得很差?

    综上我们可以看到,中断程序不能做的太长太复杂,最好只是在中断内做一些标志位的置位工作,主程序不停的查询这些标志位而做相应的处理为最好。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)