独望枫

人在尘世间,有缘自相见,变化千千万,未开窍,已迷恋
posts - 45, comments - 0, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

FreeRTOS 线程间同步之临界区

Posted on 2021-07-14 02:07 小菜枫 阅读(443) 评论(0)  编辑 收藏 引用 所属分类: 学习笔记
临界区是提供互斥功能的一种原始方式,可以简单粗暴的实现线程之间的互斥,确保线程间数据同步是稳定可信的
> 临界区有两种,一种是关闭中断及系统任务的
taskENTER_CRITICAL();
taskEXIT_CRITICAL();
另一种是关闭系统任务调度(禁止系统任务调度,直到重新开启任务调度)的
vTaskSuspendScheduler(); / vTaskSuspendAll();
vTaskResumeScheduler(); / vTaskResumeAll();


1、未使用临界区的示例,例如我们理想先在任务1输出10次信息,再到任务2输出10次信息,最后到任务3输出10次信息,如此循环


2、实际运行情况如下:


3、增加临界区:


4、运行效果,达成预期


5、使用挂起调度器方式,这种方式中断是依然可以触发的



6、中断触发情况下,无阻塞,死循环输出信息,然后用串口中断触发输出一个信息


7、运行效果:中断触发被正常执行

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理