#if OS_CFG_ISR_POST_DEFERRED_EN > 0u /* Deferred ISR Posts ------------------------------ */
/* Lock the scheduler */
#define OS_CRITICAL_ENTER() do { CPU_CRITICAL_ENTER(); OSSchedLockNestingCtr++; if (OSSchedLockNestingCtr == 1u) { OS_SCHED_LOCK_TIME_MEAS_START(); } CPU_CRITICAL_EXIT(); } while (0)
#define OS_CRITICAL_EXIT() do { CPU_CRITICAL_ENTER(); OSSchedLockNestingCtr--; if (OSSchedLockNestingCtr == (OS_NESTING_CTR)0) { OS_SCHED_LOCK_TIME_MEAS_STOP(); if (OSIntQNbrEntries > (OS_OBJ_QTY)0) { CPU_CRITICAL_EXIT(); OS_Sched0(); } else { CPU_CRITICAL_EXIT(); } } else { CPU_CRITICAL_EXIT(); } } while (0)
#else
#define OS_CRITICAL_ENTER() CPU_CRITICAL_ENTER()
#define OS_CRITICAL_EXIT() CPU_CRITICAL_EXIT()
#endif
#define CPU_CRITICAL_ENTER() do { CPU_INT_DIS(); } while (0) /* Disable interrupts. */
#define CPU_CRITICAL_EXIT() do { CPU_INT_EN(); } while (0) /* Re-enable interrupts. */
#define CPU_INT_DIS() do { cpu_sr = CPU_SR_Save(); } while (0) /* Save CPU status word & disable interrupts.*/
#define CPU_INT_EN() do { CPU_SR_Restore(cpu_sr); } while (0) /* Restore CPU status word. */
Deferred interrupt processing is now obsolete and has been removed。
CPU_SR_ALLOC();
CPU_CRITICAL_ENTER(); //屏蔽除NMI和fault以外的所有异常和中断,即将进入临界区
临界区代码,该代码涉及中断访问
CPU_CRITICAL_EXIT() ; //开启除NMI和fault以外的所有异常和中断,退出临界区
CPU_SR_ALLOC();
OS_CRITICAL_ENTER(); //锁定调度器,即将进入临界区
临界区代码,该代码不涉及中断访问
OS_CRITICAL_EXIT() ; //解锁调度器,退出临界区
OS_TICK OSTimeGet (OS_ERR *p_err)
{
OS_TICK ticks;
CPU_SR_ALLOC();
:
:
CPU_CRITICAL_ENTER();
ticks = OSTickCtr;
CPU_CRITICAL_EXIT();
*p_err = OS_ERR_NONE;
return (ticks);
}
#define CPU_INT_DIS() do { cpu_sr = CPU_SR_Save(); } while (0) /* Save CPU status word & disable interrupts.*/
#define CPU_INT_EN() do { CPU_SR_Restore(cpu_sr); } while (0) /* Restore CPU status word. */
CPU_SR_Save
MRS R0, PRIMASK ; Set prio int mask to mask all (except hard faults)
CPSID I
BX LR
CPU_SR_Restore ; See Note #2.
MSR PRIMASK, R0
BX LR
MOV R0,#1
MSR PRIMASK,R0
CPSID I;等价上面语句
MOV R0,#0 MSR PRIMASK,R0
CPSIE I;等价上面语句
原文:https://www.cnblogs.com/yuanqiangfei/p/15229024.html