电子说
与信号量类似,事件组是任务共享了3个字节(24bit)的内容,但不同的是事件组能针对1对多,多对多的任务。如下图所示:
左边的任务可以对事件组的某一位置1或者清0,变为1说明某任务发生了。右边的任务就是阻塞等待,监控该位是否变为1
举个在淘宝上买东西的例子:
任务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
xEventGroupGetBits(xEventPurchase); //读取
xEventGroupClearBits(xEventPurchase, 0xFFFFFF); //清0
代码举例:
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !