临界区:访问公共资源的代码,在某一个时刻,只能有一个任务能访问公共资源,独占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时间,临界区