dreamviewer做网站,crm是什么意思啊,怎么免费自己做推广,土地流转网站建设项目事件标志位#xff1a; 用一个bit位来表示事件是否发生#xff0c;只有0(未发生)和1(已发生)两种状态
事件组#xff1a;事件组是一组事件标志的集合#xff0c;一组事件组包含了EventBites_t数据类型的变量#xff0c;该变量高8未不能作为事件标志#xff0c;用于存储控…事件标志位 用一个bit位来表示事件是否发生只有0(未发生)和1(已发生)两种状态
事件组事件组是一组事件标志的集合一组事件组包含了EventBites_t数据类型的变量该变量高8未不能作为事件标志用于存储控制信息
动态创建事件标志组 EventGroupHandle_t xEventGroupCreate(void) 无参 返回值成功 事件组句柄失败 NULL
删除事件标志组 void vEventGroupDelete(EventGroupHandle_t xEventGroup) 参数待删除标志组句柄 无返回值
等待事件标志位 EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait) 参数等待的事件标志组 等待的事件标志位可以用逻辑或等待多个 等待成功后是否清除事件组中相应标志位(pdTRUE/pdFALSE) 等待一个标志位或是多个标志位同时成立(pdTRUE/pdFALSE) 等待的阻塞时间 返回值成功 等待的标志位值的和失败 其他值
设置事件标志位 EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet) 参数目标事件标志组目标事件标志位 返回值事件标志位此时的值
实验代码
//freertos_demo.c#include freertos_demo.h
#include ./SYSTEM/usart/usart.h
#include ./BSP/LED/led.h
#include ./BSP/LCD/lcd.h
#include ./BSP/KEY/key.h
#include ./SYSTEM/delay/delay.h
#include ./MALLOC/malloc.h
/*FreeRTOS*********************************************************************************************/
#include FreeRTOS.h
#include task.h
#include event_groups.h
/******************************************************************************************************/
/*FreeRTOS配置*//* START_TASK 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define START_TASK_PRIO 1
#define START_TASK_STACK_SIZE 128
TaskHandle_t start_task_handler;
void start_task( void * pvParameters );/* TASK1 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK1_PRIO 2
#define TASK1_STACK_SIZE 128
TaskHandle_t task1_handler;
void task1( void * pvParameters );/* TASK2 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK2_PRIO 3
#define TASK2_STACK_SIZE 128
TaskHandle_t task2_handler;
void task2( void * pvParameters );/******************************************************************************************************/
EventGroupHandle_t eventgroup_handle; //定义事件标志组变量
#define EVENTBIT_0 (1 0)
#define EVENTBIT_1 (1 1)
/*** brief FreeRTOS例程入口函数* param 无* retval 无*/
void freertos_demo(void)
{ xTaskCreate((TaskFunction_t ) start_task,(char * ) start_task,(configSTACK_DEPTH_TYPE ) START_TASK_STACK_SIZE,(void * ) NULL,(UBaseType_t ) START_TASK_PRIO,(TaskHandle_t * ) start_task_handler );vTaskStartScheduler();
}void start_task( void * pvParameters )
{taskENTER_CRITICAL(); /* 进入临界区 */eventgroup_handle xEventGroupCreate(); //创建事件标志组if(eventgroup_handle ! NULL){printf(事件标志组创建成功\r\n);}xTaskCreate((TaskFunction_t ) task1,(char * ) task1,(configSTACK_DEPTH_TYPE ) TASK1_STACK_SIZE,(void * ) NULL,(UBaseType_t ) TASK1_PRIO,(TaskHandle_t * ) task1_handler );xTaskCreate((TaskFunction_t ) task2,(char * ) task2,(configSTACK_DEPTH_TYPE ) TASK2_STACK_SIZE,(void * ) NULL,(UBaseType_t ) TASK2_PRIO,(TaskHandle_t * ) task2_handler );vTaskDelete(NULL);taskEXIT_CRITICAL(); /* 退出临界区 */
}/* 任务一释放二值信号量 */
void task1( void * pvParameters )
{uint8_t key 0;while(1) {key key_scan(0);if(key KEY0_PRES){xEventGroupSetBits( eventgroup_handle, EVENTBIT_0); /* 将事件标志组的bit0位置1 */}else if(key KEY1_PRES){xEventGroupSetBits( eventgroup_handle, EVENTBIT_1); /* 将事件标志组的bit1位置1 */}vTaskDelay(10);}
}/* 任务二获取二值信号量 */
void task2( void * pvParameters )
{EventBits_t event_bit 0;while(1){event_bit xEventGroupWaitBits( eventgroup_handle, /* 事件标志组句柄 */EVENTBIT_0 | EVENTBIT_1, /* 等待事件标志组的bit0和bit1位 */pdTRUE, /* 成功等待到事件标志位后清除事件标志组中的bit0和bit1位 */pdTRUE, /* 等待事件标志组的bit0和bit1位都置1,就成立 */portMAX_DELAY ); /* 死等 */printf(等待到的事件标志位值为%#x\r\n,event_bit);}
}