侧边栏壁纸
博主头像
thinkTV博主等级

喜爱动漫的二刺螈一枚,摩托车云爱好者(快要有车了)。 懂一点技术的在读生物医学工程研究生( •̀ ω •́ )✧,多多指教。

  • 累计撰写 127 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

UCOSIII临界段代码保护及任务调度锁

thinkTV
2023-07-14 / 0 评论 / 0 点赞 / 162 阅读 / 455 字 / 正在检测是否收录...

1. 临界段代码保护简介

临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段

适用场合:

图片-1689313396575

临界区是直接屏蔽了中断,系统任务调度靠中断,ISR也靠中断

2. 临界段代码保护函数介绍

uC/OS-III在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断

图片-1689314033945

临界区调用格式示例:

CPU_SR_ALLOC();	
/* 非临界区代码 */ 
CPU_CRITICAL_ENTER() ;
{
        … …	/* 临界区代码 */ 
}
CPU_CRITICAL_EXIT()	;
/* 非临界区代码 */ 	

特点:

  1. 成对使用
  2. 不支持嵌套
  3. 尽量保证临界段耗时短

3. 任务调度锁简介

  • 任务调度锁,用于对调度器上锁以及解锁的。当调度器上锁时则禁止任务调度,当解锁时则允许任务调度
  • 可以多次调用OSSchedLock( )对调度器上锁,解锁时需调用同样次数的OSSchedUnlock( )才可解锁

注意: 调度锁只是将调度器关闭,并不影响中断的执行,中断依旧正常触发,只是不会执行任务切换

4. 任务调度函数介绍

图片-1689314286623

使用格式示例:

OS_ERR 	err ;
OSSchedLock(&err);	   /* 调度器上锁 */ 
{
        /* 操作代码 */
}
OSSchedUnlock(&err);     /* 调度器解锁 */ 
  1. 与临界区不一样的是,挂起任务调度器,未关闭中断;
  2. 它仅仅是防止了任务之间的资源争夺,中断照样可以直接响应;
  3. 挂起调度器的方式,适用于临界区位于任务与任务之间;既不用去延时中断,又可以做到临界区的安全

成对使用、支持嵌套

0

评论区