0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS事件标志组介绍

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-06 17:22 次阅读

1、事件位(事件标志)

事件位用来表明某个事件是否发生,事件位通常用作事件标志,比如下面的几个例子:

● 当收到一条消息并且把这条消息处理掉以后就可以将某个位(标志)置 1,当队列中没有消息需要处理的时候就可以将这个位(标志)置 0。

● 当把队列中的消息通过网络发送输出以后就可以将某个位(标志)置 1,当没有数据需要从网络发送出去的话就将这个位(标志)置 0。

● 现在需要向网络中发送一个心跳信息,将某个位(标志)置 1。现在不需要向网络中发送心跳信息,这个位(标志)置 0。

2、事件组

一个事件组就是一组的事件位,事件组中的事件位通过位编号来访问,同样,以上面列出的三个例子为例:

● 事件标志组的 bit0 表示队列中的消息是否处理掉。

● 事件标志组的 bit1 表示是否有消息需要从网络中发送出去。

● 事件标志组的 bit2 表示现在是否需要向网络发送心跳信息。

3、事件标志组和事件位的数据类型

事件标志组的数据类型为 EventGroupHandle_t,当 configUSE_16_BIT_TICKS 为 1 的时候 事件标志组可以存储 8 个事件位,当 configUSE_16_BIT_TICKS 为 0 的时候事件标志组存储 24个事件位。

事件标志组中的所有事件位都存储在一个无符号的 EventBits_t 类型的变量中,EventBits_t 在 event_groups.h 中有如下定义:

typedef

TickType_tEventBits_t;

数据类型 TickType_t 在文件 portmacro.h 中有如下定义:

#if(configUSE_16_BIT_TICKS==1)

typedef

uint16_t

TickType_t;

#defineportMAX_DELAY(TickType_t)0xffff

#else

typedef

uint32_t

TickType_t;

#defineportMAX_DELAY(TickType_t)0xffffffffUL

#defineportTICK_TYPE_IS_ATOMIC1

#endif

可以看出当 configUSE_16_BIT_TICKS 为 0 的时候 TickType_t 是个 32 位的数据类型,因 此 EventBits_t 也是个 32 位的数据类型。EventBits_t 类型的变量可以存储 24 个事件位,另外的那高 8 位有其他用。事件位 0 存放在这个变量的 bit0 上,变量的 bit1 就是事件位 1,以此类推。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5019

    文章

    18505

    浏览量

    293530
  • 数据
    +关注

    关注

    8

    文章

    6599

    浏览量

    87968
  • FreeRTOS
    +关注

    关注

    12

    文章

    474

    浏览量

    61529
收藏 人收藏

    评论

    相关推荐

    FreeRTOS介绍与基础任务创建

    本篇介绍FreeRTOS与基础任务创建
    的头像 发表于 09-26 09:00 2025次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>介绍</b>与基础任务创建

    使用STM32CubeMX生成的FreeRTOS系统中,似乎没有新封装的事件标志,怎么解决?

    使用STM32CubeMX生成的FreeRTOS系统中,似乎没有新封装的事件标志,如果按照原生的FreeRTOS使用事件标志
    发表于 03-22 08:34

    使用FreeRTOS系统事件标志有些收不到是怎么回事?

    教下,使用FreeRTOS的的件标志, 任务貌似有些标志位收不到,是怎么回事啊 ? 比如事件标志
    发表于 04-26 06:53

    转:freeRTOS事件学习

    像其他RTOS一样,freeRTOS同样有对事件标志位的创建和处理,在中断中可以通过事件传递信息给其他的任务,那么如何创建事件呢?要使用创建Event的API,首先必须配置,且包含
    发表于 08-12 18:29

    转:第18章 FreeRTOS事件标志

    第18章FreeRTOS事件标志 前面的章节我们已经讲解了任务管理和时间管理,从本章节开始讲解任务间的通信和同步机制。首先讲解任务间的通信和同步机制之一,事件标志
    发表于 09-02 12:40

    转:第26章 FreeRTOS任务事件标志

    本章节为大家讲解FreeRTOS事件标志的另一种实现方式----基于任务通知(Task Notifications)的事件标志,这里我们
    发表于 09-08 06:48

    【NUCLEO-F412ZG试用体验】FreeRTOS_事件标志实现任务和中断的同步

    使用事件标志可以实现任务和任务之间以及任务和中断之间的通信或者同步。首先说明,本例程参考了《安富莱_STM32-V5开发板_FreeRTOS教程(V1.0)》,是在上上期报告的基础上,把按键中断由
    发表于 12-28 21:19

    UCOS3的事件标志

    我理解的事件标志主要功能就是根据同步标志组里面的信号的标志位来执行语句。比如有A,B,C三个信号,当我们有一个任务D需要ABC三个信号都到了之后再去执行任务D.这时候就可以用到任务
    发表于 05-11 14:27

    freertos中断置位事件标志输出Error的解决办法?

    新人求教,在原子里的程序加了置位标志,串口输出Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,680,但是不影响程序的运行,这个是什么原因
    发表于 06-18 09:00

    【转载】AT32 FreeRTOS应用笔记

    ........................................83例程介绍 ...................................................... 85FreeRTOS 事件标志
    发表于 08-16 11:56

    怎样去设置FreeRTOS事件标志的事件位呢

    事件标志是什么意思呢?怎样去设置FreeRTOS事件标志的事件位呢?
    发表于 02-28 06:44

    freeRTOS中的消息邮箱

    freeRTOS中的消息邮箱使用是比较灵活的,它可以实现二值信号量、计数信号量、事件标志、消息队列等通知方式。
    的头像 发表于 02-10 11:05 1250次阅读
    <b class='flag-5'>freeRTOS</b>中的消息邮箱

    freeRTOS用于任务之间同步的手段事件标志

    freeRTOS中还有一种可以用于任务之间同步的手段 — 事件标志
    的头像 发表于 02-10 11:10 1307次阅读

    FreeRTOS的事件标志

    之前介绍了使用信号量来完成同步,但是使用信号量来同步的话,任务只能与单个的事件或任务进行同步。有时候某个任务可能会需要与多个事件或任务进行同步,此时信号量就无能为力了。FreeRTOS 提供了一个可选的解决方法,那就是事件标志
    的头像 发表于 02-10 15:58 912次阅读

    FreeRTOS创建事件标志

    创建事件标志 3、设置事件位 4、获取事件标志值 5、等待指定的事件位 某个任务可能需要与多个事件进行同步,那么这个任务就需要等待并判断多个事件位(标 志),使用函数
    的头像 发表于 07-06 17:23 413次阅读
    <b class='flag-5'>FreeRTOS</b>创建事件<b class='flag-5'>标志</b><b class='flag-5'>组</b>