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,如下图所示

另一个创建任务的函数是

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这个函数才能可用,主要用于将一个任务从内核任务管理中移除。

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

原文发布于微信公众号 - 嵌入式程序猿(InterruptISR)

原文发表时间:2016-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏爱撒谎的男孩

Spring初体验

4256
来自专栏封碎

Java多线程参考手册 博客分类: 经典文章转载

http://blog.csdn.net/ring0hx/article/details/6858582

752
来自专栏草根专栏

使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下)

我想查看viewer下的repositories。注意里面的edges,一旦看到这个词,通常就表示有连接到某个数组的数据。在这里就是一个集合的repositor...

912
来自专栏张善友的专栏

Redis应用场景

Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数...

2486
来自专栏游戏杂谈

Node.js文件编码格式的转换

项目很多 lua 文件不是 utf-8格式,使用 EditPlus 查看的时候,显示为ASCII。还有的是带BOM的,带BOM倒好处理,之前写过,有一定规律。

2074
来自专栏源哥的专栏

多媒体处理类

import java.io.*; import java.util.*; import javax.servlet.http.*;

841
来自专栏微信公众号:Java团长

阿里历年经典Java面试题汇总

当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存。

1352
来自专栏Java架构师历程

java基础复习

Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:

3842
来自专栏java工会

阿里历年经典Java面试题汇总

1706
来自专栏前端杂货铺

AngularJS源码分析之依赖注入$injector

开篇 随着javaEE的spring框架的兴起,依赖注入(IoC)的概念彻底深入人心,它彻底改变了我们的编码模式和思维。在IoC之前,我们在程序中需要创建一个...

3435

扫码关注云+社区

领取腾讯云代金券