freeRTOS任务创建

我们曾经在公众号里给大家推送过关于freeRTOS在NXP kinetis KV4x上的移植,得到了猿友大量的反馈,很多猿友还是感觉对基础的一些东西不懂,今天我们就从基础的任务创建讲起,任务创建是RTOS学习中很重要的一步,因为你的应用就是基于大量的任务来实现的,那么在freeRTOS下如何来创建任务呢,首先打开任意一个移植好的例程或者我们移植的demo,找到task.h和tasks.c这两个文件里面定义声明了许多与任务相关的类型和函数。我们今天要讲的任务创建就来自这里。任务的创建主要有两个函数,先来看第一个

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,

const char * const pcName,

const uint16_t usStackDepth,

void * const pvParameters,

UBaseType_t uxPriority,

TaskHandle_t * const pxCreatedTask )

参数:

pxTaskCode  任务函数入口的指针。

 pcName    任务描述名,主要用来帮助调试,是一系列字符串,最大默认值为10,可以通过freeRTOSConfig.h中的宏#define configMAX_TASK_NAME_LEN来修改。

usStackDepth 指定任务堆栈大小的字数不是字节数,通过这个值可以计算出堆栈分配的大小,例如堆栈是16位宽,这个参数值是100,则分配给任务的堆栈大小就是200字节。

pvParameters 指针,可以被用来作为创建的任务的参数。

uxPriority      指定任务的优先级

pxCreatedTask  回传一个可以被创建任务参考的句柄,这个参数是可以被设置为NULL

返回值:如果任务成功创建,则返回pdPASS,否则返回errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY,如下图所示

0?wx_fmt=jpeg

另一个创建任务的函数是

TaskHandle_t xTaskCreateStatic(   TaskFunction_t pxTaskCode,

                                                                   const char * constpcName,

                                                                    constuint32_t ulStackDepth,

                                                                    void* const pvParameters,

                                                                    UBaseType_tuxPriority,

                                                                    StackType_t* const puxStackBuffer,

                                                                    StaticTask_t* const pxTaskBuffer )

使用这个函数创建任务必须确保宏定义configSUPPORT_STATIC_ALLOCATION为1。这两种创建任务函数的不同在与,第一种的任务堆栈的RAM是自动分配的,而第二种是由创建者分配的。更多详细的关于这两种的介绍可以参考官方网站的介绍。

参数:这里我们只列出与第一种不同的两个参数

puxStackBuffer  指向至少具有ulStackDepth元素的用作任务堆栈的数组。

pxTaskBuffer  指向任务数据结构体。

 

顺便提一下任务的删除函数

void vTaskDelete(TaskHandle_t xTask );

宏定义INCLUDE_vTaskDelete必须为1这个函数才能可用,主要用于将一个任务从内核任务管理中移除。

只有一个参数就是要移除的任务的句柄。源码中给出了一个例子可以参考如下:

0?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值