FreeRTOS事件标志组API使用示例(备忘)

目录

一、简介

1.1、开发环境

1.2、摘要

二、创建事件标志组

2.1、动态创建

2.2、静态创建

三、设置事件位

3.1、中断级置位事件位API注意事项

 3.2、置位事件位

3.3、复位事件位

四、获取事件标志组值

五、等待事件位


一、简介

1.1、开发环境

STM32CubeIDE V1.9,FreeRTOS CMSIS_V1。

1.2、摘要

FreeRTOS事件标志组的API范例,编程时复制使用,把“Example"全部替换成所需名称,高效统一。

二、创建事件标志组

2.1、动态创建

头文件声明语句:

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。

2.2、静态创建

头文件声明语句:

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。

三、设置事件位

3.1、中断级置位事件位API注意事项

xEventGroupSetBitsFromISR(),默认为Disable,需要先设置为Enable;根据系统提示,要先设置xTimerPendFunctionCall()为EnableI,才能设置前者。

FreeRTOS事件标志组API使用示例(备忘)_第1张图片

 3.2、置位事件位

任务级置位语句:

xEventGroupSetBits(EXAMPLE_EVENT_GROUP_HANDLE, EXAMPLE_EVENT_GROUP_BIT1);    //置位第1位

返回值:将指定事件位置位后的事件组值。

中断级置位语句:

xEventGroupSetBitsFromISR(EXAMPLE_EVENT_GROUP_HANDLE, EXAMPLE_EVENT_GROUP_BIT1,NULL);    //置位第1位

返回值:置位成功返回pdPASS;置位失败返回pdFALSE。

注:亲测2条语句均可用于软件定时器的回调函数中。

3.3、复位事件位

任务级复位语句:

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,事件等待完成。

返回值:事件标志组的值。

你可能感兴趣的:(FreeRTOS,stm32)