02 FreeRTOS任务创建与删除

本文介绍了如何使用FreeRTOS中的xTaskCreate函数创建任务,以及vTaskDelete函数用于删除任务。通过实例展示了如何设置任务优先级、堆栈大小,并在主函数中创建和调度任务,以及如何在任务内部删除其他任务。
摘要由CSDN通过智能技术生成

2.1 任务创建函数:xTaskCreate() 用于创建一个任务。

/*********************************************************************************
* 函数名: xTaskCreate
* 功能:   任务创建
* 输入:   pxTaskCode [任务函数名]
*   	  pcName [任务名]
*    	  usStackDepth[任务堆栈大小]
*     	  pvParameters[任务函数参数]
*      	  uxPriority[任务优先级]
*         pxCreatedTask[任务句柄]
* 输出:   pdPASS [创建成功]
*   	  其他   [创建失败]
*********************************************************************************/ 
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                        const char * const pcName,
                        const uint16_t usStackDepth,
                        void * const pvParameters,
                        UBaseType_t uxPriority,
                        TaskHandle_t * const pxCreatedTask );

2.2 任务删除函数: vTaskDelete() 用于删除xTaskCreate()创建的任务。

/*********************************************************************************
* 函数名: vTaskDelete
* 功能:   任务删除
* 输入:   xTaskToDelete[任务句柄]
* 输出:   无
*********************************************************************************/ 
void vTaskDelete( TaskHandle_t xTaskToDelete );

2.3 示例

#define TASK1_TASK_PRIO		2    //任务优先级
#define TASK1_STK_SIZE 		256  //任务堆栈大小
TaskHandle_t Task1Task_Handler;         //任务句柄
void task1_task(void *pvParameters);    //任务函数

#define TASK2_TASK_PRIO		3    //任务优先级
#define TASK2_STK_SIZE 		256  //任务堆栈大小
TaskHandle_t Task2Task_Handler;         //任务句柄
void task2_task(void *pvParameters);    //任务函数

int main()
{
    // 创建任务一
    BaseType_t res = xTaskCreate((TaskFunction_t )task1_task,         // 入口函数
                                (const char*    )"task1_task",        // 任务名
                                (uint16_t       )TASK1_STK_SIZE,      // 任务堆栈大小
                                (void*          )NULL,                // 入口函数参数
                                (UBaseType_t    )TASK1_TASK_PRIO,     // 任务优先级
                                (TaskHandle_t*  )&Task1Task_Handler); // 任务句柄
    if(pdPASS != res) // 创建任务失败
    {
        while(1);// 打断处理
    }
    // 创建任务二
    BaseType_t res2 = xTaskCreate((TaskFunction_t )task2_task,         // 入口函数
                                (const char*    )"task2_task",        // 任务名
                                (uint16_t       )TASK2_STK_SIZE,      // 任务堆栈大小
                                (void*          )NULL,                // 入口函数参数
                                (UBaseType_t    )TASK2_TASK_PRIO,     // 任务优先级
                                (TaskHandle_t*  )&Task2Task_Handler); // 任务句柄
    if(pdPASS != res2) // 创建任务失败
    {
        while(1);// 打断处理
    }
    vTaskStartScheduler(); 
}

// 创建任务成功并开始调度后,下面函数便可以执行
void task1_task(void *pvParameters)
{
    while(1)
    {
        printf("task1 is running\r\n");
        vTaskDelay(1000);
    }
}
// 创建任务成功并开始调度后,下面函数便可以执行
void task2_task(void *pvParameters)
{
    vTaskDelete(Task1Task_Handler); // 删除任务1,删除后task1_task函数将不再运行,并删除对应空间
    while(1)
    {
        printf("task2 is running\r\n");
        vTaskDelay(10);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值