FreeRTOS学习笔记1:任务
任务特性
每个任务有自己的环境,不依赖于其他任务与调度器
任何时间点只有一个任务运行。由调度器决定
上下文环境:(寄存器值、堆栈内容等)
调度器保证的就是任务开始执行时的上下文环境与上一次退出时相同
所以每个任务都必须要有堆栈。再次执行时取出上下文环境。
任务堆栈的作用:A->B B运行完切回A,从刚被中断的地方继续运行。则需要将A的状态保存在堆栈中
支持抢占以及优先级、每个任务都有堆栈导致RAM使用量增大
使用抢占必须仔细考虑重入问题(仪表不考虑抢占)
任务状态
运行态,永远只有一个运行
就绪态, 初始进入
阻塞态,某个任务在等待某事件、变量等,在等待的状态:阻塞。
有超时时间,超时未等到退出阻塞态
挂起态,挂起有对应的挂起、解挂动作
三个态都可以进挂起,解挂后到就绪态
+图
运行所有就绪态中的优先级最高的
任务优先级
优先级范围:0-configMAX..-1 config宏是最大优先级
数字越大优先级越高(ucOS是数字越小越高)
任务实现
:任务是不能return的,是个死循环
如果要退出有相应的逻辑处理
任务控制块
描述任务属性的数据结构 TCB_t
在 port.c
1。任务堆栈的栈顶。
2。状态列表
3。时间列表
4。任务优先级
5。任务堆栈
6。任务名字
任务堆栈
任务堆栈:用于保存现场。CPU的寄存器的值。R0-R15
堆栈变量类型:stacktype_t :u32
堆栈如果是50个,那么byte有 50*4
任务堆栈大小:需要大于任务所需的 。最大1024
任务创建和删除API tasks.c文件
创建三方法:
1、xTaskCreate
2、xTaskCreateStaic
3、xTaskCreateRestricted//用MPU限制的任务
参数: 1、指向任务入口,任务函数
2、任务名字
3、任务堆栈大小
4、传递给任务函数的参数//
5、任务优先级
6、任务句柄 //任务创建成功后,返回任务句柄。即任务的堆栈
动态方法:
创建函数返回值如果是pdpass 成功,pdfalse 失败,//一般失败原因是堆内存不够,没申请到
静态方法:
创建成功返回的是任务句柄,返回NULL是失败
创建任务时有两个内存: 1、任务控制块
2、任务堆栈
动态方法:这两个内存会自动被创建。静态需要手动提供
4、vTaskDelete
参数:任务句柄//独一无二、标识任务
没有返回值
创建消息队列、信号量等,都有动态和静态方法
挂起、恢复:
挂起堆栈还在。挂起之后不能再被调度器调用进入运行态。挂起后没有超时时间//阻塞态有超时时间,超时退出阻塞
恢复后进入就绪态
vTaskSuspend //参数:要挂的任务的任务句柄。如果是NULL,则挂起自己、无返回值
vTaskResume //参数:要挂的任务的任务句柄 退出挂起态唯一途径。无返回值
vTaskRessumeFromISR//参数:要挂的任务的任务句柄。resume的中断版本。
//返回值:pdTRUE:恢复运行的任务等于或者高于正在运行的任务,退出中断服务函数后需要进行上下文切换
pdFALSE:恢复运行的任务低于当前正在运行的任务,退出中断后,不需要进行上下文切换
任务查询相关API (有空再仔细看)
1、查询任务优先级
2、改变某个任务的优先级
3、获取系统中任务状态
4、获取某个任务信息
5、获取某个任务标签
6、获取当前正在运行的任务的任务句柄
7、根据任务名字查找某个任务的句柄
8、获取空闲任务的任务句柄
9、获取任务对战的历史剩余最小值(FREERTOS叫做高水位线)
10、获取某个任务的状态
11、获取某个任务的任务名字
12、获取系统时间计数器
13、在中断服务函数中获取时间计数器
14、获取任务调度器的状态、开启或者未开启
15、获取当前系统中存在的任务数量
16、以表格的形式输出当前系统中所有任务的详细信息
17、获取每个任务的运行时间
18、设置任务标签tag值
19、设置线程本地存储指针
20、获取线程本地存储指针
vTaskList
该函数将统计到的信息放入一个表格:
创建任务名字,
任务状态:B 阻塞态 R 就绪态 S 挂起态 D 删除态
任务优先级
任务堆栈的“高水位线”:即堆栈历史最小剩余大小
任务编号:唯一
需要提供一个内存去保存。参数就是内存(*pcWriteBuffer)
配置:
使用这个功能,需将config的两个宏定义为1
FreeRTOS学习笔记1:任务的更多相关文章
- FreeRTOS学习笔记——任务间使用队列同步数据
1.前言 在嵌入式操作系统中队列是任务间数据交换的常用手段,队列是生产者消费者模型的重要组成部分.FreeRTOS的队列简单易用,下面结合一个具体例子说明FreeRTOS中的队列如何使用. 2.参考代 ...
- FREERTOS学习笔记
2012-02-25 21:43:40 为提升自己对实时操作系统(RTOS)的认识,我学习了freeRTOS. 理解了OS任务的状态.优先级的概念.信号量的概念.互斥的概念.队列.内存管理.这都是和R ...
- FreeRTOS学习笔记——FreeRTOS 任务基础知识
RTOS 系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能,初步上手RTOS 系统首先必须掌握的也是任务的创建 ...
- FreeRTOS学习笔记--任务优先级
FreeRTOSConfig.h 中的常量configMAX_PRIORITIES的值就是任务优先级的最大数值,这个数值可以按照自己的需要改动,当然值越大,内核对内存的开销就越大,一般设置一个满足自己 ...
- FreeRTOS学习笔记4:时间管理
绝对时间:abs Time相对时间:百分比% time IDLE是空闲任务. RUN_Time_State:port...()初始化一个外设提供时基单元 //具体初始化要自己操作这个定时器的分辨率高于 ...
- FreeRTOS学习笔记2:列表
list.h 列表结构List_t 列表:主要看三个 xLIST:1.5检查列表完整性的.但是需要开启.默认不开启 2:记录列表中列表项的 数量:3:记录当前列表项 索引号:4:列表中的最后一个 列表 ...
- FreeRTOS学习笔记5:队列
为通信而准备 1.任务存储存储缓冲机制:先进先出 FIFO 后进先出 LIFO (ucOS消息队列采用的是引用传递,传递的都是指针.采用引用的话,内容必须一致保持可见性,即消息内容必须有效.1.不能传 ...
- FreeRTOS学习笔记3:内核控制及开启调度器
内核控制函数API 应用层中不会用到taskYIELD() //任务切换.会自动切换当前就绪表里优先级最高的任务 临界区 //不能被打断的代码段任务中进入临界区任务中退出临界区中断服务进入临界区中断服 ...
- LwIP学习笔记——STM32 ENC28J60移植与入门
0.前言 去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一 ...
随机推荐
- 在Visual Studio中将dll以资源的形式嵌入exe中
一.Dll的优点: 1.扩展应用程序的特性 2.简化项目管理 3.有助于节省内存 4.促进资源的共享 5.促进本地化 6.有助于解决平台间的差异 7.可用于特殊目的 有关于dll及注入相关理论资料,可 ...
- idea基于spring boot的依赖分开打包
idea版本为2018.3.3 1.在菜单栏点击如图所示图标 Project Structure: 2.选择左侧菜单Artificial,然后在右侧点击 + 号按钮,在弹出的菜单中选择JAR -> ...
- unity中ContentSizeFitter刷新不及时的问题
ContentSizeFitter,自适应宽高脚本要在下一帧的时候才会适应宽高.如果想立即生效,可以调用 LayoutRebuilder.ForceRebuildLayoutImmediate(rec ...
- ubuntu设置ulimit
centos系统的设置ulimit的时候是直接修改/etc/security/limits.conf文件,但是在ubuntu中却不行, ubuntu先修改/etc/security/limits.co ...
- 求a^b的约数对mod取模
+; int prime[maxn]; void marktable(int n){ memset(prime,,sizeof(prime)); ;i<=n;i++){ ]]=i; ;j< ...
- luogu P2158 [SDOI2008]仪仗队 (欧拉函数)
欧拉函数裸题 可惜我太久没做题忘了欧拉函数是什么了... 注意判断一下n = 1的情况就好了 #include <cstdio> using namespace std; ; typede ...
- idea软件操作
1.快捷键: 1.1.格式化代码:crtl+alt+L 1.2.一些构造啊,setter/getter等方法:alt+insert 1.3.crtl + f 搜素当前页面
- How to read a paper efficiently - by prof. Pete carr
DON'T DO THAT: read the article from the beginning to end; it's a waste of time! READ A PAPER IN TWO ...
- 我的翻译--针对Outernet卫星信号的逆向工程
前言 Outernet[1]是一家旨在让访问国际互联网更加方便自由的公司,他们使用卫星来广播维基百科或者其他网站.目前,他们的广播主要使用三颗国际海事卫星[3]的L波段[2],使其广播覆盖全球,大多数 ...
- 2019-08-15 纪中NOIP模拟B组
T1 [JZOJ3455] 库特的向量 题目描述 从前在一个美好的校园里,有一只(棵)可爱的弯枝理树.她内敛而羞涩,一副弱气的样子让人一看就想好好疼爱她.仅仅在她身边,就有许多女孩子想和她BH,比如铃 ...