【学习笔记-FreeRTOS】任务创建、任务就绪与任务挂起

个人笔记。

创建一个任务xTaskCreate()需要用到任务入口函数、任务名字、任务栈大小、任务入口函数参数、任务的优先级、任务控制块指针也就是任务句柄。

例:static TaskHandle_t LED_Task_Handle = NULL;/* LED_Task任务句柄 */

int main(void)
{    BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */

    xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate,  /* 任务入口函数 */
                        (const char*    )"AppTaskCreate",/* 任务名字 */
                        (uint16_t       )512,  /* 任务栈大小 */
                        (void*          )NULL,/* 任务入口函数参数 */
                        (UBaseType_t    )1, /* 任务的优先级 */
                        (TaskHandle_t*  )&AppTaskCreate_Handle);/* 任务控制块指针 */

/* 启动任务调度 */           
  if(pdPASS == xReturn)
    vTaskStartScheduler();   /* 启动任务,开启调度 */

while(1);     
}

static void AppTaskCreate(void)
{

BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
  
  taskENTER_CRITICAL();           //进入临界区

  /* 创建LED_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )LED_Task, /* 任务入口函数 */
                        (const char*    )"LED_Task",/* 任务名字 */
                        (uint16_t       )512,   /* 任务栈大小 */
                        (void*          )NULL,    /* 任务入口函数参数 */
                        (UBaseType_t    )2,        /* 任务的优先级 */
                        (TaskHandle_t*  )&LED_Task_Handle);/* 任务控制块指针 */
  if(pdPASS == xReturn)
    printf("创建LED_Task任务成功\n");

vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
  
  taskEXIT_CRITICAL();            //退出临界区
}

static void LED_Task(void* parameter)
{    
  while (1)
  {
    LED1_TOGGLE;
    vTaskDelay(1000);/* 延时1000个tick */
  }

}

任务就绪函数为vTaskResume(),调用的为任务句柄,任务准备执行

例: vTaskResume(LED_Task_Handle);                //LED任务由挂起态转为就绪态

任务挂起函数为vTaskSuspend(),将任务挂起

例:vTaskSuspend(LED_Task_Handle);               //LED任务由就绪态转为挂起态

如果在某个任务中使用vTaskSuspend(NULL)则表示将任务自己挂起。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值