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正常运行。
 

posted @ 2020-10-15 10:06  today3  阅读(2155)  评论(0编辑  收藏  举报