osiii中OS_CRITICAL_ENTER和CPU_CRITICAL_ENTER关系
来源:互联网 发布:淘宝怎么修改宝贝图片 编辑:程序博客网 时间:2024/05/22 00:14
osiii的系统函数中的临界代码有的用CPU_CRITICAL_ENTER();
有的用OS_CRITICAL_ENTER();
CPU_CRITICAL_ENTER是真的关掉中断而OS_CRITICAL_ENTER()
要看#define OS_CFG_ISR_POST_DEFERRED_EN 这个选项
---------------------------------------------------------------------------------------------------
#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
-------------------------------------------------------------------
void OS_CPU_SysTickHandler (void)
{
CPU_SR_ALLOC();
CPU_CRITICAL_ENTER();
OSIntNestingCtr++; /* Tell uC/OS-III that we are starting an ISR */
CPU_CRITICAL_EXIT();
OSTimeTick(); /* Call uC/OS-III's OSTimeTick() */
OSIntExit(); /* Tell uC/OS-III that we are leaving the ISR */
} 这里用的是CPU_CRITICAL_ENTER()真的关掉中断了
-----------------------------------------------------------------------------------------------------------------------
在直接提交方式中,uC/OS-III 访问临界段时关中断。然而,在延
迟提交方式中,uC/OS-III 访问临界段时锁调度器。
在延迟提交方式中, 访问中断队列时 uC/OS-III 还是需要关中断。 然而 ,
这段关中断时间是非常短的且是相当固定的。
- osiii中OS_CRITICAL_ENTER和CPU_CRITICAL_ENTER关系
- usosiii中OS_CRITICAL_ENTER() 有两种define含义
- uCOS-III中的OS_CRITICAL_ENTER()和OS_CRITICAL_EXIT()使用
- uC/OSIII在Cortex-M3的任务切换和中断退出分析
- uC/OSIII在Cortex-M3的任务切换和中断退出分析
- μC/OSIII——任务同步和通信(一)
- μC/OSIII——任务同步和通信(二)
- μC/OSIII——任务同步和通信(二)
- μC/OSIII——任务同步和通信(一)
- uC OSIII port
- osiii的调度点
- osiii运行状态图
- uc/OSIII 任务使用
- UML中关联关系和依赖关系的区别
- UML中关联关系和依赖关系的区别
- C++中关联关系和依赖关系的区别
- 理解osIII中的消息队列
- MFC中文档和视图的关系
- 解决 Successfully created project '' on GitHub, but initial push failed: Could not read from remote
- node -- 使用UEditor富文本编辑器
- C#入门9.3——面向对象概述
- 第二章 浏览器安全
- 流媒体开发 HLS草案
- osiii中OS_CRITICAL_ENTER和CPU_CRITICAL_ENTER关系
- Echarts简单应用
- nncq---子系统(信用体系下的 检测机构)
- CDH(Cloudera)与hadoop(Apache)对比
- 类目、延展、协议(三)
- BZOJ 4007 [JLOI2015]战争调度
- JavaWeb-过滤器Filter学习(一)Filter知识点
- scala操作符优先级
- Android ImageView的setImageLevel和level-list使用简介