MCU内核中的临界区与机器状态寄存器MSR:中断使能及其工作原理详解
一、MCU内核、临界区
-
MCU内核:
- 内核通常指的是MCU的中央处理单元(CPU)的核心部分,负责执行指令和处理任务。
- 在多核MCU中,可以有多个内核,每个内核可以独立执行任务。
-
临界区:
- 临界区是指代码中的一段区域,在该区域内,不允许发生任务切换,以保证代码执行的原子性。
- 临界区通常涉及到对共享资源的访问,为了防止多个任务同时访问导致数据不一致或竞态条件,需要保护这些区域。
两者之间的关系:
任务调度:在多任务操作系统中,MCU内核负责调度任务的执行。当一个任务进入临界区时,它需要确保在这个区域内不会被其他任务中断,直到它安全地退出临界区。
中断处理:在临界区内,通常需要禁用中断,以防止中断服务例程(ISR)中断当前任务的执行。这在单核MCU中尤其重要,因为中断服务例程也运行在同一个内核上。
资源保护:在多核MCU中,即使中断被禁用,其他内核的任务也可能尝试访问相同的资源。因此,需要使用其他同步机制(如互斥锁、信号量等)来保护临界区,确保资源在多核环境下的访问安全。
性能考虑:长时间地保持临界区可能会导致系统响应变慢,因为其他任务无法在该期间被调度执行。因此,设计时需要尽量减少临界区的长度,以提高系统的响应性和性能。
实时性:在实时系统中,临界区的处理尤为重要,因为它们可能直接影响系统的实时性能。确保临界区尽可能短,可以减少任务延迟,提高系统的实时性。
二、临界区的代码处理
一般处理步骤大概是这样的:
- 在进入临界区代码前,一般需要禁用所有中断。
- 记录下MSR
- 临界区正在执行计数加一
- 执行临界区代码
- 临界区代码执行完毕
- 临界区正在执行计数减一
- 如果临界区正在执行计数为0,且之前记录的MSR中中断使能位打开的,则恢复所有中断。
三、机器状态寄存器MSR
机器状态寄存器(Machine Status Register,MSR) 是一个特殊的寄存器,它包含了处理器的状态信息和控制位,这些信息对于操作系统和应用程序的运行至关重要。
-
寄存器内容:
- MSR通常包含多个位字段,每个位字段代表不同的状态或控制标志,例如:
- 中断使能状态(IE位):表明当前中断是否被使能。
- 中断优先级(IP位):定义中断的优先级级别。
- 条件码位:如零标志(Z)、进位标志(C)、溢出标志(V)、负数标志(N)等,这些通常与算术运算有关。
-
与中断的关系:
- 中断使能:MSR中的中断使能位(如IE位)控制着中断的全局使能状态。如果该位被设置,中断将被使能,否则即使有中断请求,中断服务程序也不会被调用。
- 中断优先级:MSR中的中断优先级位(如IP位)定义了不同中断的优先级。当多个中断同时发生时,MCU将根据这些优先级位来决定首先响应哪个中断。
四、临界区(Critical Section)与 保护区(Protected Section)
“临界区”(Critical Section)和"保护区"(Protected Section)这两个术语通常用来描述代码中需要特殊处理以确保数据一致性和系统稳定性的区域,但它们的含义和使用场景略有不同:
-
临界区(Critical Section):
- 临界区是指在多任务环境中,一段代码不允许被多个任务同时执行的部分。这是为了防止数据竞争和确保资源的互斥访问。
- 在临界区内,通常需要禁用中断或使用其他同步机制(如互斥锁)来防止任务切换,从而保证代码的原子性。
- 临界区的典型例子包括对共享资源的访问,如全局变量、硬件寄存器或I/O设备。
-
保护区(Protected Section):
- 保护区通常指的是需要保护的代码段或数据,以防止意外访问或修改。这个概念比临界区更广泛,它不仅包括多任务环境下的同步问题,还包括对数据的保护,防止非授权访问。
- 保护区可能通过权限控制、加密、校验和等手段来实现保护。
两者的关系和区别:
目的:临界区的主要目的是防止在多任务环境中由于任务切换导致的数据不一致,而保护区的目的则是保护代码和数据不被未授权或意外的访问和修改。
实现方式:临界区通常通过禁用中断或使用同步机制实现,而保护区可能通过更多样化的方法实现,如访问控制列表、权限位等。
上下文:临界区的概念更多出现在实时操作系统(RTOS)和多任务环境中,而保护区的概念则可以应用于更广泛的场合,包括但不限于操作系统。
持续时间:临界区通常需要尽可能短,以减少任务阻塞时间,提高系统响应性。保护区的持续时间则取决于保护的需求,可能覆盖整个函数或模块。
五、MCU内核处理中断的一般步骤
-
中断请求检测:
- 当一个中断源发出中断请求时,MCU的中断控制器会检测到这个请求。
-
中断使能检查:
- 中断控制器会检查MSR中的中断使能位(例如IE位)。如果此位被设置,表示全局中断使能,中断请求将被进一步处理。
-
优先级评估:
- 如果中断使能位允许中断处理,中断控制器会根据中断向量表和优先级级联逻辑评估中断请求的优先级。
-
当前任务保存:
- 如果当前任务正在执行并且中断被允许,MCU将保存当前任务的上下文,包括程序计数器(PC)和其他可能的寄存器状态。
-
中断服务程序(ISR)调用:
- 一旦当前任务的上下文被保存,MCU将跳转到相应的中断服务程序(ISR)的入口地址,开始执行中断处理。
-
中断处理完成:
- 中断服务程序执行完成后,MCU将恢复之前保存的任务上下文,并继续执行被中断的任务。
-
返回到主程序:
- 一旦ISR完成,并且任务上下文被恢复,MCU将返回到主程序中的中断点之后的位置继续执行。
作者:洛克Lee