freertos(第八课, event group)

semaphore只能用于单个事件的进程同步,如果需要进行多事件同步,就需要使用eventgroup。
一个eventgroup就是一组eventbit。
我们可以自行约定eventbit所代表的含义。
事件组的类型是EventGroupHandle_t。
一个事件组,可以存储24个事件位。高8位有其他用处。

freertos提供了一系列的API。

EventGroupHandle_t xEventGroupCreate(void);
void vEventGroupDelete(EventGroupHandle_t xEventGroup);

EventBits_t 
xEventGroupSetBits(
		EventGroupHandle_t xEventGroup,
		const EventBist_t uxBitsToSet
		);

EventBits_t 
xEventGroupClearBits(
		EventGroupHandle_t xEventGroup,
		const EventBist_t uxBitsToClear
		);

BaseType_t
xEventGroupSetBitsFromISR(
		EventGroupHandle_t xEventGroup,
		const EventBist_t uxBitsToSet,
		BaseType_t* pxHigherPriorityTaskWoken
		);
		
BaseType_t
xEventGroupClearBitsFromISR(
		EventGroupHandle_t xEventGroup,
		const EventBist_t uxBitsToClear,
		BaseType_t* pxHigherPriorityTaskWoken
		);

EventBits_t xEventGroupGetBits(EventGroupHandle_t xEventGroup);
EventBits_t xEventGroupGetBitsFromISR(EventGroupHandle_t xEventGroup);

EventBits_t 
xEventGroupWaitBits(
		EventGroupHandle_t xEventGroup,
		const EventBits_t uxBitsToWaitFor,
		const BaseType_t xClearOnExit,
		const BaseType_t xWaitForAllBits,
		const TickType_t xTicksToWait
		);

和所有的进程同步一样,eventgroup机制,也是进程向OS申请PV操作的。
waitbits就是进程向OS申请P操作的API。
setbits就是进程向OS申请V操作的API。

任务等待的多个eventbit,可以是逻辑与的关系,也可以是逻辑或的关系,这取决于xWaitforallbits的设置情况,如果设置成pdTRUE,就是逻辑与的关系,如果设置成pdFALSE,就是逻辑或的关系。
eventbit可以作为常规的事件量来使用,即,当event发生时,在ISR或者某个任务中setbit,而在另一个waitbit的进程中,执行event对应的action,并在action完成后,clearbit。从setbit到clearbit,这是一个交互过程,代表一个event从发生到被响应的过程。
eventbit也可以作为状态指示量来使用,即,当event发生时,在ISR或者某个任务中setbit,表示当前处于某个status,而在另一个waitbit的进程中,执行status对应的action,但是执行action的进程,并不负责clearbit,而是由其他的进程或者ISR负责清除。从setbit到clearbit,这是一个状态指示的过程,代表一个status从出现到消失的过程。
这取决于xClearonexit的设置,如果设置成pdTRUE,则eventibit用于常规事件量,如果设置成pdFALSE,则eventbit用于状态指示量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值