[应用相关] 单片机_中断的理解

[复制链接]
1877|22
 楼主| carpsnow 发表于 2022-4-22 16:24 | 显示全部楼层 |阅读模式



理论

引入—什么是中断?
  通俗的说:比如我正在写博客,老板突然给我一个任务,我暂停的写博客,转而把老板布置的任务完成之后,再继续写博客,这个过程就可以理解成中断。
  百度引用:‘中断是指CPU在处理某一件事A时,发生了另一件事B,请求CPU迅速去处理(这个过程是“中断发生”);此时,CPU暂时停止当前的A事件(这个过程是“中断响应”),转去处理B事件(这个过程是“中断服务”);待CPU将B事件处理完毕后,再回到事件A被中断打断的地方继续处理事件A(这个过程是“中断返回”)。这一过程,称之为中断。’

深入理解_线程的概念
  我认为要想理解中断的概念,作为一个工科生,还应该理解线程的概念
  线程:程序运行流的最小单元,一个程序是有一个或多个线程组成。
  你可以理解成线程就是单片机执行的一个任务,比如,流水灯、读取发送某一个传感器的数据。但是我们平时写的单片机程序一般就是单线程的,就是单片机一个
  多线程编程:如果你还是个小白,可以简单的理解我们使用的简单的单片机就只能执行一个任务,但是后面通过系统的学习你还会知道,就算是单线程的话,单片机也可以分时“执行多个任务”,这里是借助了计算机实现多线程的编程方法(比如一边播放视频一边听音乐,它可以先执行听音乐的任务,当视频的下一帧到,它先把音乐的任务暂停,保存这个任务所有的变量,执行播放视频到任务,然后再把播放视频的任务暂停,执行播放音乐的任务,不断地循环下去,另外你还要知道单片机的执行速度是非常快滴,快到你根本分辨不出来中间有卡顿。所以就会认为任务同时做了两件事)
  这里可能有很多人想,现在的很多电子设备都是几核几线程的(多核、线程、进程、多线程的理解这里就不多讲了),多个CPU实现了并行运行方式,属于真正的多线程,但是多个CPU的控制方案成本几乎成倍的增加,而且要是实现多个CPU之间的通讯花费的实践较长,并且干扰影响较大。

中断源、中断任务、中断返回:
  总结起来,就是你需要知道中断就是单片机处理任务A时,发生了触发中断的条件停下来执行另一个任务B,触发中断的条件就属于中断源,任务B就是中断任务(中断服务函数)。当中断任务执行完成后中断返回,在回到任务A中断的地方继续处理任务A。

中断优先级
  为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。百度百科
  这里再举一个简单的例子:仍然是我正在写博客,老板给我发了一个任务A,但是同时老婆也给我一个任务B,两个任务同时到达,我该先执行哪一个呢?当然先执行老婆的任务B了,然后再执行老板的任务A,再完成之后在继续写我的博客。在这里执行老婆的任务B就比执行老板任务A的中断优先级级别高。但是我要是正在执行老婆B的任务,这个时候老板的任务A过来了,这个时候我会继续执行老婆的任务B,也是因为老板的任务A没有老婆B的任务优先级高,这里
老婆任务 > 老板任务 > 写博客任务
  所以多级中断的处理原则:当多级中断同时发生时,CPU按照由高到低的顺序响应。高级中断可以打断低级中断处理程序的运行,转而执行高级中断处理程序。当同级中断同时到时,则按位响应。

STM32的抢占优先级、响应优先级、NVIC 的优先级组
这里转自部分 https://blog.csdn.net/qlexcel/article/details/78841296
  STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。
  抢占属性:是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数A),抢占属性由NVIC_IRQChannelPreemptionPriority 的参数配置。
  响应属性:应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达, 则先处理响应优先级高的中断, 响应属性由NVIC_IRQChannelSubPriority 参数配置。
  NVIC 的优先级组:在配置优先级的时候,还要注意一个很重要的问题,即中断种类的数量。NVIC 只可以配置16 种中断向量的优先级,也就是说,抢占优先级和响应优先级的数量由一个4 位的数字来决定,把这个4 位数字的位数分配成抢占优先级部分和响应优先级部分。

定时器中断、外部中断、串行口发送或接受中断
  这些中断事件主要根据中断源不同划分。
  定时器中断是你需要定时的时间A ms到了,会产生定时器中断,执行A ms后的中断内容。主要执行定时完成的任务。属于片内中断。
  外部中断是中断源来自单片机的外部,比如61单片机的P3.2引脚检测到了跳变沿,接着执行外部中断任务。主要执行由外部因素影响的任务。属于片外中断。
  串行口发送或接受中断是在串行口有接收到数据执行的中断任务。主要接收串行口的数据。属于片内中断。


tail066 发表于 2022-4-24 16:51 | 显示全部楼层
通俗的说,很形象,便于理解
p0gon9y 发表于 2022-4-29 13:42 | 显示全部楼层
中断就是到时候就做中断里的事情
d1ng2x 发表于 2022-4-29 14:15 | 显示全部楼层
中断就是打断你现在做的事情,然后去做级别更高的事情
y1n9an 发表于 2022-4-29 14:32 | 显示全部楼层
就跟老板和同事找你做事一样
l1uyn9b 发表于 2022-4-29 14:54 | 显示全部楼层
中断可以理解成线程,但是线程给我的感觉是中断的一种
t1ngus4 发表于 2022-4-29 15:32 | 显示全部楼层
MCU一般都是中断,线程好像是并发的那种
q1d0mnx 发表于 2022-4-29 16:09 | 显示全部楼层
中断是只能同一时间做同一种事情,线程是同一时间可以做多个事情
kaif2n9j 发表于 2022-4-30 09:20 | 显示全部楼层
这个属实一个人理解一个样,但是都能用
tax2r6c 发表于 2022-4-30 10:17 | 显示全部楼层
中断来说就是打断现在的事情,处理级别高的事情
b5z1giu 发表于 2022-4-30 12:33 | 显示全部楼层
在开发MCU来说,中断用的还是比较多的
lix1yr 发表于 2022-4-30 13:05 | 显示全部楼层
中断就是打断啊,我觉得是这样,打断现在的事情
Carina卡 发表于 2022-5-5 16:03 | 显示全部楼层
中断就是在你正常运行呢,突然插进来一个任务,需要先执行新任务
Annie556 发表于 2022-5-5 17:11 | 显示全部楼层
中断其实挺好理解的
Betty996 发表于 2022-5-5 17:25 | 显示全部楼层
线程来说,就是并行吧,中断还是串行
alxd 发表于 2022-5-5 19:02 | 显示全部楼层
讲的挺好的,中断这么理解没啥问题
caigang13 发表于 2022-5-5 20:55 来自手机 | 显示全部楼层
中断好理解,没毛病啊。
Charlene沙 发表于 2022-5-6 12:46 | 显示全部楼层
线程是不是跑系统才能用到,不然MCU都是单线程的吧
Betty1299 发表于 2022-5-6 14:02 | 显示全部楼层
线程属实不太理解,但是我觉得他就是不打断其他的任务,而新开了一个任务服务
Estelle1999 发表于 2022-5-6 14:20 | 显示全部楼层
中断用的比较多,其实多说一嘴,尽量不要在中断里做耗时的事情
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

456

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部