RTOS培训

任务

四种状态的转换

在实时操作系统(RTOS)中,任务通常会在以下四种状态之间相互转换:就绪态(Ready)、运行态(Running)、阻塞态(Blocked)和挂起态(Suspended)。这些状态转换的过程可以用以下图示和解释来表示:

  1. 就绪态(Ready):任务准备好可以执行,但是目前没有获得CPU时间片。
  2. 运行态(Running):任务正在执行,正在使用CPU。
  3. 阻塞态(Blocked):任务在等待某个事件(如I/O操作完成、信号量可用等)。
  4. 挂起态(Suspended):任务被挂起,不会被调度执行,通常是因为系统管理原因或用户请求。
状态转换图示:
  +-----------+           +----------+           +-----------+
  |           |           |          |           |           |
  |   Ready   +---------->+ Running  +---------->+  Blocked  |
  |           |           |          |           |           |
  +-----------+           +----+-----+           +-----+-----+
       ^                       |                        |
       |                       |                        |
       |                       v                        v
       +-------------------+ 任务切换                事件触发
       ^                       |                        |
       |                       |                        |
  +-----------+           +----+-----+           +-----+-----+
  |           |           |          |           |           |
  | Suspended +<----------+ Running  |<----------+  Blocked  |
  |           |           |          |           |           |
  +-----------+           +----------+           +-----------+
状态转换解释:
  1. 就绪态 → 运行态:当调度器选择某个就绪态的任务并分配CPU时间片时,该任务从就绪态转换到运行态。

  2. 运行态 → 就绪态:当任务运行时间片耗尽或被抢占时,该任务从运行态转换到就绪态。

  3. 运行态 → 阻塞态:当任务等待某个事件(如等待信号量、消息队列或I/O操作等)时,该任务从运行态转换到阻塞态。

  4. 阻塞态 → 就绪态:当任务等待的事件发生(如信号量可用、消息到达或I/O操作完成等)时,该任务从阻塞态转换到就绪态。

  5. 运行态 → 挂起态:当任务被挂起(通常是由系统或用户请求)时,该任务从运行态转换到挂起态。

  6. 挂起态 → 就绪态:当任务被恢复(解除挂起)时,该任务从挂起态转换到就绪态。

  7. 阻塞态 → 挂起态:当一个阻塞的任务被挂起时,它会从阻塞态转换到挂起态。

  8. 挂起态 → 阻塞态:当一个挂起的任务被恢复时,如果它仍在等待事件,它会从挂起态转换到阻塞态。

挂起和阻塞态必须先进入就绪态才能进入运行态

优先级

  1. 数值越小优先级越低,在 FreeRTOSConfig.h 中将 configUSE_PORT_OPTIMISED_TASK_SELECTION 设置为 1,则 configMAX_PRIORITIES 不得大于 32。一般最大数值按照需要进行配置, RAM 使用效率的原因,应保持在 实际需要的最小值。

  2. 对同等优先级的任务执行时间片轮询调度

  3. 配置抢占式优先级,则高优先级直接抢占cpu。若未配置抢占式优先级,则高优先级必须等待低优先级主动释放cpu。

任务启动到调用到终止的过程描述

在实时操作系统(RTOS)中,任务的生命周期从创建、启动、运行、等待、被中断、恢复到最终终止,是一个复杂且系统化的过程。以下是任务从启动到终止的典型过程描述:

  1. 任务创建(Task Creation) 任务在系统启动之前或在运行时动态创建。RTOS提供API来创建任务。

  2. 任务就绪(Task Ready) 任务创建后,进入就绪状态,等待调度器将其切换到运行状态。就绪状态的任务已经准备好执行,但由于CPU正在处理其他任务,它们暂时被挂起。

  3. 任务调度(Task Scheduling) RTOS调度器决定哪个任务在特定时间运行。调度器通常基于任务优先级、时间片轮转或其他调度算法。

  4. 任务运行(Task Running) 调度器将CPU控制权转移给任务,任务进入运行状态。任务的代码开始执行。

  5. 任务等待(Task Waiting/Blocked) 任务可能需要等待某些事件(如信号、消息、时间到期)才能继续执行。在等待这些事件时,任务进入等待(阻塞)状态。

  6. 任务恢复(Task Resumed) 当任务等待的事件发生后(如信号量被释放、消息队列中有新消息、延时到期),任务从等待状态恢复到就绪状态,等待调度器再次调度。

  7. 任务中断(Task Interrupted) 任务在运行时可能会被高优先级任务或中断服务程序(ISR)中断。中断后,RTOS保存当前任务的上下文,并切换到高优先级任务或处理中断。

  8. 任务终止(Task Termination) 任务可以主动终止,也可以被其他任务终止。任务终止后,RTOS释放其占用的资源,如堆栈和任务控制块(TCB)。

软件定时器

带ISR的函数是

最后修改:2024 年 07 月 19 日
如果觉得我的文章对你有用,请随意赞赏