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

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5832322.html,记录一下学习过程以备后续查用. LINQ 简介:     语言集成查询(LINQ)是Vi ...

  2. pod has unbound immediate PersistentVolumeClaims : statefulset挂载不上pv的另一种情况

    大家都直到当volumeClaimTemplates匹配不上pv时,会出现statefulset挂载不到pv的问题.错误提示如下: error while running "VolumeBi ...

  3. 假期学习【十一】Python爬取百度词条写入csv格式 python 2020.2.10

    今天主要完成了根据爬取的txt文档,从百度分类从信息科学类爬取百度词条信息,并写入CSV格式文件. txt格式文件如图: 为自己爬取内容分词后的结果. 代码如下: import requests fr ...

  4. Web Workers - (Worker(专有) and SharedWorker(共享))

    Web Worker为Web内容在后台线程中运行脚本提供了一种简单的方法 线程可以执行任务而不干扰用户界面 可以使用XMLHttpRequest执行 I/O (尽管responseXML和channe ...

  5. vjudge A^B Mod C 然后,10.6最。。。的 快速幂!!!

    链接:https://vjudge.net/contest/331993#problem/D 给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Inpu ...

  6. win下删除EFI分区

    管理员身份,在cmd终端下,用"diskpart"命令. diskpart ##命令进入Microsoft DiskPart 模式 list disk ##展示磁盘分区列表 sel ...

  7. mybatis-plus - buildSqlSessionFactory()

    一. buildSqlSessionFactory() mybatis-plus 同样的是调用  factory.getObject() 方法来进行 SqlSessionFactory 创建的. 然后 ...

  8. HDU 1542 Atlantis(扫描线算法)

    题意:给出n个矩形的左下角左边和右上角坐标,求这n个矩形的面积并 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542 典型的扫描线算法的题目 什么是 ...

  9. INEQUALITY BOOKS

    来源:这里 Bất Đẳng Thức Luôn Có Một Sức Cuốn Hút Kinh Khủng, Một Số tài Liệu và Sách Bổ ích Cho Việc Học ...

  10. B - 青蛙的约会

    两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面. 它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止. 可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方 ...