任务特性
每个任务有自己的环境,不依赖于其他任务与调度器
任何时间点只有一个任务运行。由调度器决定
上下文环境:(寄存器值、堆栈内容等)
调度器保证的就是任务开始执行时的上下文环境与上一次退出时相同
所以每个任务都必须要有堆栈。再次执行时取出上下文环境。
任务堆栈的作用: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:任务的更多相关文章

  1. FreeRTOS学习笔记——任务间使用队列同步数据

    1.前言 在嵌入式操作系统中队列是任务间数据交换的常用手段,队列是生产者消费者模型的重要组成部分.FreeRTOS的队列简单易用,下面结合一个具体例子说明FreeRTOS中的队列如何使用. 2.参考代 ...

  2. FREERTOS学习笔记

    2012-02-25 21:43:40 为提升自己对实时操作系统(RTOS)的认识,我学习了freeRTOS. 理解了OS任务的状态.优先级的概念.信号量的概念.互斥的概念.队列.内存管理.这都是和R ...

  3. FreeRTOS学习笔记——FreeRTOS 任务基础知识

    RTOS 系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能,初步上手RTOS 系统首先必须掌握的也是任务的创建 ...

  4. FreeRTOS学习笔记--任务优先级

    FreeRTOSConfig.h 中的常量configMAX_PRIORITIES的值就是任务优先级的最大数值,这个数值可以按照自己的需要改动,当然值越大,内核对内存的开销就越大,一般设置一个满足自己 ...

  5. FreeRTOS学习笔记4:时间管理

    绝对时间:abs Time相对时间:百分比% time IDLE是空闲任务. RUN_Time_State:port...()初始化一个外设提供时基单元 //具体初始化要自己操作这个定时器的分辨率高于 ...

  6. FreeRTOS学习笔记2:列表

    list.h 列表结构List_t 列表:主要看三个 xLIST:1.5检查列表完整性的.但是需要开启.默认不开启 2:记录列表中列表项的 数量:3:记录当前列表项 索引号:4:列表中的最后一个 列表 ...

  7. FreeRTOS学习笔记5:队列

    为通信而准备 1.任务存储存储缓冲机制:先进先出 FIFO 后进先出 LIFO (ucOS消息队列采用的是引用传递,传递的都是指针.采用引用的话,内容必须一致保持可见性,即消息内容必须有效.1.不能传 ...

  8. FreeRTOS学习笔记3:内核控制及开启调度器

    内核控制函数API 应用层中不会用到taskYIELD() //任务切换.会自动切换当前就绪表里优先级最高的任务 临界区 //不能被打断的代码段任务中进入临界区任务中退出临界区中断服务进入临界区中断服 ...

  9. LwIP学习笔记——STM32 ENC28J60移植与入门

    0.前言     去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一 ...

随机推荐

  1. linux-mysql-主从同步

    什么是二进制日志binlog:记录着mysql数据库中的一些写入性操作,比如一些增删改,但不包括查询!二进制日志有哪些功能:数据复制和数据恢复的功能 查看网络状态:netstat -natp查看mas ...

  2. 【剑指Offer】39:平衡二叉树

    题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树 题解:递归 /*最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断 ...

  3. 编辑当前目录及其子目录,对比指定文件大小 (bat)

    @echo off :: 设置对比大小校验(单位为kb) set COMPARE=100 ::指定起始文件夹 cd %~dp0/ set DIR_PATH=%cd% :: 输出文件目录 set RES ...

  4. ansible-七种武器

    1. ansible命令 2. ansible-doc是ansible模块说明文档,针对每个模块都有详细用法说明以及应用案例介绍 3. ansible-console是ansible为用户提供的一款交 ...

  5. 51Nod 1182 完美字符串 (贪心)

    约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同. ...

  6. mysql批量插入数据uuid去重

    update base_problem set uuid=replace(uuid(),'-',''); update base_problem set uuid = UUID() where uui ...

  7. SVM-支持向量机(二)非线性SVM分类

    非线性SVM分类 尽管SVM分类器非常高效,并且在很多场景下都非常实用.但是很多数据集并不是可以线性可分的.一个处理非线性数据集的方法是增加更多的特征,例如多项式特征.在某些情况下,这样可以让数据集变 ...

  8. 理解 Oracle 多租户体系中(12c,18c,19c)创建角色作用域范围

    本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个可以成功创建角色? 1. 在CDB级别中创建公共角色,不带 container 子句的效果: 2. 在CDB级别中创建公共角色,带 cont ...

  9. Python爬虫连载4-Error模块、Useragent详解

    一.error 1.URLError产生的原因:(1)没有网络:(2)服务器连接失败:(3)不知道指定服务器:(4)是OSError的子类 from urllib import request,err ...

  10. 牛客CSP-S提高组赛前集训营2 赛后总结

    比赛链接 A.服务器需求 维护每天需要的服务器数量的全局最大值(记为\(Max\))和总和(记为\(sum\)),那么答案为: \[max(Max,\lceil\dfrac{sum}{m}\rceil ...