[uCOS/RTOS] freertos里x表示任务什么状态

[复制链接]
 楼主| 比神乐 发表于 2024-12-1 17:03 | 显示全部楼层 |阅读模式
代码:
  1. #include "freertos_demo.h"
  2. #include "./SYSTEM/usart/usart.h"
  3. #include "./BSP/LED/led.h"
  4. #include "./BSP/KEY/key.h"
  5. /*FreeRTOS*********************************************************************************************/
  6. #include "FreeRTOS.h"
  7. #include "task.h"

  8. /******************************************************************************************************/
  9. /*FreeRTOS配置*/

  10. /* START_TASK 任务 配置
  11. * 包括: 任务句柄 任务优先级 堆栈大小 创建任务
  12. */
  13. #define START_TASK_PRIO 1                   /* 任务优先级 */
  14. #define START_STK_SIZE  128                 /* 任务堆栈大小 */
  15. TaskHandle_t            StartTask_Handler;  /* 任务句柄 */
  16. void start_task(void *pvParameters);        /* 任务函数 */

  17. /* TASK1 任务 配置
  18. * 包括: 任务句柄 任务优先级 堆栈大小 创建任务
  19. */
  20. #define TASK1_PRIO      3                   /* 任务优先级 */
  21. #define TASK1_STK_SIZE  128                 /* 任务堆栈大小 */
  22. TaskHandle_t            Task1Task_Handler;  /* 任务句柄 */
  23. void task1(void *pvParameters);             /* 任务函数 */

  24. /* TASK2 任务 配置
  25. * 包括: 任务句柄 任务优先级 堆栈大小 创建任务
  26. */
  27. #define QUERY_PRIO      3                   /* 任务优先级 */
  28. #define QUERY_STK_SIZE  50                 /* 任务堆栈大小 */
  29. TaskHandle_t            QUERYTask_Handler;  /* 任务句柄 */
  30. void query(void *pvParameters);             /* 任务函数 */

  31. char InfoBuffer[1000];
  32.   
  33. /******************************************************************************************************/

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


  35. /**
  36. * [url=home.php?mod=space&uid=247401]@brief[/url]       FreeRTOS例程入口函数
  37. * @param       无
  38. * @retval      无
  39. */
  40. void freertos_demo(void)
  41. {
  42. //    lcd_show_string(10, 10, 220, 32, 32, "STM32", RED);
  43. //    lcd_show_string(10, 47, 220, 24, 24, "FreeRTOS Porting", RED);
  44. //    lcd_show_string(10, 76, 220, 16, 16, "ATOM@ALIENTEK", RED);
  45. //   
  46.     xTaskCreate((TaskFunction_t )start_task,            /* 任务函数 */
  47.                 (const char*    )"start_task",          /* 任务名称 */
  48.                 (uint16_t       )START_STK_SIZE,        /* 任务堆栈大小 */
  49.                 (void*          )NULL,                  /* 传入给任务函数的参数 */
  50.                 (UBaseType_t    )START_TASK_PRIO,       /* 任务优先级 */
  51.                 (TaskHandle_t*  )&StartTask_Handler);   /* 任务句柄 */
  52.     vTaskStartScheduler();
  53. }

  54. /**
  55. * @brief       start_task
  56. * @param       pvParameters : 传入参数(未用到)
  57. * @retval      无
  58. */
  59. void start_task(void *pvParameters)
  60. {
  61.     taskENTER_CRITICAL();           /* 进入临界区 */
  62.     /* 创建任务1 */
  63.     xTaskCreate((TaskFunction_t )task1,
  64.                 (const char*    )"task1",
  65.                 (uint16_t       )TASK1_STK_SIZE,
  66.                 (void*          )NULL,
  67.                 (UBaseType_t    )TASK1_PRIO,
  68.                 (TaskHandle_t*  )&Task1Task_Handler);
  69.     /* 创建任务2 */
  70.     xTaskCreate((TaskFunction_t )query,
  71.                 (const char*    )"query",
  72.                 (uint16_t       )QUERY_STK_SIZE,
  73.                 (void*          )NULL,
  74.                 (UBaseType_t    )QUERY_PRIO,
  75.                 (TaskHandle_t*  )&QUERYTask_Handler);
  76.                
  77.     vTaskDelete(StartTask_Handler); /* 删除开始任务 */
  78.     taskEXIT_CRITICAL();            /* 退出临界区 */
  79. }

  80. /**
  81. * @brief       task1
  82. * @param       pvParameters : 传入参数(未用到)
  83. * @retval      无
  84. */
  85. void task1(void *pvParameters)
  86. {
  87.    
  88.    //uint32_t task1_num=0;
  89.     while(1)
  90.     {
  91.         //printf("task1_num:%d\r\n",++task1_num);
  92.         LED0_TOGGLE();                                                  /* LED0闪烁 */
  93.         vTaskDelay(1000);                                               /* 延时1000ticks */
  94.     }
  95. }

  96. /**
  97. * @brief       task2
  98. * @param       pvParameters : 传入参数(未用到)
  99. * @retval      无
  100. */
  101. void query(void *pvParameters)
  102. {


  103.                 vTaskList(InfoBuffer);
  104.                 printf("%s\r\n",InfoBuffer);
  105.     while(1)
  106.     {
  107.                                 LED1_TOGGLE();
  108.                                
  109.         //printf("task2_num:%d\r\n",++task2_num);/* 打印数值 */
  110.         vTaskDelay(1000);                           /* 延时1000ticks */
  111.     }
  112. }
运行效果

其中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表示删除态
请高手指教,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部