嵌入式 中断「学习嵌入式开发之中断知识」

学习嵌入式开发之中断知识

1 中断的概念

在我们嵌入式的运用中经常会提及以及使用到中断,那么什么是中断呢?通俗的讲就是程序在执行的过程中突然被某个事件打断,这时原有程序不再继续往下执行而是跳转到中断程序中先去执行中断部分的程序,等中断部分的程序执行完成以后再回到之前的地方继续往下执行。用我们生活中的例子来举例的话就是:你在洗衣服的时候手机电话响起来了,这时你会停止洗衣服去接电话,等接完电话再接着洗衣服。电话铃声响起就好比是中断事件产生,而接电话的这个过程就好比是中断执行。

图1.1 中断程序执行过程

中断涉及到的相关知识结构如下图所示:

图1.2 中断知识结构图

2 中断类型

中断根据产生的事件可以分成不同的中断类型,常见的中断类型有:定时中断、外部中断、发送/接收完成中断等等,具体支持的中断类型与ARM芯片有关。其中使用较多的是定时中断和外部中断。

2.1 定时中断

定时中断常用于周期定时中,当我们需要固定时间执行某个任务时就可以使用定时中断。当设定的定时时间到了时就会产生一个定时中断,从而执行自己需要执行的程序。像我们大多数小型的嵌入式操作系统中就是靠定时中断来完成任务的调度与切换的。

2.2 外部中断

外部中断常用于需要实时检测外部信号的应用上。当我们需要快速响应外部信号时,就可以将其配置为外部中断。一般外部中断需要配置其触发的沿,是上升沿触发还是下降沿触发或者是上升沿和下降沿都触发。

3 中断优先级及优先级分组

在一个大型的系统中往往会配置很多的中断,如果同时有多个中断事件产生时,是怎么处理的呢?这时我们引出中断优先级以及中断优先级分组的概念。这里我们以STM32F4来进行介绍。

3.1 中断优先级分组

通常我们把中断优先级分成抢占式优先级与响应式优先级。当多个中断事件产生时,首先会判断谁的抢占式优先级比较高优先级高地获得优先权,如果抢占式优先级一样的话才去判断谁的响应优先级高。

具体抢占式优先级和响应式优先级的级别我们是可以配置的,其中以STM32F4为例,抢占式优先级和响应式优先级一共由4位组成,根据抢占式优先级和响应式优先级所使用的位不一样可以分成5组。(中断优先级分组)其分配如下:

组别

分配结果

1

0位抢占优先级,4位响应优先级

2

1位抢占优先级,3位响应优先级

3

2位抢占优先级,2位响应优先级

4

3位抢占优先级,1位响应优先级

5

4位抢占优先级,0位响应优先级

3.2 中断优先级

根据上面的分组不同其抢占式优先级与响应优先级的级别不同,其中数值越小其优先级越高,比如优先级为0的中断事件要比优先级为1的要高。(STM32F4为例)当两个的中断的抢占式优先级和响应优先级都一样的话谁先产生谁就先执行,否则谁的优先级高谁就先执行。需要注意的是如果一个中断的抢占式优先级高于正在执行的中断程序的话,抢占式优先级高的中断是可以打断低优先级的中断(中断嵌套);而抢占式优先级一样即使响应优先级高于正在执行的中断程序也无法将其打断。

4 中断使用注意

1、由于中断会打断其它程序的正常运行,因此不能在中断里面编写大量的程序。往往中断子程序里面的程序越简短越好。

2、中断处理完成以后要及时的将中断事件标志进行清除,否则中断会不停的执行导致异常。

3、共享资源访问管理,当在中断中操作一个全局变量时需要特别注意,需要确保在其它程序和中断中没有同时操作。否则可能会导致数据异常。

5 总结

本篇介绍了中断的概念以及涉及到知识。中断这块的知识相当比较简单,但是要郑州的将其用好还是需要大家去进行一些实际操作才行。主要掌握了中断事件、中断优先级分组、中断优先级以及中断子函数基本上就差不多,虽然不同的ARM芯片有所不同但是万变不离其宗大体的知识基本上就这些。大家对嵌入式方面的知识感兴趣的话可以关注我,我会不定期地持续带大家一起学习嵌入式方面的相关知识,有问题的欢迎大家在评论区留言!!!

上一篇: 女销售原来靠这样卖房(楼盘置业顾问提成大概多少)
下一篇: 苏州新区枫桥3月第2周二手房均价29148元/平环比微跌看那个小区有潜力