Skip to content

RTOS 入门

什么是 RTOS

RTOS(Real-Time Operating System,实时操作系统)是一类面向嵌入式场景的操作系统,核心职责是:在确定的时间内,让该运行的任务运行起来。它通过任务调度、时间管理、同步与通信机制,把"多件事同时发生"的组织工作交给内核,而不是散落在应用代码里。

为什么需要 RTOS

裸机程序通常是一个大循环:

c
while (1) {
    handle_sensor();   // 可能要等很久
    handle_uart();
    handle_display();
}

问题在于:任何一个函数耗时过长,其它任务都会被拖累,响应时间不可控。RTOS 把功能拆成一个个任务,由调度器按优先级决定谁先运行,让高优先级事件(比如通信、报警)能及时响应,也让代码按"并发的多个任务"组织,更容易维护。

核心概念

任务

任务是 RTOS 中最基本的执行单元,本质是一段"永不返回"的函数,配合独立的栈。Yuan RTOS 中任务会处于以下状态:

状态含义
就绪可以运行,等待调度
运行正在占用 CPU
阻塞等待延时或 IPC 事件
挂起被主动暂停
终止/删除已结束或不再被管理

调度

调度器决定"下一个运行谁":

  • 优先级抢占:高优先级任务就绪后,立即打断低优先级任务。Yuan RTOS 有 32 级优先级,数值越小优先级越高。
  • 时间片轮转:同优先级任务轮流运行,每个任务运行固定长度的时间片(默认 10 个 tick)。

Tick 与时间管理

系统 tick 是内核的"心跳",由定时器中断周期性产生(Yuan RTOS 默认 1000Hz)。tick 驱动延时、超时、软件定时器:

  • yr_task_delay() / yr_task_sleep_until():相对/周期延时
  • 软件定时器:内核维护的超时回调机制

上下文切换

CPU 同一时刻只能运行一个任务,切换任务时需要保存当前任务的寄存器现场、恢复下一个任务的现场,这就是上下文切换,通常由汇编实现,是移植层(Yuan RTOS 的 portable.h)的核心工作。

同步与通信

多个任务需要协作,常用机制:

机制用途
信号量资源计数 / 事件通知
互斥锁保护共享资源(Yuan RTOS 支持递归与优先级继承)
消息队列任务间传递数据

临界区与中断

访问共享数据的代码段叫临界区,通常通过关中断保护。中断里也能安全地使用部分 API(Yuan RTOS 提供 *_isr 系列),用于唤醒任务。

内存管理

RTOS 内存模型分两类:

  • 动态分配:内核运行时从堆中分配任务栈/对象(FreeRTOS 的部分方案)
  • 静态分配:所有对象由用户预先定义(Yuan RTOS 采用),资源占用完全可预测,无碎片

RTOS 的代价

  • 额外资源:每个任务需要独立栈;内核本身占用 RAM/ROM(Yuan RTOS 约 640B RAM / 2.5KB ROM)
  • 切换开销:上下文切换需要时间,但通常只有几微秒
  • 调试复杂度:并发问题(竞态、死锁、优先级反转)比裸机更难排查

什么项目适合 RTOS

  • 多个周期性/事件驱动任务并存
  • 对响应时间有确定性要求
  • 功能模块多、需要清晰隔离

下一步:在 Yuan RTOS 教程 中,看看这些概念在真实内核里是怎么实现的。