FreeRTOS事件组是什么意思

电子说

1.3w人已加入

描述

FreeRTOS

与信号量类似,事件组是任务共享了3个字节(24bit)的内容,但不同的是事件组能针对1对多,多对多的任务。如下图所示:

左边的任务可以对事件组的某一位置1或者清0,变为1说明某任务发生了。右边的任务就是阻塞等待,监控该位是否变为1

FreeRTOS

举个在淘宝上买东西的例子:

FreeRTOS

任务1负责监督是否有商品添加到购物车;用户添加到购物车第0位置1,没添购物车第0位置0 任务2负责监督是否付款,当监督到任务1置1时,打开支付宝扣款成功了第1位置1 任务3是负责出货,当监督到任务2置1后,将第2位置1 当第0、1、2位都为1时,说明交易完成了。

位移操作:

1<<0:1往左边移0位,表示第0位为1 1<<1:1往左边移1位,表示第1位为1 1<<2:1往左边移2位,表示第2位为1 位或运算,实质就是相加:0001|0010|0100=0111 if(a&b):a与b位与,对应的两个二进制位均是1的时候结果位才是1,否则为0

API函数:

EventGroupHandle_t  xEventPurchase = NULL;//创建事件句柄

xEventPurchase = xEventGroupCreate();//创建事件组

 xEventGroupSetBits(xEventPurchase,1<<0); // 将bit 0 设置为1

FreeRTOS

xEventGroupGetBits(xEventPurchase); //读取

xEventGroupClearBits(xEventPurchase, 0xFFFFFF); //清0

代码举例:

FreeRTOS

FreeRTOS

FreeRTOS

FreeRTOS

FreeRTOS



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分