OSIntEnter()和OSIntExit()
OSIntEnter()和OSIntExit()两者必须成对出现。
进入中断时调用OSIntEnter(),退出中断时调用OSIntExit()。
OSIntEnter()应该在中断关闭后调用,所以函数里面没有使用OS_ENTER_CRITICAL() and OS_EXIT_CRITICAL(),如此在调用OSIntEnter()前需关闭中断。
OSIntExit():所有中断结束后进行任务调度,使系统更加实时。
OS_Sched():uCOS进行任务调度,不在中断调用。
OSIntNesting:统计中断嵌套数,最多255。在OSIntExit()和OS_Sched()中都有判别。
OS_ENTER_CRITICAL():保存中断状态,关中断。uCOS将无法再执行任务调度,硬件中断也被屏蔽。
#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();}
OS_CPU_SR_Save
MRS R0, PRIMASK ; Set prio int mask to mask all (except faults)
CPSID I
BX LR
CPSID I:屏蔽所有中断(除NMI,复位中断,硬件中断),当然包括PendSV。
可用于处理比较连续的事情,不希望被uCOS打断。
OS_EXIT_CRITICAL():恢复中断状态,开中断。uCOS正常运行。