usosiii中OS_CRITICAL_ENTER() 有两种define含义

#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)
                                                                 /* Lock the scheduler but re-enable interrupts       */
#define  OS_CRITICAL_ENTER_CPU_EXIT()                              \
         do {                                                      \
             OSSchedLockNestingCtr++;                              \
                                                                   \
             if (OSSchedLockNestingCtr == 1u) {                    \
                 OS_SCHED_LOCK_TIME_MEAS_START();                  \
             }                                                     \
             CPU_CRITICAL_EXIT();                                  \
         } while (0)


                                                                 /* Scheduling occurs only if an interrupt occurs     */
#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)


#define  OS_CRITICAL_EXIT_NO_SCHED()                               \
         do {                                                      \
             CPU_CRITICAL_ENTER();                                 \
             OSSchedLockNestingCtr--;                              \
             if (OSSchedLockNestingCtr == (OS_NESTING_CTR)0) {     \
                 OS_SCHED_LOCK_TIME_MEAS_STOP();                   \
             }                                                     \
             CPU_CRITICAL_EXIT();                                  \
         } while (0)




#else                                                            /* Direct ISR Posts -------------------------------- */




#define  OS_CRITICAL_ENTER()                    CPU_CRITICAL_ENTER()


#define  OS_CRITICAL_ENTER_CPU_EXIT()


#define  OS_CRITICAL_EXIT()                     CPU_CRITICAL_EXIT()


#define  OS_CRITICAL_EXIT_NO_SCHED()            CPU_CRITICAL_EXIT()


#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是uC/OS-II操作系统的一部分。主要涉及到操作系统关于断和临界区的处理。下面是对每个部分的解释: 1. `#define OS_CRITICAL_METHOD 3`:定义临界区保护方法。在本例,使用了方法3,即使用汇编代码实现保护。 2. `#if OS_CRITICAL_METHOD == 3`:根据定义的保护方法选择不同的临界区保护方式。 3. `#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();}`:定义进入临界区的宏,其`OS_CPU_SR_Save()`是一个汇编函数,用于保存CPU状态寄存器的值,并关闭断。 4. `#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);}`:定义退出临界区的宏,其`OS_CPU_SR_Restore(cpu_sr)`是一个汇编函数,用于恢复CPU状态寄存器的值,并打开断。 5. `void OSCtxSw(void)`:任务切换函数,用于把当前任务切换到下一个就绪任务。 6. `void OSIntCtxSw(void)`:断切换函数,用于在断服务程序切换任务。 7. `void OSStartHighRdy(void)`:启动系统,从最高优先级的任务开始执行。 8. `void OSPendSV(void)`:处理断服务程序的软件断请求。 9. `#if OS_CRITICAL_METHOD == 3u`:同2。 10. `OS_CPU_SR OS_CPU_SR_Save(void)`:保存CPU状态寄存器的值,并关闭断。 11. `void OS_CPU_SR_Restore(OS_CPU_SR cpu_sr)`:恢复CPU状态寄存器的值,并打开断。 12. `OS_CPU_EXT INT32U OSInterrputSum`:定义了一个全局变量,用于统计断的次数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值