程序小白
认证:优质创作者
所在专题目录 查看专题
关于软件的作用域和生命周期的一些理解
浅析RTOS中的钩子函数(HOOK)
RTOS的时间片调度不同处——FreeRTOS与RTT
FreeRTOS中任务间的同步——事件组与全局变量
FreeRTOS的优先级翻转与继承
作者动态 更多
电子元器件那些事儿:三极管工作区的判断如此简单①
1星期前
RT-Thread驱动之路:stm32设备驱动开发之SPI原理①
2星期前
RT-Thread驱动之路:stm32设备驱动开发之浅析注册机制⑤
2星期前
RT-Thread驱动之路:stm32设备驱动开发之uart中断处理④
3星期前
电子元器件那些事儿:继电器电路驱动设计②
3星期前

FreeRTOS中任务间的同步——事件组与全局变量


任务间的同步为什么要用事件组,而不用全局变量呢?


      在裸机开发当中,一般都是将任务用函数的形式进行分配,用全局变量进行同步再爽不过,其实主要存在两个原因,第一就是没有系统的调度,一切都在后台的超级循环中,通过全局变量进行选择查询的方式,进行函数执行顺序的同步。


      冒天下之大不韪:其实在有RTOS的系统中,你也可以通过全局变量进行任务间的同步,这么干的人可不止我一个。其实有好多人用RTOS并不是特别熟悉,任务创建那一套一上,基本上就是靠全局变量进行同步,他用的最多的关于RTOS的API,可能也就是delay了,这么干行不行,当然行,但是说实话有点大材小用,你都上了RTOS了,何不用系统自带的任务同步机制?——唯一的理由可能是这玩意儿学起来真有点费劲。

      当然你这么用的坏处也显而易见:RTOS最核心的任务调度机制已经被你废了一大半了。


      事件组本质上来讲:就是全局变量!!!(为啥没人说这句实话)

      虽然他是一个全局变量,但是他需要使用FreeRTOS提供的相关API进行访问,为啥子要这样干, 就是为了让RTOS的调度器知道,每个任务与事件组之间的依赖关系,通过事件组的设定的不同进行任务状态的划分定义,他才能真正起到调度的作用。

      说白了,调度器不光要负责根据任务的状态以及优先级完成调度工作,他还要给每个任务去定义任务当前的状态是什么。

      事件组则更好理解了,事件组 = 全局变量 + RTOS的API操作。目的有两个:

      1.让调度器清楚地知道事件组的状态。

      2.完成事件组的访问及设定功能。


      希望扯到这里,你能对FreeRTOS为啥要用事件组这种方式,而不是用全局变量进行任务同步有个清醒的认识,同时希望你明白,事件组的本质就是全局变量。


创建一个事件组:

设置一个事件组标志:

获取事件组的标志信息:


      备注:以上皆为任务间同步的事件组应用,中断服务例程与任务间通过事件组同步的API以及应用方式稍有不同。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 4
收藏 2
关注 135
成为作者 赚取收益
全部留言
0/200
  • chaochao1545 2021-10-12 13:30
    正好在学习freertos
    回复