首页 > 其他分享 >STM32 FreeRTOS 事件标志组

STM32 FreeRTOS 事件标志组

时间:2025-01-17 14:59:21浏览次数:3  
标签:标志 信号量 FreeRTOS TYPE STM32 WIDTH 事件 BITS

目录

事件标志组简介

基本概念

1、事件位(事件标志)

2、事件组

事件组和事件位数据类型

事件标志组和信号量的区别

事件标志组相关API函数介绍


事件标志组简介

基本概念

当在嵌入式系统中运行多个任务时,这些任务可能需要相互通信,协调其操作。FreeRTOS中的事件标志组(Event Flags Group)提供了一种轻量级的机制,用于在任务之间传递信息和同步操作。

事件标志组就像是一个共享的标志牌集合,每个标志位都代表一种特定的状态或事件。任务可以等待或设置这些标志位,从而实现任务之间的协同工作。

1、事件位(事件标志)

事件位用于指示事件是否发生。 事件位通常称为事件标志。例如,应用程序可以:

  • 定义一个位(或标志), 设置为 1 时表示“已收到消息并准备好处理”, 设置为 0 时表示“没有消息等待处理”。
  • 定义一个位(或标志), 设置为 1 时表示“应用程序已将准备发送到网络的消息排队”, 设置为 0 时表示 “没有消息需要排队准备发送到网络”。
  • 定义一个位(或标志), 设置为 1 时表示“需要向网络发送心跳消息”, 设置为 0 时表示“不需要向网络发送心跳消息”。
2、事件组

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

  • 事件标志组位编号为 0 表示“已收到消息并准备好处理”。
  • 事件标志组位编号为 1 表示“应用程序已将准备发送到网络的消息排队”。

事件标志组位编号为 2 表示“需要向网络发送心跳消息”。

事件组和事件位数据类型

事件组由 EventGroupHandle_t 类型的变量引用。

在事件组中实现的位数(或标志数)取决于是使用 configUSE_16_BIT_TICKS 还是 configTICK_TYPE_WIDTH_IN_BITS 来控制 TickType_t 的类型(新版本):

1、如果 configUSE_16_BIT_TICKS 设置为 1,则事件组内实现的位数(或标志数)为 8; 如果 configUSE_16_BIT_TICKS 设置为 0,则为 24。------滴答值位数减8

2、如果 configTICK_TYPE_WIDTH_IN_BITS 设为 TICK_TYPE_WIDTH_16_BITS,则事件组内实现的位数(或标志数)为 8。

3、如果 configTICK_TYPE_WIDTH_IN_BITS 设为 TICK_TYPE_WIDTH_32_BITS,则为 24 。

4、如果 configTICK_TYPE_WIDTH_IN_BITS 设为 TICK_TYPE_WIDTH_64_BITS,则为 56。

对configUSE_16_BIT_TICKS或configTICK_TYPE_WIDTH_IN_BITS 的依赖源于 RTOS 任务内部实现中用于线程本地存储的数据类型。我们当前的版本不支持configTICK_TYPE_WIDTH_IN_BITS配置,只有configUSE_16_BIT_TICKS配置。

事件组中的所有事件位都 存储在 EventBits_t 类型的单个无符号整数变量中。 事件位 0 存储在位 0 中,事件位 1 存储在位1 中,依此类推。

下图表示一个 24 位事件组,使用 3 个位来保存前面描述的 3 个示例事件。 在图片中,仅设置了事件位2。

事件标志组和信号量的区别

事件标志组(Event Flags Group)和信号量(Semaphore)都是FreeRTOS中用于任务同步和通信的机制,但它们在用途和行为上有一些关键的区别。

事件标志组

信号量

主要用于任务之间的事件通知和同步。每个标志位通常代表一个特定的状态或事件,任务可以等待某些标志的发生或者设置标志来通知其他任务。

用于任务之间的资源控制和同步。信号量通常用来保护共享资源,控制对共享资源的访问,以及在任务之间提供同步。

每个标志位通常代表一个不同的事件,每个标志位只有两个状态,即已设置或未设置(0/1)。

信号量是一个计数器,可以具有大于1的值,表示可用的资源数量。信号量的计数可以动态增减,而且可以用于实现互斥、同步等场景。

适用于需要向其他任务通知事件发生或等待特定事件的场景,例如数据准备就绪、某个条件满足等。

适用于需要对共享资源进行控制,限制同时访问某个资源的任务数量,以及确保任务按顺序访问共享资源的场景。

任务可以等待多个特定的标志位同时发生(&),或者等待任意一个标志位发生(|)。

任务等待信号量的发放,当信号量的计数大于零时,任务可以继续执行。

总体来说,事件标志组更侧重于任务间的事件通知和同步,而信号量更侧重于资源的控制和同步。在设计中,根据具体需求选择合适的机制会更有利于系统的设计和性能。

事件标志组相关API函数介绍

事件标志组相关函数:

函数

描述

xEventGroupCreate()

使用动态方式创建事件标志组

xEventGroupCreateStatic()

使用静态方式创建事件标志组

xEventGroupClearBits()

清零事件标志位

xEventGroupClearBitsFromISR()

在中断中清零事件标志位

xEventGroupSetBits()

设置事件标志位

xEventGroupSetBitsFromISR()

在中断中设置事件标志位

xEventGroupWaitBits()

等待事件标志位

xEventGroupSync()

设置事件标志位,并等待事件标志位

标签:标志,信号量,FreeRTOS,TYPE,STM32,WIDTH,事件,BITS
From: https://blog.csdn.net/qq_64219867/article/details/145206579

相关文章

  • STM32学习笔记—SPI总线通信原理与实验
    SPI总线通信原理SPI总线简介SPI接口是Motorola首先提出的全双工三线同步串行外围接口,采用主从模式(MasterSlave)架构;支持多slave模式应用,一般仅支持单Master。时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSBfirst);SPI接口有2根单向数据线,为全双工通信,......
  • 基于STM32单片机自动售货机扫码支付无人超市语音播报无线蓝牙APP/WIFI-APP控制/WIFI视
    STM32-S147语音播报+二维码付+4种商品+4路电机出货+选货+手付+库存+缺货+找零+声光+按键+TFT屏+(无线方式选择)产品功能描述:本系统由STM32F103C8T6单片机核心板、1.44寸TFT彩屏、(无线蓝牙/无线WIFI/无线视频监控模块-可选)、步进电机控制电路、语音播报模块接口、蜂鸣器报警电......
  • stm32步进电机曲线控制程序
    在STM32上实现步进电机的曲线控制涉及多个步骤,包括硬件配置、步进电机驱动器的接口、PWM信号生成、以及通过算法实现速度或位置的曲线控制。以下是一个基本的步骤和代码示例,帮助你入门。硬件配置连接步进电机和驱动器:确保步进电机和驱动器正确连接,并且驱动器的控制信号(如脉冲......
  • STM32使用PWM制作呼吸灯
    一、引言在STM32微控制器的众多应用中,PWM(脉冲宽度调制)功能是一项非常实用的技术。PWM可以通过控制信号的占空比来实现对输出功率的精确控制,其应用范围广泛,从电机速度控制、灯光亮度调节到音频信号的生成等。其中,使用PWM制作呼吸灯是一个经典的入门示例,能够帮助我们很......
  • STM32 RTC 功能详解与代码示例
    一、引言STM32微控制器的实时时钟(RTC)功能在许多应用中都非常重要,它允许设备保持精确的时间和日期信息,即使在系统断电或复位后,只要有备用电源(如锂电池)为RTC供电,就能继续运行。这对于需要时间戳、定时任务、日历功能以及其他需要精确时间信息的应用程序来说是必不可少的,例......
  • stm32与昆仑通态modbus通讯
    一、引言在工业自动化和物联网等领域,STM32微控制器和昆仑通态人机界面(HMI)的组合应用十分广泛。为了实现它们之间的数据交换和设备控制,通常采用Modbus通信协议。Modbus是一种简单且通用的通信协议,支持多种物理接口,如RS-485、RS-232和TCP/IP等,其具有易于实现、开放性......
  • STM32H563 HAL库 LWIP裸机移植
    一、STM32H563与LWIP简介STM32H563是STMicroelectronics推出的一款高性能32位微控制器,具有丰富的外设和强大的处理能力,适用于各种复杂的嵌入式系统应用。LWIP(LightweightIP)是一个小型开源的TCP/IP协议栈,旨在为嵌入式系统提供轻量级的网络功能,它能够在资源有限的......
  • STM32F103使用flash_algo解析FLM相关
    1、全局区(.bss段和.data段)根据实际情况修改2、栈顶地址根据实际情况修改/*FlashOSRoutines(AutomagicallyGenerated)*Copyright(c)2009-2015ARMLimited*/#include"flash_blob.h"//代码区flash_code[]使用JLINK/STLINK等放到RAM,一般是0x20000000staticconst......
  • stm32 无源蜂鸣器实验 播放音乐 猪八戒背媳妇
    前言在8051及stm32各类教辅资料中,均有无源蜂鸣器相关的实验。可以通过单片机控制无源蜂鸣器发出指定频率和时长的声音,从而实现播放音乐的功能。在以往的此类案例中,乐谱的谱写非常不方便,除了案例提供的乐谱数据外,学者要将一个其它的简谱转换成单片机可以播放的数据,基本不可......
  • STM32简介
    1、STM32是基于ARM-Cortex-M内核开发的32位微控制器。STM32分为高性能系列,主流系列,低功耗系列、无线系列:视频采用STM32F1系列高性能系列:STM32F2,F4,F7,H7(3224内核跑分,双核微控制器=550MHz的Cortex-M7+240MHz的Cortex-M4)2、ARM内核型号:经典ARM处理器:ARM7、ARM9、ARM11Corte......