FreeRTOS——任务管理
1. FreeRTOS 任务不允许以任何方式从实现函数中返回——他们绝不能有一条“return”语句,也不可能执行到函数的末尾。如果一个函数不需要,可以将其删除,如在任务中使用函数vTaskDelete(NULL),将当前任务删除。
2. 在启动任务调度器(osKernelStart() )前,最好只创建一个起始任务,在启动任务调度器(osKernelStart() )后,在起始任务中创建其他的任务,此时建议关闭中断。如 taskENTER_CRITICAL() ,...《创建任务》... taskEXIT_CRITICAL() 。
3. 优先级数目的最大值,为 FreeRTOSConfig.h 中 configMAX_PRIORITIES 的值。FreeRTOS本身并没有限定这个最大值,但是这个值越大,内核花销的内存就越大。故建议尽量将此常量设到可接受的最小值。
4. 在 《FreeRTOS V8.2.1》 中定义任务优先级的有效范围是从-3到 configMAX_PRIORITIES-3-1 。需要注意的是 ① 多个任务可以共用一个优先级;② 优先级号越小的任务优先级越低,如优先级号-3表示优先级最低。注,ARM的优先级号越小则优先级越高。
5. FreeRTOS在进行任务调度时,若多个优先级相同且最高的任务均进入就绪状态,则调度器会让这些任务轮流执行,即时间片轮转调度。
6. 阻塞状态:如果一个任务正在等待某个事件发生,则称这个任务处于“阻塞态(blocked)”。任务可以进入阻塞态以等待两种不同类型的事件:
1)定时(时间相关)时间——这类事件可以是延迟到期或是绝对时间到。比如某个任务可以进入阻塞态以延迟10ms。
2)同步时间——源于其他任务或中断事件。例如,某个任务进入阻塞态以等待队列中有数据到来。同步时间囊括了所有板级范围的事件类型。
7. 挂起状态:处于挂起状态的任务对调度器而言是不可见的。当然,大多数应用程序都不会挂起某个任务。
1)挂起任务:唯一方法就是调用 vTaskSuspend() API 函数。
2)恢复任务:唯一方法就是调用 vTaskResume() 或 vTaskResumeFromISR() API 函数。
8. 完整任务状态机如下图所示。

9. 系统在启动任务调度器时,自动创建空闲任务(优先级最低),以保证系统在任一时刻,至少有一个任务可运行。
10. 空闲任务的钩子函数(或称回掉函数,hook,or call-back),用户可以直接在空闲任务的钩子函数中添加应用程序的相关功能。空闲任务每运行一次就会调用一次钩子函数。若使用空闲任务钩子函数,则在FreeRTOSConfig.h 中 configUSE_IDLE_HOOK 必须定义为1。
1)空闲任务钩子函数的作用:
a)执行低优先级,后台或需要不停处理的功能代码。
b)测试系统的处理裕量:空闲任务只会在其他所有任务都不运行时,才有机会运行,所以测量出空闲任务占用的处理时间就可以清楚的知道系统有多少富裕的处理时间。
c)将处理器配置到低功耗模式——提供一种自动省电的方法,使得在没有任何应用功能需要处理的时候,系统自动进入省电模式。
2)空闲任务钩子函数的实现限制
a)绝对不能够阻塞或挂起。空闲任务只有在其他任务不运行时才会被执行(除非有应用任务共享空闲任务优先级)。以任何方式阻塞空闲任务都可能导致没有任务进入运行态。
b)如果应用程序用到了 vTaskDelete()AP 函数,则空闲任务的钩子函数必须尽快返回,因为在任务被删除后,空闲任务负责回收内核资源。如果空闲任务一直处于钩子函数中,则无法进行收回。
11. 在创建任务时定义了任务的优先级,启动调度器后,可以使用 vTaskPriofitySet() 改变任何任务的优先级。
12. 任务可以使用 vTaskDelete() API 删除自己或其他任务。任务被删除后就不复存在,也不会进入运行态。任务一旦被删除,空闲任务就会将已删除的任务的内存释放掉,因此,千万不能把空闲任务的执行时间饿死。说明:只有内核为任务分配的内存空间才会在任务被删除后自动收回,任务自己占用的内存或资源需要由引用程序自己显示地释放。
13. FreeRTOS的常用的任务调度方案被称为“固定优先级抢占式调度”。
“固定优先级”是指每一个任务都赋予一个优先级,这个优先级不能被内核本身改变,只能被任务修改。
“抢占式”是指当任务进入就绪态或优先级改变时,若处于运行态的优先级更低,则该任务总是抢占当前运行的任务。
FreeRTOS还可以采用协作式调度。
采用一个纯粹的协作式调度器,只可能在运行态任务进入阻塞态或是运行态任务显示调用 taskYIELD() 时,才会进行上下文切换。任务永远不会被抢占,而具有相同优先级的任务也不会自动共享处理器时间。协作调度的这种工作方式虽然比较简单,但可能导致系统响应不够快。
FreeRTOS还可以采用混合调度方案,这时需要在中断服务例程中显示地进行上下文切换,从而允许同步事件产生抢占式行为,但时间时间却不行。这样做的结果是得到一个没有时间片机制的抢占式系统。这也是一种常见的调度器配置。
14. 如何设置任务优先级?
作为一种通用的规则,完成硬实时功能的任务优先级高于完成软实时任务的优先级。但其他一些因素,比如执行时间和处理器的利用率,也要纳入考虑范围之内,以保证应用程序不会超过硬实时的需求限制。
15. 单步速率调度(Rate Monotonic Scheduling,RMS):是一种常用的优先级分配技术。其根据任务周期性执行的速率来分配一个唯一的优先级。具有最高周期执行频率的任务被赋予最高的优先级;具有最低执行频率的任务被赋予最低优先级。
这种优先级分配方式被证明了可以最大化整个应用程序的可调度性(schedulability),但是运行时间不定及并非所有任务都具有周期性,会使得对这种方式的全面计算变得复杂。
16. 任务的堆栈大小:栈深度 X 栈宽度
注:栈大小不能超过Size_t 类型变量所能表达的最大值。
例. 32位宽的栈空间,若栈深度为100,则栈大小为 100 X 4 = 400 (Byte)
FreeRTOS——任务管理的更多相关文章
- FreeRTOS --(7)任务管理之入门篇
转载自 https://blog.csdn.net/zhoutaopower/article/details/107019521 任务管理是操作系统中重中之重,不管什么 OS ,任务的调度管理都是核心 ...
- freertos之特点
主要特点:协程(co-routine):任务间的中断通信机制 支持可抢占式/协作式任务调度 .FreeRTOS-MPU 内核对象可以动态或静态分配 ...
- FreeRTOS学习笔记——FreeRTOS 任务基础知识
RTOS 系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能,初步上手RTOS 系统首先必须掌握的也是任务的创建 ...
- 【FreeRTOS学习03】小白都能懂的Task Management 任务管理基本概念介绍
在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级: 1 软实时和硬实时 硬实时系统的任务运行正确性与响应时限是紧密相关的 ...
- FreeRTOS --(11)任务管理之系统节拍
转载自 https://blog.csdn.net/zhoutaopower/article/details/107146764 前面有了创建任务.启动调度器.任务控制,接下来便开始分析一个 Tick ...
- FreeRTOS --(10)任务管理之任务延时
转载自 https://blog.csdn.net/zhoutaopower/article/details/107101723 在<FreeRTOS --(7)任务管理之入门篇>中讲过, ...
- FreeRTOS --(9)任务管理之启动调度器
转载自 https://blog.csdn.net/zhoutaopower/article/details/107057528 在使用 FreeRTOS 的时候,一般的,先创建若干任务,但此刻任务并 ...
- FreeRTOS --(8)任务管理之创建任务
转载自https://blog.csdn.net/zhoutaopower/article/details/107034995 在<FreeRTOS --(7)任务管理之入门篇>文章基本分 ...
- (41)freeRTOS之任务管理
1. 简介: 在 FreeRTOS 中没有线程和进程的区别,只有一个被翻译成任务的程序,相当于进程的概念,拥有独立的栈空间. 对于实时性,可以分为 软实时.硬实时:桌面电脑的输入处理可以看做是软实时, ...
随机推荐
- SQL数据库的多表查询
多表查询分为 内.外连接 外连接分为左连接(left join 或left outer join).右连接(right join 或者 right outer join).和完整外部连接 (full ...
- node.js 开发环境配置 和使用方式
1.在根目录创建一个文件夹 里面 放入js 编写完成后使用 cmd 进行编译就可以了2.expree 安装 卸载: npm uninstall -g express 安装指定版本: npm i ...
- 实现UDP高效接收/响应
环境Linux g++6.3.0 问题一:一个ip地址如何接收高并发请求 问题二:如何高并发响应消息 发送请求端只能通过ip地址+端口号向服务器发送请求码,所以服务器只能用一个UDP去绑定此ip以及端 ...
- BOM(1)
BOM 浏览器对象模型(Browser Object Model),使浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话". 浏览器对象模型(Browser ...
- Linux 安装配置 Tomcat
1.下载 tomcat Linux 版本 oracle 官网下载地址:http://tomcat.apache.org/download-80.cgi 百度云盘链接:http://pan.baidu. ...
- Work Time Manager【开源项目】- 创建自己日志组件 2.0重构
Hello all , 我又回来了 这次我们真是开始来聊聊开源项目里,小而有用的模块或者组件的开发思想. 同时,软件已经更新到1.60的版本了,支持新用户注册,可以不再使用统一的test账户了. 您可 ...
- Mybatis中javaType和jdbcType对应和CRUD例子
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIM ...
- 自动适配H5容器(UIViewView/WKWebView),生成长图,防微信进度条
前段时间撸代码猥琐发育的时候,设计师老王给了张截图某宝APP上一个生成长图分享的功能,正好公司有这个需求,于是在立马开始操练起来!在万能的度娘上搜集整理资料后发现很多文章介绍的方案对WKWebView ...
- 有关SQL模糊查询
执行 数据库查询时,有完整查询和模糊查询之分. 一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,%:表示任意0个 ...
- CSS常用Hack集合(adding)
1> IE9 and IE10 @media screen and (min-width: 0\0) { .p-form input.p-value[type="checkbox&qu ...