5.中断和临界区的保护

临界区:访问公共资源的代码,在某一个时刻,只能有一个任务能访问公共资源,独占CPU

任务1
funca()
{
value++;
value+=10;
}
任务2
funcb()
{
value++;
}

在以上2个任务中,如果任务1运行过程中任务2也运行了,那么得到的value值可能是错误的。
//RT-Thread使用pend_sv中断来进行任务的切换
任务1
funca()
{	
rt_hw_interrupt_disable;//rt_enter_critical();//关闭系统中断可以禁止任务调度
value++; 
value+=10; rt_hw_interrupt_enable();//rt_exit_critical();
rt_enter_critical
}
任务2
funcb()
{
value++;
}//以上代码正确,value值不会在计算过程中被临时篡改
rt_hw_interrupt_disable()//关闭所有的中断响应
rt_enter_critial()//只是禁止任务中断,并不会关闭中断响应      这2种方式都可以进入临界区        


使用临界区时的注意事项:

临界区中代码不要过度占用CPU时间,临界区

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值