Posted on 2021-07-14 02:07
小菜枫 阅读(467)
评论(0) 编辑 收藏 引用 所属分类:
学习笔记
临界区是提供互斥功能的一种原始方式,可以简单粗暴的实现线程之间的互斥,确保线程间数据同步是稳定可信的
> 临界区有两种,一种是关闭中断及系统任务的
taskENTER_CRITICAL();
taskEXIT_CRITICAL();
另一种是关闭系统任务调度(禁止系统任务调度,直到重新开启任务调度)的
vTaskSuspendScheduler(); / vTaskSuspendAll();
vTaskResumeScheduler(); / vTaskResumeAll();
1、未使用临界区的示例,例如我们理想先在任务1输出10次信息,再到任务2输出10次信息,最后到任务3输出10次信息,如此循环
2、实际运行情况如下:
3、增加临界区:
4、运行效果,达成预期
5、使用挂起调度器方式,这种方式中断是依然可以触发的
6、中断触发情况下,无阻塞,死循环输出信息,然后用串口中断触发输出一个信息
7、运行效果:中断触发被正常执行
![](/images/cppblog_com/lt450196683/img/frame/freertos/chapter3-thread-sync/critical/FRTOS-3-critical-7-sample-demo-suspend-run.png)