P6:FreeRTOS多任务创建与删除

1、多任务创建

本文来讲一下在FreeRTOS中的多任务创建,以及如何删除任务。之前已经讲到使用xTaskCreate函数来创建任务,

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, // 函数指针, 任务函数
                        const char * const pcName, // 任务的名字
                        const configSTACK_DEPTH_TYPE usStackDepth, // 栈大小,单位为word,10表示40字节
                        void * const pvParameters, // 调用任务函数时传入的参数
                        UBaseType_t uxPriority,    // 优先级
                        TaskHandle_t * const pxCreatedTask ); // 任务句柄, 以后使用它来操作这个任务

其中该函数的返回值意义如下,

成功时返回 pdPASS,

失败时返回 errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY(失败原因是内存不足)。

接下来来讲一下另外一种,任务创建函数,使用静态分配内存的函数。

TaskHandle_t xTaskCreateStatic ( 
    TaskFunction_t pxTaskCode,   // 函数指针, 任务函数
    const char * const pcName,   // 任务的名字
    const uint32_t ulStackDepth, // 栈大小,单位为word,10表示40字节
    void * const pvParameters,   // 调用任务函数时传入的参数
    UBaseType_t uxPriority,      // 优先级
    StackType_t * const puxStackBuffer, // 静态分配的栈,就是一个buffer
    StaticTask_t * const pxTaskBuffer // 静态分配的任务结构体的指针,用它来操作这个任务
);

与xTaskCreate相比,xTaskCreateStatic函数的最后两个参数有所不同,而且该函数的返回值为该函数的函数句柄。具体如下:

其实多任务的创建和单任务的创建一样,直接创建就行,不需要有额外操作。

2、任务的删除

至于一个任务的删除,我们通常使用vTaskDelete函数

void vTaskDelete( TaskHandle_t xTaskToDelete );

值得注意的是,如果想在一个任务里面杀死本任务,可以用vTaskDelete(NULL),这个也叫自杀,当然要想杀死其他任务,可以用vTaskDelete(pvTaskCode),其中pvTaskCode是要杀死的任务的句柄。其实删除任务的函数我们并不常用,因为不断的创建删除函数会使我们的内存碎片化,甚至到最后可能没有内存可分配,所以想要结束一个任务,我们大多在任务函数内部进行实现,并不直接杀死一个任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

STORM-WYW

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

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

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

打赏作者

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

抵扣说明:

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

余额充值