RT-Thread学习笔记(5)- 临界区的保护

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37697335/article/details/83242178

(一)、临界区的保护

简单来说,临界区的设立就是为了保护在临界区内的代码不会被外界打断,顺序完整的执行下去,这样做的目的是保证一些共享的资源在执行临界区代码的中途被临界区外的代码改变,造成数据紊乱,功能错误。

RT-Thread设置临界区的两种方式(主要指的是API的调用)及其区别 :

(1)调用这组API, 实现的是禁止任务调度,不会关闭别的中断。如非必须,尽量使用这组,对系统别的部分影响相对较小。

rt_enter_critical();    //API:进入临界区,退出前系统不会发生任务调度
/*
*
*    临界区代码
*
*/       
rt_exit_critical();    //API:退出临界区

(2)调用这组API,会关闭单片机所有的中断。

rt_base_t level;
level = rt_hw_interrupt_disable();    //API:进入临界区,退出前系统不会发生任务调度
/*
*
*    临界区代码
*
*/       
rt_hw_interrupt_enable(level);    //API:退出临界区

(二)、使用临界区的注意事项

临界区的代码尽量短,不要过多地占用CPU的时间。因为这段时间,系统是不能产生任务调度的,如果临界区代码消耗CPU的时间过多,就不能保证别的线程能够得到实时的响应,也就失去了实时操作系统的优势。

猜你喜欢

转载自blog.csdn.net/m0_37697335/article/details/83242178