方法一:锁定调度器(推荐) 使用 OSSchedLock() 和 OSSchedUnlock() 函数来暂时禁止任务调度。这会阻止任务切换,但允许中断服务程序(ISR)执行。适用于保护关键代码段不被高优先级任务抢占。 OSSchedLock(); // 禁止任务调度
// 执行需要原子操作的代码
OSSchedUnlock(); // 恢复任务调度
方法二:关闭中断使用宏 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL() 关闭中断,完全阻止任务切换和中断触发。适用于极短的关键操作。 OS_ENTER_CRITICAL(); // 关闭中断
// 执行关键操作(如修改内核数据结构)
OS_EXIT_CRITICAL(); // 恢复中断
|