chenbingjy 发表于 2024-12-1 17:02

freertos里x表示任务什么状态

<p>代码:</p>

<pre>
<code>#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_SIZE128               /* 任务堆栈大小 */
TaskHandle_t            StartTask_Handler;/* 任务句柄 */
void start_task(void *pvParameters);      /* 任务函数 */

/* TASK1 任务 配置
* 包括: 任务句柄 任务优先级 堆栈大小 创建任务
*/
#define TASK1_PRIO      3                   /* 任务优先级 */
#define TASK1_STK_SIZE128               /* 任务堆栈大小 */
TaskHandle_t            Task1Task_Handler;/* 任务句柄 */
void task1(void *pvParameters);             /* 任务函数 */

/* TASK2 任务 配置
* 包括: 任务句柄 任务优先级 堆栈大小 创建任务
*/
#define QUERY_PRIO      3                   /* 任务优先级 */
#define QUERY_STK_SIZE50               /* 任务堆栈大小 */
TaskHandle_t            QUERYTask_Handler;/* 任务句柄 */
void query(void *pvParameters);             /* 任务函数 */

char InfoBuffer;

/******************************************************************************************************/

/* LCD刷屏时使用的颜色 */


/**
* @brief 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*)&amp;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*)&amp;Task1Task_Handler);
    /* 创建任务2 */
    xTaskCreate((TaskFunction_t )query,
                (const char*    )"query",
                (uint16_t       )QUERY_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )QUERY_PRIO,
                (TaskHandle_t*)&amp;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 */
    }
}
</code></pre>

<p>运行效果</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">
<p>其中query任务状态为x,这是什么状态?</p>

<p>task.h里这样定义:</p>

<p>typedef enum</p>

<p>{</p>

<p>&nbsp; &nbsp; eRunning = 0, /* A task is querying the state of itself, so must be running. */</p>

<p>&nbsp; &nbsp; eReady,&nbsp; &nbsp; &nbsp; &nbsp;/* The task being queried is in a ready or pending ready list. */</p>

<p>&nbsp; &nbsp; eBlocked,&nbsp; &nbsp; &nbsp;/* The task being queried is in the Blocked state. */</p>

<p>&nbsp; &nbsp; eSuspended,&nbsp; &nbsp;/* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */</p>

<p>&nbsp; &nbsp; eDeleted,&nbsp; &nbsp; &nbsp;/* The task being queried has been deleted, but its TCB has not yet been freed. */</p>

<p>&nbsp; &nbsp; eInvalid&nbsp; &nbsp; &nbsp; /* Used as an &#39;invalid state&#39; value. */</p>

<p>} eTaskState;</p>

<p>R表示运行或者就绪态,B表示阻塞态,D表示删除态</p>

<p>请高手指教,谢谢</p>
</div>

<p>&nbsp;</p>

wangerxian 发表于 2024-12-2 14:18

<p>x(5)用作&ldquo;无效状态&rdquo;值。有没可能是初始化没成功?</p>

chenbingjy 发表于 2024-12-2 21:03

wangerxian 发表于 2024-12-2 14:18
x(5)用作&ldquo;无效状态&rdquo;值。有没可能是初始化没成功?

<p>知道了,x是运行态</p>
页: [1]
查看完整版本: freertos里x表示任务什么状态