FreeRTOS对事件标志组的总结

事件标志组

事件标志组讲可以用一个例子来理解,“拼车”,一辆车上有32个座位(一个事件标志组的长度),前8个座位用来存放车辆信息,车上可以坐24个人。我们可以选择当所有人都坐满再发车,也可以选择只坐一个人就开车,通过使用下边这个函数来等待乘客(即不同的事件是否发生)。

图一:

        EventBits_t uxBits = xEventGroupWaitBits(
            xEventGroup,        // 事件标志组句柄
            bits_to_wait_for,   // 等待的位掩码(BIT_0 和 BIT_1)
            pdTRUE,             // 当事件位被置位后清除
            pdTRUE,             // 等待所有事件位
            portMAX_DELAY       // 无限期等待
        );

参数解释:

  1. xEventGroup

    • 事件标志组的句柄,类型为 EventGroupHandle_t
    • 它是由函数 xEventGroupCreate() 创建的事件标志组对象,多个任务可以通过此句柄访问该事件组。
  2. uxBitsToWaitFor

    • 任务希望等待的事件位(即感兴趣的事件位)。它是一个位掩码(bitmask),指定任务等待的事件位,类型为 EventBits_t
    • 例如,0x01 表示等待第 0 位,0x03 表示等待第 0 和第 1 位。
  3. xClearOnExit

    • 如果设置为 pdTRUE,在任务成功检测到事件位被置位后,函数返回时会自动清除那些被置位的位。
    • 如果设置为 pdFALSE,事件位在函数返回时不会被清除。
    • 这个参数的作用是决定任务是否在检测到事件后,自动清除这些事件,方便用于一些一次性事件的处理场景。
  4. xWaitForAllBits

    • 如果设置为 pdTRUE,表示任务希望等待所有指定的事件位都被置位(即与 uxBitsToWaitFor 位掩码匹配的所有位都为 1)。
    • 如果设置为 pdFALSE,只要有任何一个指定的事件位被置位,任务就会继续执行。
    • 这个参数决定了任务是等待所有位还是部分位。
  5. xTicksToWait

    • 指定任务等待事件位被置位的最大时间,单位是系统时钟节拍(ticks),类型为 TickType_t
    • 如果设置为 portMAX_DELAY,表示任务无限期等待,直到事件位满足条件。
    • 如果等待时间到期,但指定的事件位仍未满足条件,任务将停止等待并继续执行。

每个乘客上车时都要出示车票即

EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet )

这个函数包括乘客要乘坐的车次座位号,乘客上车之后对应的座位就变为1,代表该座位已有人。司机师傅可以通过

xEventGroupGetBits( xEventGroup )

xEventGroupGetBits函数来判断哪些座位已经有乘客了。
好的,现在司机师傅已经清点好了人数,要出发了,出发即清零(出发所有的 乘客就下车,这样好理解一些),清零有两种方式。第一种清点完人数清零(出发代表的是将标志组所有位置零),方便下一次上车,上的是同一辆车,同一个时间标志组,使用这个函数来清零

xEventGroupClearBits((EventGroupHandle_t) EventGroupHandler, ( EventBits_t) EVENTBIT_ALL);

第二种是乘客上来之后司机不清点直接出发(即在xEventGroupWaitBits这个函数中自动清零,第三个参数改为pdTRUE)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值