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——任务管理的更多相关文章

  1. FreeRTOS --(7)任务管理之入门篇

    转载自 https://blog.csdn.net/zhoutaopower/article/details/107019521 任务管理是操作系统中重中之重,不管什么 OS ,任务的调度管理都是核心 ...

  2. freertos之特点

    主要特点:协程(co-routine):任务间的中断通信机制              支持可抢占式/协作式任务调度 .FreeRTOS-MPU              内核对象可以动态或静态分配 ...

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

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

  4. 【FreeRTOS学习03】小白都能懂的Task Management 任务管理基本概念介绍

    在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级: 1 软实时和硬实时 硬实时系统的任务运行正确性与响应时限是紧密相关的 ...

  5. FreeRTOS --(11)任务管理之系统节拍

    转载自 https://blog.csdn.net/zhoutaopower/article/details/107146764 前面有了创建任务.启动调度器.任务控制,接下来便开始分析一个 Tick ...

  6. FreeRTOS --(10)任务管理之任务延时

    转载自 https://blog.csdn.net/zhoutaopower/article/details/107101723 在<FreeRTOS --(7)任务管理之入门篇>中讲过, ...

  7. FreeRTOS --(9)任务管理之启动调度器

    转载自 https://blog.csdn.net/zhoutaopower/article/details/107057528 在使用 FreeRTOS 的时候,一般的,先创建若干任务,但此刻任务并 ...

  8. FreeRTOS --(8)任务管理之创建任务

    转载自https://blog.csdn.net/zhoutaopower/article/details/107034995 在<FreeRTOS --(7)任务管理之入门篇>文章基本分 ...

  9. (41)freeRTOS之任务管理

    1. 简介: 在 FreeRTOS 中没有线程和进程的区别,只有一个被翻译成任务的程序,相当于进程的概念,拥有独立的栈空间. 对于实时性,可以分为 软实时.硬实时:桌面电脑的输入处理可以看做是软实时, ...

随机推荐

  1. STL语法——映射:map 反片语(Ananagrams,UVa 156)

    Description Most crossword puzzle fans are used to anagrams--groups of words with the same letters i ...

  2. HTML面试题

    1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? 所谓的“浏览器内核”无非指的是一个浏览器最核心的部分-“Rendering Engine”,直译叫做“渲染引擎”,我们也常称为“排版引擎 ...

  3. windows embedded compact 2013 正版免费下载

    不知道wince2013是不是真的免费了,不过可以试一下! 下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=39268 你仍然 ...

  4. JavaScript 特效三大系列总结

    一. offset系列 1. offset系列的5个属性 1. offsetLeft : 用于获取元素到最近的定位父盒子的左侧距离 * 计算方式: 当前元素的左边框的左侧到定位父盒子的左边框右侧 * ...

  5. Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作

    刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息            使用的Unity ...

  6. ASP.NET MVC5(四):数据注解和验证

    前言 用户输入验证的工作,不仅要在客户端浏览器中执行,还要在服务端执行.主要原因是客户端验证会对输入数据给出即时反馈,提高用户体验:服务器端验证,主要是因为不能完全信任用户提供的数据.ASP.NET ...

  7. dd的用法

    1.生成一个空的,大小为1G的文件(有洞的文件)$ dd if=/dev/zero of=winxp.img bs=1k seek=1024k count=1 2.读软盘,并以16进制保存到文件中#d ...

  8. oracle表空间自增长

    方式一:通过修改oracle database control 修改 第一步,点击开始--所有程序--Oracle - OraDb11g_home1--Database Control 第二步,通过g ...

  9. Sql Server日期时间格式转换

    Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE() ...

  10. 记一次服务器Tomcat优化经历

    公司需要一台测试服务器来做测试用,所以花了几天时间把服务全部部署好,在部署好war包之后,发现Tomcat访问超级慢. 1.进入Tomcat的bin目录下,运行 ./catalina.sh run命令 ...