FreeRTOS学习笔记5-静态方式创建任务函数

配置完成后的进行任务创建,使用静态方式创建任务时需要使将宏 configSUPPORT_STATIC_ALLOCATION设置为 1,即使用静态内存。还需要将函数

vApplicationGetIdleTaskMemory()和 ApplicationGetTimerTaskMemory()进行实现。通过这两个函数来给空闲任务 和定时器服的任务堆 栈和任务控制块分配内存。在maiinc.c中进行定义。定义静态的任务堆栈和任务控制块内存,然后将这些内存传递给函数参数。最后创建空闲任务和定时器任务的API函数会调用这两个函数。

这两个函数我们在mainc.c中定义:

//空闲任务任务堆栈

static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];

//空闲任务控制块 static StaticTask_t IdleTaskTCB;

//定时器服务任务堆栈

static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];

//定时器服务任务控制块

static StaticTask_t TimerTaskTCB;

//获取空闲任务地堆栈和控制块内存,因为本例程使用的

//静态内存,因此空闲任务的堆栈和控制块就应该 静态内存,因此空闲任务的堆栈和控制块就应该

//有用户来提供, 有用户来提供, FreeRTOS提供了接口函数 vApplicationGetIdleTaskMemory()

//实现此函数即可。 实现此函数即可。

//ppxIdleTaskTCBBuffer:任务控制块内存

//ppxIdleTaskStackBuffer:任务堆栈内存

//pulIdleTaskStackSize:任务堆栈大小

void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,

                  StackType_t **ppxIdleTaskStackBuffer,

                   uint32_t *pulIdleTaskStackSize)

{

*ppxIdleTaskTCBBuffer=&IdleTaskTCB;

*ppxIdleTaskStackBuffer=IdleTaskStack;

*pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;

}

//获取定时器服务任的堆栈和控制块内存

//ppxTimerTaskTCBBuffer:任务控制块内存 //ppxTimerTaskStackBuffer:任务堆栈内存

//pulTimerTaskStackSize:任务堆栈大小 任务堆栈大小

void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,

                   StackType_t **ppxTimerTaskStackBuffer,

                    uint32_t *pulTimerTaskStackSize)

{

  *ppxTimerTaskTCBBuffer=&TimerTaskTCB;

  *ppxTimerTaskStackBuffer=TimerTaskStack;              

  *pulTimerTaskStackSize=configTIMER_TASK_STACK_DEPTH;

}

注:定义任务控制块时,类型要用StaticTask_t,而不是TCB_t或tskTCB

xTaskCreateStatic()和 xTaskCreate()没有太大的区别。大部分是相同的。创建任务的过程中。还是使用动态的方式更为简单。静态的方式了解一下即可。需要使用时再深入研究。

时间: 2024-10-26 19:43:19

FreeRTOS学习笔记5-静态方式创建任务函数的相关文章

Cocos2d-x 3.1.1 学习笔记(二)创建自定义项目

一.通过命令创建项目 前面搭建好环境后,怎样创建自己的cocos2d-x项目呢? 先来看看cocos2dx 3.1的目录吧 这就是 cocos2dx 3.1的目录, 3.1版本的创建跟以前的不同了(好吧,又变了),我们先把 download-deps.py 和 setup.py 执行一遍,按住shift+鼠标右键 输入cocos命令 回车 这里会看到一些命令的声明,这里我只说下 创建新的项目,输入命令cocos new 这里 -p      是包名 -l       是文件格式 有cpp.lua

V-rep学习笔记:机器人模型创建3—搭建动力学模型

接着之前写的V-rep学习笔记:机器人模型创建2-添加关节继续机器人创建流程.如果已经添加好关节,那么就可以进入流程的最后一步:搭建层次结构模型和模型定义(build the model hierarchy and finish the model definition).但是想要进行动力学仿真(碰撞.接触.自由落体...)的话,还需要进行额外的一些操作: Building the dynamic shapes VREP中几何体的属性可以分为: dynamic or static: 具有动态属性

FreeRTOS学习笔记——二值型信号量

1.前言 在嵌入式操作系统中二值型信号量是任务间.任务与中断间同步的重要手段.FreeRTOS的二值型信号量简单易用,下面结合一个具体例子说明FreeRTOS中的二值型信号量如何使用. [相关博文] [FreeRTOS STM32移植笔记] [FreeRTOS学习笔记--任务间使用队列同步数据] [如何在FreeRTOS下实现低功耗--MSP430F5438平台] [代码链接]--示例代码存于百度网盘 2.特别说明         二值型信号量的使用方法见图1所示,二值型信号量可以理解为任务与中

V-rep学习笔记:机器人模型创建2—添加关节

下面接着之前经过简化并调整好视觉效果的模型继续工作流,为了使模型能受控制运动起来必须在合适的位置上添加相应的运动副/关节.一般情况下我们可以查阅手册或根据设计图纸获得这些关节的准确位置和姿态,知道这些信息以后就可以通过[Menu bar --> Add --> Joints --> ...]来添加关节了, 之后可以通过位置和姿态对话框来调整关节位置姿态.在之前写过的V-rep学习笔记:曲柄摇杆机构中就是按照这种方式添加的关节. 如果我们有机器人的DH参数表也可以使用VREP中的工具来生成

EasyARM i.mx28学习笔记——文件IO方式操作GPIO

0 前言 本文描述如果通过文件IO sysfs方式控制EasyARM GPIO端口.通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入. Linux学习可从应用出发,先不纠结Linux驱动编写,先把Linux给玩起来. [相关博文] [EasyARM

quick-cocos2d-x学习笔记【5】——创建菜单

菜单也是游戏中不可缺少的元素之一,quick中对于menuItem的封装有两种,一个是图片菜单,一个是文字菜单. 一.图片菜单ui.newImageMenuItem(params) 可用参数: image: 正常状态的按钮图像 imageSelected: 按钮按下时的图像(可选) imageDisabled: 按钮被禁用时的图像(可选) listener: 回调函数 tag: 按钮的 Tag,会传入回调函数.多个按钮使用同一个回调函数时,可根据 Tag 区分哪一个按钮被按下(可选) x, y:

JavaScript学习笔记【3】数组、函数、服务器端JavaScript概述

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 数组 函数 服务器端JavaScript概述 数组 数组是动态的:根据需要它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或在数组大小变化时无须重新分配空间. 数组可能是稀疏的:索引不一定要连续的,它们之间可以有空缺. 通常,数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快很多. 数组继承自Array.prototype中的属性,它定义了一套丰富的数组操作方法. 如果省略数组直接量中的某个

C++ Primer 学习笔记_35_面向对象编程(6)--虚函数与多态(三):虚函数表指针(vptr)及虚基类表指针(bptr)、C++对象模型

C++ Primer 学习笔记_35_面向对象编程(6)--虚函数与多态(三):虚函数表指针(vptr)及虚基类表指针(bptr).C++对象模型 一.虚函数表指针(vptr)及虚基类表指针(bptr) C++在布局以及存取时间上主要的额外负担是由virtual引起的,包括: virtual function机制:用以支持一个有效率的"执行期绑定": virtual base class:用以实现多次在继承体系中的基类,有一个单一而被共享的实体. 1.虚函数表指针 C++中,有两种数据

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数、抽象类、虚析构函数、动态创建对象

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数.抽象类.虚析构函数.动态创建对象 一.纯虚函数 1.虚函数是实现多态性的前提 需要在基类中定义共同的接口 接口要定义为虚函数 2.如果基类的接口没办法实现怎么办? 如形状类Shape 解决方法 将这些接口定义为纯虚函数 3.在基类中不能给出有意义的虚函数定义,这时可以把它声明成纯虚函数,把它的定义留给派生类来做 4.定义纯虚函数: class <类名> { virtual <类型> <函