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,如下图所示
QQ截图20160714090544
另一个创建任务的函数是
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这个函数才能可用,主要用于将一个任务从内核任务管理中移除。
只有一个参数就是要移除的任务的句柄。源码中给出了一个例子可以参考如下:

QQ截图20160714090557
 

 

更多恩智浦(NXP)及恩智浦技术教程请关注:
NXP中文官方:https://www.nxp.com/zh-Hans/
NXP中文技术论坛:https://www.nxpic.org.cn/

 

 

继续阅读
恩智浦与刮拉瓶盖携手为葡萄酒和烈酒市场带来智能安全NFC瓶盖解决方案

恩智浦半导体和刮拉瓶盖集团(Guala Closures Group)宣布针对葡萄酒和烈酒行业合作开发下一代瓶盖解决方案。这些智能安全瓶盖解决方案将集成近场通信技术(NFC),可提供防伪和防篡改应用程序及监控。通过NFC技术还可向消费者提供直接接触点——只需用支持NFC的智能设备轻轻一触,消费者便可以了解相关饮料的更多内容,获取鸡尾酒配方、特别优惠、忠诚度奖励等等信息。这些先进瓶盖解决方案旨在保证品牌产品的真实性和完整性,对饮料制造商和消费者极有助益。

基于ISO26262的动力电池BMS解决方案

在汽车行业,提高安全性永远是不变的科技趋势。电池管理系统BMS引入汽车电子行业标准ISO26262,有助于规范产品质量体系,推动行业健康发展。BMS即Battery Management System,电池管理系统,作为新能源汽车“三电”核心技术之一,BMS在HEV/EV上扮演重要作用。

NXP LPC54102接入微信的物联网网关方案

通过微信控制的基于 NXP LPC5410X 的物联网网关方案,可以实现通过 “ 微信公众号 ” 控制终端设备的功能。

基于 NXP NPC100的“NFC魔法刷”方案

基于此,世平集团推出基于 NXP NPC100的魔法刷方案。本方案可以实现支持 NFC 产品的物联网设备轻松连上网关的功能。只需在不同设备之间,运用“魔法刷”碰一下,即可轻松上网。

恩智浦推出用于笔记本电脑和二合一平板电脑的高功率无线充电解决方案

拉斯维加斯 –(CES 2017)–2017年1月4日——恩智浦半导体NXP Semiconductors N.V.(纳斯达克代码:NXPI)今天宣布推出第一款用于笔记本电脑和二合一平板电脑的高功率无线充电解决方案,可提供高达100W的功率,覆盖该领域的全部电源范围要求。这款解决方案的厚度不足2mm,并且元器件数量很少,能够适用于最严苛的工业设计要求。同时,可提供高达94%的电源传输效率,消除发热及冷却的顾虑及成本。延伸的z轴充电距离允许将充电发射器安装到桌面或其他表面下方,并且x-y平面较大的空间自由度