RTOS学习笔记 ——任务

参考:《Freertos说明书》、  《嵌入式实时操作系统的多线程计算》

目录

  1. 多任务系统
  2. 任务状态
  3. 任务优先级
  4. 任务控制块
  5. 任务切换
  6. 任务设计原则
1. 多任务系统

多任务系统利用任务调度器实现多个任务的轮番执行,由于每个任务执行的时间比较短,看起来像同一时刻执行了多个任务。

RTOS,任何时间点只能有一个任务运行。具体运行哪个任务,由RTOS任务调度器决定。

RTOS任务调度器需要确保当前任务开始执行时,其上下文与任务退出时一致。

任务特性:支持抢占、优先级设置,每个任务拥有自己的堆栈。

2. 任务状态

运行态

  • 正在运行的任务。

就绪态

  • 处于准备就绪,可以运行但没有运行的任务。

阻塞态

  • 正在等待某个外部事件的任务。如等待队列、信号量、事件组、通知、互斥信号量、延时。
  • 任务进入阻塞态,会有一个超时时间。当超过这个时间,即使未等到事件,也会退出阻塞状态。
  • 被阻塞的任务,不能被调度器调用进入运行态。

挂起态

  • 被挂起的任务。被挂起的任务,不能被调度器调用进入运行态。
  • 被挂起的任务没有超时机制,任务进入挂起状态,调用函数vTaskSuspend();退出挂起状态,调用函数vTaskResume()。
3. 任务优先级

每个任务都可以配置一个0~configMAX_PRIORITIES -1的优先级。数字越小,优先级越低。

configMAX_PRIORITIES:该参数可以自定义。

  • 考虑到RAM的消耗,该参数最好设置为一个满足应用的最小值。(????没明白,task RAM的消耗不是跟task的数量有关吗,为什么跟这个参数有关??)
  • 若该参数设置为1,所以任务拥有相同的优先级。处于就绪状态的任务轮转获取处理器的运行时间。
     
4. 任务控制块

任务的信息保存在任务控制块中。以下是任务控制块中域的一些简要说明:
在这里插入图片描述

5. 任务切换

RTOS系统的核心是任务管理,任务管理的核心是任务切换,任务切换决定了任务执行顺序,切换效率的高低,也决定了系统的性能。
 

6. 任务设计原则

程序设计时,为了得到更好的性能和最小化目标代码,程序员应该遵守以下原则:

(1)最小化任务数目

  • 任务的数目会显著影响系统的开销,如任务切换需要花费时间,任务的堆栈消耗内存空间等。

(2)最小化优先级数目

(3)谨慎设置任务优先级

  • 错误地设置优先级可能导致任务饿死、优先级倒置、程序的行为难以理解等问题。所以,设置任务优先级要慎重。

(4)等等。。。。。。。。

猜你喜欢

转载自blog.csdn.net/u012800825/article/details/103830608