- #include "freertos_demo.h"
- #include "./SYSTEM/usart/usart.h"
- #include "./BSP/LED/led.h"
- #include "./BSP/KEY/key.h"
- /*FreeRTOS*********************************************************************************************/
- #include "FreeRTOS.h"
- #include "task.h"
- /******************************************************************************************************/
- /*FreeRTOS配置*/
- /* START_TASK 任务 配置
- * 包括: 任务句柄 任务优先级 堆栈大小 创建任务
- */
- #define START_TASK_PRIO 1 /* 任务优先级 */
- #define START_STK_SIZE 128 /* 任务堆栈大小 */
- TaskHandle_t StartTask_Handler; /* 任务句柄 */
- void start_task(void *pvParameters); /* 任务函数 */
- /* TASK1 任务 配置
- * 包括: 任务句柄 任务优先级 堆栈大小 创建任务
- */
- #define TASK1_PRIO 3 /* 任务优先级 */
- #define TASK1_STK_SIZE 128 /* 任务堆栈大小 */
- TaskHandle_t Task1Task_Handler; /* 任务句柄 */
- void task1(void *pvParameters); /* 任务函数 */
- /* TASK2 任务 配置
- * 包括: 任务句柄 任务优先级 堆栈大小 创建任务
- */
- #define QUERY_PRIO 3 /* 任务优先级 */
- #define QUERY_STK_SIZE 50 /* 任务堆栈大小 */
- TaskHandle_t QUERYTask_Handler; /* 任务句柄 */
- void query(void *pvParameters); /* 任务函数 */
- char InfoBuffer[1000];
-
- /******************************************************************************************************/
- /* LCD刷屏时使用的颜色 */
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] FreeRTOS例程入口函数
- * @param 无
- * @retval 无
- */
- void freertos_demo(void)
- {
- // lcd_show_string(10, 10, 220, 32, 32, "STM32", RED);
- // lcd_show_string(10, 47, 220, 24, 24, "FreeRTOS Porting", RED);
- // lcd_show_string(10, 76, 220, 16, 16, "ATOM@ALIENTEK", RED);
- //
- xTaskCreate((TaskFunction_t )start_task, /* 任务函数 */
- (const char* )"start_task", /* 任务名称 */
- (uint16_t )START_STK_SIZE, /* 任务堆栈大小 */
- (void* )NULL, /* 传入给任务函数的参数 */
- (UBaseType_t )START_TASK_PRIO, /* 任务优先级 */
- (TaskHandle_t* )&StartTask_Handler); /* 任务句柄 */
- vTaskStartScheduler();
- }
- /**
- * @brief start_task
- * @param pvParameters : 传入参数(未用到)
- * @retval 无
- */
- void start_task(void *pvParameters)
- {
- taskENTER_CRITICAL(); /* 进入临界区 */
- /* 创建任务1 */
- xTaskCreate((TaskFunction_t )task1,
- (const char* )"task1",
- (uint16_t )TASK1_STK_SIZE,
- (void* )NULL,
- (UBaseType_t )TASK1_PRIO,
- (TaskHandle_t* )&Task1Task_Handler);
- /* 创建任务2 */
- xTaskCreate((TaskFunction_t )query,
- (const char* )"query",
- (uint16_t )QUERY_STK_SIZE,
- (void* )NULL,
- (UBaseType_t )QUERY_PRIO,
- (TaskHandle_t* )&QUERYTask_Handler);
-
- vTaskDelete(StartTask_Handler); /* 删除开始任务 */
- taskEXIT_CRITICAL(); /* 退出临界区 */
- }
- /**
- * @brief task1
- * @param pvParameters : 传入参数(未用到)
- * @retval 无
- */
- void task1(void *pvParameters)
- {
-
- //uint32_t task1_num=0;
- while(1)
- {
- //printf("task1_num:%d\r\n",++task1_num);
- LED0_TOGGLE(); /* LED0闪烁 */
- vTaskDelay(1000); /* 延时1000ticks */
- }
- }
- /**
- * @brief task2
- * @param pvParameters : 传入参数(未用到)
- * @retval 无
- */
- void query(void *pvParameters)
- {
- vTaskList(InfoBuffer);
- printf("%s\r\n",InfoBuffer);
- while(1)
- {
- LED1_TOGGLE();
-
- //printf("task2_num:%d\r\n",++task2_num);/* 打印数值 */
- vTaskDelay(1000); /* 延时1000ticks */
- }
- }
运行效果
其中query任务状态为x,这是什么状态?
task.h里这样定义:
typedef enum
{
eRunning = 0, /* A task is querying the state of itself, so must be running. */
eReady, /* The task being queried is in a ready or pending ready list. */
eBlocked, /* The task being queried is in the Blocked state. */
eSuspended, /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */
eDeleted, /* The task being queried has been deleted, but its TCB has not yet been freed. */
eInvalid /* Used as an 'invalid state' value. */
} eTaskState;
R表示运行或者就绪态,B表示阻塞态,D表示删除态
请高手指教,谢谢