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的移植过程细节很多,博文也不可能一一 ...
随机推荐
- stylelint
"number-leading-zero": "never", // 去掉小数点前面的0 "prettier.stylelintIntegration ...
- Codeforce 519B - A and B and Compilation Errors
A and B are preparing themselves for programming contests. B loves to debug his code. But before he ...
- bootstrap之表格自适应 table-responsive
<div class=table-responsive"> <table class="table"> <thead> <tr& ...
- Python-selenium,使用SenKey模块时所碰到的坑
一.SenKey模块(模拟鼠标键盘操作) :python3中没有该模块,使用PyUserInput模块代替 二.PyUserInput模块安装前需要安装:pywin32和pyHook模块,pywin3 ...
- JDBC——DriverManager驱动管理对象
功能 1.注册驱动 注册驱动:告诉程序使用哪个驱动jar包 写代码使用:Class.forName("com.mysql.jdbc.Driver"); 查看源码 mysql-con ...
- JUC-线程间通信
面试题: 两个线程,一个线程打印1-52,另一个打印字母A-Z打印顺序为12A34B...5152Z, 要求用线程间通信 线程间通信:1.生产者+消费者2.通知等待唤醒机制 多线程编程模版中 1.判断 ...
- sql简单练习语句
排序是每个软件工程师和开发人员都需要掌握的技能.不仅需要通过编程面试,还要对程序本身有一个全面的理解.不同的排序算法很好地展示了算法设计上如何强烈的影响程序的复杂度.运行速度和效率. 排序有很多种实现 ...
- 怎么编写API和或者自己不属于知识小案例demo程序
再使用一个函数,进行测试的调用,然后进行调用这样就不需要再为makefile什么,还有就是改什么鬼东西烦恼了. 然后把需要的功能进行分解就行了.
- C++——程序的结构
1.作用域和可见性 1.1 函数原型中的参数其作用域仅在()内.因此参数名称可有可无,但是参数类型需要声明. 1.2 块作用域 在块中声明的标识符其作用域自声明处起,限于块中. 1.3 类作用域 类作 ...
- python3练习100题——015
原题链接:http://www.runoob.com/python/python-exercise-example15.html 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用 ...