今天突然兴起回顾了一下ucosII,本人在这方面也是小白,但研究了一下,也算有点收获,在此记录一下。
我们都知道,代码的临界段,也叫临界区,指的是处理时不可以分割的代码。一旦这部分代码开始执行,则不容许任何中断打断。为了确保临界段代码的可靠执行,在进入临界段之前一定要关闭中断,而临界段执行完后,则要立即打开中断。
首先,在这里,有两个宏定义,定义了OS_ENTER_CRITICAL()函数和
OS_EXIT_CRITICAL()函数,这两个函数的作用是关闭和打开中断。下面我们要知道这两个函数为什么操作中断的开关。我们重点关注宏定义,OS_CPU_SR_Save()这个函数
在os_cpu_a.asm文件中有定义,我们可以看到
这个函数返回了一个值R0,并将这个值赋值给(暂存)cpu_sr内,目的就是保留为关闭中断前的状态, CPSTD I,这段代码是cortex-M3指令集的汇编指令, ,这个操作就把中断给关了。
其次,我们再看OS_CPU_SR_Restore()函数,,将cpu_sr的状态重新读到PRIMASK里面,这样就恢复了最初状态。
哈哈哈,希望帮助到大家!