嵌入式FreeRTOS学习四,FreeRTOS任务的状态机

三、任务的状态机

Suspended:挂起态
Running:运行态
Blocked:阻塞态/等待态
Ready:就绪态
上图官方没有列出任务被中断的情况,倘若被中断的任务如果从中断返回,则返回被中断的任务。当到达下一个时 钟节拍,CPU资源给到就绪任务中优先级最高的任务

3.1 示例代码

3.1.1 相同优先级
代码示例
int main(void) 
{

/* 创建app_task1任务 */
 xTaskCreate(
 (TaskFunction_t )app_task1,         /* 任务入口函数 */
 (const char* )"app_task1",          /* 任务名字 */
 (uint16_t )512,                     /* 任务栈大小 */
 (void* )NULL,                       /* 任务入口函数参数 */
 (UBaseType_t )5,                    /* 任务的优先级 */
 (TaskHandle_t* )&app_task1_handle); /* 任务控制块指针 */

 /* 创建app_task2任务 */ 
 xTaskCreate(
 (TaskFunction_t )app_task2,         /* 任务入口函数 */
 (const char* )"app_task2",          /* 任务名字 */
 (uint16_t )512,                     /* 任务栈大小 */
 (void* )NULL,                       /* 任务入口函数参数 */
 (UBaseType_t )5,                    /* 任务的优先级 */
 (TaskHandle_t* )&app_task2_handle); /* 任务控制块指针 */

 /* 开启任务调度 */
 vTaskStartScheduler();
 
 while(1);

 }
 static void app_task1(void* pvParameters)
 {
        for(;;)
          {
               printf("app_task1 is running ...\r\n");
               vTaskDelay(20);
          }
 } 

static void app_task2(void* pvParameters)
 {
        for(;;)
         {
                printf("app_task2 is running ...\r\n");
                vTaskDelay(30);
         }
 }

运行结果: 

 3.1.1 不同优先级

代码示例

int main(void)  
{  /* 创建app_task1任务 */
   xTaskCreate((TaskFunction_t )app_task1, /* 任务入口函数 */
  (const char* )"app_task1",               /* 任务名字 */
  (uint16_t )512,                          /* 任务栈大小 */
  (void* )NULL,                            /* 任务入口函数参数 */
  (UBaseType_t )6,                         /* 任务的优先级 */
  (TaskHandle_t* )&app_task1_handle);      /* 任务控制块指针 */

 /* 创建app_task2任务 */ 
 xTaskCreate((TaskFunction_t )app_task2,   /* 任务入口函数 */
 (const char* )"app_task2",                /* 任务名字 */
 (uint16_t )512,                           /* 任务栈大小 */
 (void* )NULL,                             /* 任务入口函数参数 */
 (UBaseType_t )5,                          /* 任务的优先级 */
 (TaskHandle_t* )&app_task2_handle);       /* 任务控制块指针 */
 /* 开启任务调度 */
 vTaskStartScheduler();
 
 while(1);

}
 static void app_task1(void* pvParameters)
 {
         for(;;)
           {
              printf("app_task1 is running ...\r\n");
              vTaskDelay(20);
           }
 } 

 static void app_task2(void* pvParameters)
 {
        for(;;)
          {
             printf("app_task2 is running ...\r\n");
             vTaskDelay(30);
          }
 }

运行结果: 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖爱Kun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值