FreeRTOS中断管理与CPU使用率

文章详细阐述了异常和中断的概念,包括同步异常与异步异常的区别,中断的运作机制,以及中断在RTOS中的管理和延迟问题。CPU使用率作为衡量系统性能的指标也被提及,同时介绍了FreeRTOS如何统计CPU利用率及其限制。

异常与中断

  • 异常:异常是指任何打断处理器正常执行,并且迫使处理器进入一个由有特权的特殊指令执行的事件。可以分为同步异常和异步异常。

同步异常:由内部事件(像处理器指令运行产生的事件)引起的异常。(算术运算、校准异常)

异步异常:主要是指由于外部异常源产生的异常,是一个由外部硬件装置产生的事件引起的异步异常。

  • 同步异常不同于异步异常的地方是事件的来源,同步异常事件是由于执行某些指令而从处理器内部产生的,而异步异常事件的来源是外部硬件装置。
  • 同步异常与异步异常的区别还在于,同步异常触发后,系统必须立刻进行处理而不能够依然执行原有的程序指令步骤;而异步异常则可以延缓处理甚至是忽略。

  • 中断:是指中央处理器 CPU 正在处理某件事的时候,外部发生了某一事件,请求 CPU 迅速处理,CPU暂时中断当前的工作,转入处理所发生的事件,处理完后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。(属于异步异常)

中断一般用于处理比较紧急的事件,并且只是做简单的处理,比如标记一下,中断需要快进快出,他会中断CPU的处理过程,使其立即停止来响应当前的中断请求。这样可以使CPU把大量时间耗费在等待、查询外设状态的操作上,可以大大提高系统实时性以及执行效率。

FreeRTOS 源码中有许多处临界段的地方,临界段虽然保护了关键代码的执行不被打断,但也会影响系统的实时,任何使用了操作系统的中断响应都不会比裸机快

比如,某个时候有一个任务在运行中,并且该任务部分程序将中断屏蔽掉,也就是进入临界段中,这个时候如果有一个紧急的中断事件被触发,这个中断就会被挂起,不能得到及时响应,必须等到中断开启才可以得到响应,如果屏蔽中断时间超过了紧急中断能够容忍的程度,具有很大的危害。所以操作系统的中断在某些时候会有适当的中断延迟,所以进入临界段的时候,也需要快进快出。RTOS也能允许一些高优先级的中断不被屏蔽掉,能够及时做出响应,这些中断不受系统管理,也不允许调用RTOS中与中断相关的任何API函数接口。

RTOS的中断管理支持:

  • 开/关中断。
  • 恢复中断。
  • 中断使能。
  • 中断屏蔽。
  • 可选择系统管理的中断优先级。

中断简介

与中断相关的硬件可以划分为三类:外设、中断控制器、CPU 本身

  • 外设:当外设需要请求 CPU 时,产生一个中断信号,该信号连接至中断控制器。
  • 中断控制器:中断控制器是 CPU 众多外设中的一个,它一方面接收其他外设中断信号的输入,另一方面,它会发出中断信号给 CPU。可以通过对中断控制器编程实现对中断源的优先级、触发方式、打开和关闭源等设置操作。在 Cortex-M 系列控制器中常用的中断控制器是 NVIC(内嵌向量中断控制器 Nested Vectored Interrupt Controller)。
  • CPU:CPU 会响应中断源的请求,中断当前正在执行的任务,转而执行中断处理程序。NVIC 最多支持 240个中断,每个中断最多 256 个优先级

与中断相关的名词:

  • 中断号:每个中断请求信号都会有特定的标志,使得计算机能够判断是哪个设备提出的中断请求,这个标志就是中断号。

  • 中断请求:“紧急事件”需向 CPU 提出申请,要求 CPU 暂停当前执行的任务,转而处理该“紧急事件”,这一申请过程称为中断请求。

  • 中断优先级:为使系统能够及时响应并处理所有中断,系统根据中断时间的重要性和紧迫程度,将中断源分为若干个级别,称作中断优先级。

  • 中断处理程序:当外设产生中断请求后,CPU 暂停当前的任务,转而响应中断申请,即执行中断处理程序。

  • 中断触发:中断源发出并送给 CPU 控制信号,将中断触发器置“1”,表明该中断源产生了中断,要求 CPU 去响应该中断,CPU 暂停当前任务,执行相应的中断处理程序。

  • 中断触发类型:外部中断申请通过一个物理信号发送到 NVIC,可以是电平触发或边沿触发。

  • 中断向量:中断服务程序的入口地址。

  • 中断向量表:存储中断向量的存储区,中断向量与中断号对应,中断向量在中断向量表中按照中断号顺序存储。

  • 临界段:代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断。为确保临界段代码的执行不被中断,在进入临界段之前须关中断,而临界段代码执行完毕后,要立即开中断。

运作机制

当中断产生时,处理机将按如下的顺序执行:

  1. 保存当前处理机状态信息
  2. 载入异常或中断处理函数到 PC寄存器
  3. 把控制权转交给处理函数并开始执行
  4. 当处理函数执行完成时,恢复处理器状态信息
  5. 从异常或中断中返回到前一个程序执行点

中断使得 CPU 可以在事件发生时才给予处理,而不必让 CPU 连续不断地查询是否有相应的事件发生。通过两条特殊指令:关中断和开中断可以让处理器不响应或响应中断,在关闭中断期间,通常处理器会把新产生的中断挂起,当中断打开时立刻进行响应,所以会有适当的延时响应中断,故用户在进入临界区的时候应快进快出

中断发生的环境有两种情况:在任务的上下文中,在中断服务函数处理上下文中。

  • 任务工作时发生了中断,中断会打断任务的运行,操作系统将保存当前任务的上下文环境,转而处理中断服务函数,处理完后,恢复任务的上下文环境,继续执行任务。当有新的高优先级中断进来时,会发生中断嵌套。(具体看处理器处理)

中断延迟

即使操作系统的响应很快了,但对于中断的处理仍然存在着中断延迟响应的问题,即有时无法第一时间响应中断。中断延迟是指从硬件中断发生到开始执行中断处理程序第一条指令之间的这段时间,具体为系统接收到中断信号到操作系统作出响应,并完成换到转入中断服务程序的时间

中断时间:(外部)硬件(设备)发生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑烯烃快去学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值