关于同一个中断,本次中断还没执行完,下一个中断又发生了的问题

2019-07-21 08:47发布

/*************************************************************************
                                   这是一条关于STM的问题
*****************************************************************************/

这个问题,其实是一个老生常谈的问题,早在以前学51单片机的时候,老师就教我们,中断服务里面尽量不要放太多执行代码,意思就是中断里面不能执行太多操作。
最近在实际项目开发中,公司要求用Freescale做一个项目(PS:用惯了STM,真心觉得Freescale好原始。。。),我在写Bootloader 的BOOT程序里面的CAN接收中断,针对不同ID做了不少判断,显得一整个中断里面代码量很大,我同事就说我中断写太复杂,要改,尽量做标志位就好,然后执行函数放在Main函数里。。。
我也理解他的用意,但是自从我学了STM,我就有意的留意到原子大神也是在中断服务函数里面写执行函数,我也管不了以前老师说的那么多了,我也跟着在中断函数里面写执行函数,并且已经习惯了这么写!!!而且非常舒服,目前也还没发生什么异常的错误。
但是,怀揣着一颗做产品研发,稳定,可靠的心态......
就拿CAN通讯来说,CAN的通讯速度是可以设置到非常快的,甚至可以上1M Kbp,我就担心,会不会CAN的通讯速度快到,当我这条报文在中断里面还没处理完,下一条报文又过来了,照理说,这个时候CAN接收中断是不会响应的,那么不就眼睁睁看着报文丢失。。。
希望各位大神能给出点见解。。。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
alexvhozy
2019-07-21 22:03
cortex-m都有pend机制,中断之间的关系不用程序来操心,注意功能实现就可以

就标题的情况来说,同一个中断连续被触发,在上一轮任务执行结束前,后面的中断请求都是被pending(挂起)的,直到执行结束才会找时间重新触发(这部分的操作是被NVIC完全托管的)。当然要是触发中断的时间间隔小于中断的执行时长,那这种设计就是毫无意义的,也无法实现功能了

一周热门 更多>