8.3 事件接口 xEventGroupCreate()用于创建一个事件组,vEventGroupDelete()删除事件对象控制块来释放系统资源。 事件组置位,任务中使用 xEventGroupSetBits(),中断中使用xEventGroupSetBitsFromISR(); xEventGroup 事件句柄。uxBitsToSet 指定事件中的事件标志位。如设置 uxBitsToSet 为 0x09 则位 3和位 0 都需要被置位。返回调用 xEventGroupSetBits() 时事件组中的值。
事件组清除位,任务中使用xEventGroupClearBits(),中断中使用 xEventGroupClearBitsFromISR(),都是用于清除事件组指定的位,如果在获取事件的时候没有将对应的标志位清除,那么就需要用这个函数来进行显式清除。 xEventGroup 事件句柄。uxBitsToClear 指定事件组中的哪个位需要清除。如设置 uxBitsToSet 为 0x09则位 3和位 0 都需要被清除。
读取事件标志,任务中使用 xEventGroupGetBits(),中断中使用xEventGroupGetBitsFromISR()。 重点是等待事件函数 xEventGroupWaitBits(),获取任务感兴趣的事件且支持等待超时机制,当且仅当任务等待的事件发生时,任务才能获取到事件信息。否则任务将保持阻塞状态以等待事件发生。当其它任务或中断服务程序往其等待的事件设置对应的标志位,该任务将自动由阻塞态转为就绪态。 EventGroupWaitBits()用于获取事件组中的一个或多个事件发生标志,当要读取的事件标志位没有被置位时,任务将进入阻塞等待状态。要想使用该函数必 须 把FreeRTOS/source/event_groups.c 这个 C 文件添加到工程中。 1. EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
2. const EventBits_t uxBitsToWaitFor,
3. const BaseType_t xClearOnExit,
4. const BaseType_t xWaitForAllBits,
5. TickType_t xTicksToWait )
参数 xEventGroup 事件句柄。 uxBitsToWaitFor 一个按位或的值,指定需要等待事件组中的哪些位置1。如需要等待 bits 0 and/or bit 1 and/or bit 2则 uxBitsToWaitFor 配置为 0x07(0111b)。 xClearOnExit pdTRUE:xEventGroupWaitBits() 等待到满足任务唤醒的事件时,系统将清除由形参 uxBitsToWaitFor 指定的事件标志位。pdFALSE:不会清除由形参 uxBitsToWaitFor 指定的事件标志位。 xWaitForAllBits pdTRUE :当形参 uxBitsToWaitFor 指定的位都置位的时候,xEventGroupWaitBits()才满足任务唤醒的条件,这也是“逻辑与”等待事件,并且在没有超时的情况下返回对应的事件标志位的值。pdFALSE:当形参 uxBitsToWaitFor 指定的位有其中任意一个置位的时候,这也是常说的“逻辑或”等待事件,在没有超时的情况下 函数返回对应的事件标志位的值。xTicksToWait 最大超时时间,单位为系统节拍周期 返回值 返回事件中的哪些事件标志位被置位,返回值很可能并不是用户指定的事件位,需要对返回值进行 判断再处理 。
其应用类似某个全局变量,等待事件的任务在设定的时间内,监控该变量某些位的值;该值由其他任务或中断修改。
|