目录
一、简介
1.1、开发环境
1.2、摘要
二、创建事件标志组
2.1、动态创建
2.2、静态创建
三、设置事件位
3.1、中断级置位事件位API注意事项
3.2、置位事件位
3.3、复位事件位
四、获取事件标志组值
五、等待事件位
STM32CubeIDE V1.9,FreeRTOS CMSIS_V1。
FreeRTOS事件标志组的API范例,编程时复制使用,把“Example"全部替换成所需名称,高效统一。
头文件声明语句:
extern EventGroupHandle_t EXAMPLE_EVENT_GROUP_HANDLE; //事件标志组句柄
typedef EventBits_t EXAMPLE_EVENT_GROUT_VALUE; //事件标志组值类型
#define EXAMPLE_EVENT_GROUP_BIT1 0X0001 //第1位
#define EXAMPLE_EVENT_GROUP_BIT2 0X0002 //第2位
#define EXAMPLE_EVENT_GROUP_BIT3 0X0004 //第3位
#define EXAMPLE_EVENT_GROUP_BIT4 0X0008 //第4位
#define EXAMPLE_EVENT_GROUP_BIT5 0X0010 //第5位
#define EXAMPLE_EVENT_GROUP_BIT6 0X0020 //第6位
#define EXAMPLE_EVENT_GROUP_BIT7 0X0040 //第7位
#define EXAMPLE_EVENT_GROUP_BIT8 0X0080 //第8位
#define EXAMPLE_EVENT_GROUP_BIT9 0X0100 //第9位
#define EXAMPLE_EVENT_GROUP_BIT10 0X0200 //第10位
#define EXAMPLE_EVENT_GROUP_BIT11 0X0400 //第11位
#define EXAMPLE_EVENT_GROUP_BIT12 0X0800 //第12位
#define EXAMPLE_EVENT_GROUP_BIT13 0X1000 //第13位
#define EXAMPLE_EVENT_GROUP_BIT14 0X2000 //第14位
#define EXAMPLE_EVENT_GROUP_BIT15 0X4000 //第15位
#define EXAMPLE_EVENT_GROUP_BIT16 0X8000 //第16位
工程文件定义语句:
EventGroupHandle_t EXAMPLE_EVENT_GROUP_HANDLE; //事件标志组句柄
动态创建事件标志组语句:
EXAMPLE_EVENT_GROUP_HANDLE = xEventGroupCreate(); //动态创建事件标志组
注:创建成功返回事件组句柄;创建失败返回NULL。
头文件声明语句:
extern EventGroupHandle_t EXAMPLE_EVENT_GROUP_HANDLE; //事件标志组句柄
extern StaticEventGroup_t EXAMPLE_EVENT_GROUP_BUFFER; //事件标志组变量
typedef EventBits_t EXAMPLE_EVENT_GROUT_VALUE; //事件标志组值类型
#define EXAMPLE_EVENT_GROUP_BIT1 0X0001 //第1位
#define EXAMPLE_EVENT_GROUP_BIT2 0X0002 //第2位
#define EXAMPLE_EVENT_GROUP_BIT3 0X0004 //第3位
#define EXAMPLE_EVENT_GROUP_BIT4 0X0008 //第4位
#define EXAMPLE_EVENT_GROUP_BIT5 0X0010 //第5位
#define EXAMPLE_EVENT_GROUP_BIT6 0X0020 //第6位
#define EXAMPLE_EVENT_GROUP_BIT7 0X0040 //第7位
#define EXAMPLE_EVENT_GROUP_BIT8 0X0080 //第8位
#define EXAMPLE_EVENT_GROUP_BIT9 0X0100 //第9位
#define EXAMPLE_EVENT_GROUP_BIT10 0X0200 //第10位
#define EXAMPLE_EVENT_GROUP_BIT11 0X0400 //第11位
#define EXAMPLE_EVENT_GROUP_BIT12 0X0800 //第12位
#define EXAMPLE_EVENT_GROUP_BIT13 0X1000 //第13位
#define EXAMPLE_EVENT_GROUP_BIT14 0X2000 //第14位
#define EXAMPLE_EVENT_GROUP_BIT15 0X4000 //第15位
#define EXAMPLE_EVENT_GROUP_BIT16 0X8000 //第16位
工程文件定义语句:
EventGroupHandle_t EXAMPLE_EVENT_GROUP_HANDLE; //事件标志组句柄
StaticEventGroup_t EXAMPLE_EVENT_GROUP_BUFFER; //事件标志组变量
静态创建事件标志组语句:
EXAMPLE_EVENT_GROUP_HANDLE = xEventGroupCreateStatic(&EXAMPLE_EVENT_GROUP_BUFFER); //静态创建事件标志组语句
注:创建成功返回事件组句柄;创建失败返回NULL。
xEventGroupSetBitsFromISR(),默认为Disable,需要先设置为Enable;根据系统提示,要先设置xTimerPendFunctionCall()为EnableI,才能设置前者。
任务级置位语句:
xEventGroupSetBits(EXAMPLE_EVENT_GROUP_HANDLE, EXAMPLE_EVENT_GROUP_BIT1); //置位第1位
返回值:将指定事件位置位后的事件组值。
中断级置位语句:
xEventGroupSetBitsFromISR(EXAMPLE_EVENT_GROUP_HANDLE, EXAMPLE_EVENT_GROUP_BIT1,NULL); //置位第1位
返回值:置位成功返回pdPASS;置位失败返回pdFALSE。
注:亲测2条语句均可用于软件定时器的回调函数中。
任务级复位语句:
xEventGroupClearBits(EXAMPLE_EVENT_GROUP_HANDLE, EXAMPLE_EVENT_GROUP_BIT1); //置位第1位
返回值:将指定事件位置位后的事件组值。
中断级复位语句:
xEventGroupClearBitsFromISR(EXAMPLE_EVENT_GROUP_HANDLE, EXAMPLE_EVENT_GROUP_BIT1,NULL); //置位第1位
返回值:置位成功返回pdPASS;置位失败返回pdFALSE。
3.3、
定义变量语句:
EXAMPLE_EVENT_GROUT_VALUE value;
任务级获取语句:
value = xEventGroupGetBits(EXAMPLE_EVENT_GROUP_HANDLE); //获取事件标志组值
中断级获取语句:
value = xEventGroupGetBitsFromISR(EXAMPLE_EVENT_GROUP_HANDLE); //获取事件标志组值
头文件宏定义语句:
#define EXAMPLE1_EVETT_GROUP_WAIT_FORD EXAMPLE_EVENT_GROUP_BIT1 | EXAMPLE_EVENT_GROUP_BIT2 //事件1等待的事件位
#define EXAMPLE1_EVETT_GROUP_WAIT_EXIT pdTRUE //事件1退出方式
#define EXAMPLE1_EVETT_GROUP_WAIT_TYPE pdTRUE //事件1触发方式
#define EXAMPLE1_EVETT_GROUP_WAIT_TICK portMAX_DELAY //事件1等待时长
定义返回值变量语句:
EXAMPLE_EVENT_GROUT_VALUE result;
等待事件位语句:
result = xEventGroupWaitBits( //等待事件标志组
EXAMPLE_EVENT_GROUP_HANDLE, //事件标志组句柄
EXAMPLE1_EVETT_GROUP_WAIT_FORD, //事件标志组事件位
EXAMPLE1_EVETT_GROUP_WAIT_EXIT, //事件标志组退出方式
EXAMPLE1_EVETT_GROUP_WAIT_TYPE, //事件标志组触发方式
EXAMPLE1_EVETT_GROUP_WAIT_TICK ); //事件标志组等待时长
事件位:对应事件位置1,及等待该事件位,如等待bit0和bit1,则值为0x03;
退出方式:pdTRUE,复位本次等待的事件位;pdFALSE,保留本次等待的事件位;
触发方式:pdTRUE,等待的事件位全部置1,事件等待完成;pdFALSE,等待的事件位任意一个为1,事件等待完成。
返回值:事件标志组的值。