一、创建事件
EventGroupHandle_t EventHandle;
EventHandle = xEventGroupCreate();
创建一个新的 RTOS 事件组,并返回 可以引用新创建的事件组的句柄。
二、发送事件
xEventGroupSetBits(EventHandle,EVENT1); //0x01
参数:
xEventGroup | 要设置位的事件组。 该 必须已通过 通过调用 xEventGroupCreate() 创建。 |
uxBitsToSet | 指定要在事件组中设置的一个或多个位的按位值。 例如,将 uxBitsToSet 设置为 0x08,可仅设置位 3。 将 uxBitsToSet 设置 为 0x09,可设置位 3 和位 0。 |
返回:
调用 xEventGroupSetBits() 返回时事件组的值。
返回值可能会 清除 uxBitsToSet 参数指定的位,有如下两个原因:
- 如果设置某个位导致正在等待该位的任务 解除阻塞态, 则可能该位 已被自动清除(请参阅 xEventGroupWaitBits() 的 xClearBitOnExit 参数)。
- 将执行任何处于阻塞态(或就绪态)且优先级 高于调用 xEventGroupSetBits() 的任务, 并可能在调用 xEventGroupSetBits() 返回之前 更改事件组值。
三、阻塞接收事件
r_event = xEventGroupWaitBits(gvalue.EventHandle, //事件的句柄
EVENT1 , //感兴趣的事件
pdTRUE, //退出时是否清除事件位
pdTRUE, //是否满足所有事件
portMAX_DELAY); //超时时间,一直等所有事件都满足
if((EVENT1 & r_event) == (EVENT1))
{
DEBUGMSG("KEY2按下\r\n");
}
else
{
DEBUGMSG("事件错误\r\n");
}
参数:
xEventGroup | 正在测试位的事件组。 此前 必须已通过 xEventGroupCreate() 创建好事件组。 |
uxBitsToWaitFor | 指定事件组中要测试的一个或多个事件位 的按位值。 例如,要等待第 0 位和/或第 2 位, 请将 uxBitsToWaitFor 设置为 0x05。 要等待第 0 位和/或第 1 位和/或第 2 位, 请设置 uxBitsToWaitFor 为 0x07, 以此类推。 uxBitsToWaitFor 不得设置为 0。 |
xClearOnExit | 如果 xClearOnExit 设置为 pdTRUE, 那么在作为 uxBitsToWaitFor 参数传递的值中设置的任何位 会在 xEventGroupWaitBits() 返回某个值之前在事件组中清除掉, 前提是 xEventGroupWaitBits() 因超时以外的原因而返回值 。 超时值由 xTicksToWait 参数设置。 如果 xClearOnExit 设置为 pdFALSE, 那么当调用 xEventGroupWaitBits() 返回时,事件组中设置的位不会改变。 |
xWaitForAllBits | xWaitForAllBits 用于创建逻辑与测试 (必须设置所有位)或逻辑或测试(必须设置一个 或多个位),如下所示: 如果 xWaitForAllBits 设置为 pdTRUE, 那么当在作为 uxBitsToWaitFor 参数传递的值中设置的所有位 均已在事件组中设置好,或指定的阻塞时间已过期,则 xEventGroupWaitBits() 会返回相应值。 如果 xWaitForAllBits 设置为 pdFALSE,那么当在作为 uxBitsToWaitFor 参数传递的值中设置的任何位已在事件组中设置好, 或指定的阻塞时间已过期,则 xEventGroupWaitBits() 会返回相应值。 |
xTicksToWait | 等待 uxBitsToWaitFor 指定的一个/所有(取决于 xWaitForAllBits 的值)位完成设置的最大时间 (单位:tick)。 |
返回:
事件位等待完成设置或阻塞时间过期时 的事件组值。 如果 高优先级任务或中断在调用任务解除“已阻塞”状态和退出 xEventGroupWaitBits() 函数之间更改了事件位的值, 则事件组中事件位的当前值将与返回值不同 。
测试返回值以确定 哪些位已完成设置。 如果 xEventGroupWaitBits() 因为超时值过期而返回, 则并非在等待的所有位都会进行设置。 如果 xEventGroupWaitBits() 因为它所等待的位均已完成设置而返回相应值, 则返回值是自动清除 (原因是 xClearOnExit 参数设置为 pdTRUE)任何位之前的事件组值。