Skip to content

1.4 裸机 vs FreeRTOS ​

这节要搞懂:不用 RTOS 会遇到什么麻烦,用了之后好在哪。 需要基础:1.3

一、什么是裸机开发 ​

裸机开发(Bare-metal)指的是不使用任何操作系统,程序直接运行在硬件之上。所有的执行顺序、时间安排,全部由开发者自己在代码里编排。

它的典型形态是一个永远转的大循环:

c
int main(void)
{
    hardware_init();            // 初始化硬件

    while (1) {                 // 永远不结束的大循环
        check_key();            // 检查按键
        update_display();       // 更新屏幕
        read_temperature();     // 读温度
        check_key();
    }
}

简单、直接、一眼看懂。功能少的时候完全够用。

二、麻烦从哪来 ​

假设 update_display() 这一步要花 80 毫秒:

时间轴 →
[check_key][──── update_display 耗时 80ms ────][read_temp][check_key]...
                        ↑
              这 80 毫秒里你按了按键
              程序完全不知道,因为它正忙着刷屏

结果:按键反应迟钝,甚至直接丢掉。

你可能会想:那把刷屏拆成 8 小段,每次只刷一点?可以,但代码会变成这样:

c
static int step = 0;                        // 记录刷到第几步了

if      (step == 0) { draw_block_0(); step++; }
else if (step == 1) { draw_block_1(); step++; }
else if (step == 2) { draw_block_2(); step++; }
// ...

每加一个功能,这堆判断就翻一倍。 写到后面自己都不敢改。

三、RTOS 怎么解决 ​

RTOS 允许你把程序拆成几个互不干扰的小程序(叫"任务"):

任务 A:刷屏幕   ── 慢就慢,卡住的只是它自己
任务 B:管按键   ── 平时"睡着",一按键就醒来干活
任务 C:读温度   ── 每 2 秒醒一次

每个任务都可以写自己的 while(1),互相不用管对方。

关键在于**"睡着"这两个字**:

裸机RTOS
等待的时候傻等,CPU 被白白占着睡过去,CPU 让给别人用
谁安排顺序你自己写代码排系统自动安排
加新功能要改动原来的代码新写一个任务就行
代码好不好读功能一多就乱每个任务各管一摊,清楚

四、什么时候不该上 RTOS ​

别觉得 RTOS 万能。这些情况裸机反而更合适:

  • 功能就一件事(比如只是定时闪个灯)
  • 内存特别紧张(RTOS 每个任务至少要吃 1KB 以上)

一句话判断

当你开始写"第几步、第几步"那种拆分代码时,就是该上 RTOS 的时候了。

本节要点 ​

  • 裸机 = 没有操作系统,一个大循环,所有顺序你自己排
  • 裸机的致命伤:一件慢活会拖住所有事
  • RTOS 把程序拆成互不干扰的任务,等待时会"睡过去"把 CPU 让出来
  • 功能单一、内存极小的场合,裸机反而更合适

动手试试 ​

  1. 找一个你熟悉的电子产品(微波炉、洗衣机),想想它同时在做几件事。
  2. 如果让你用裸机写"一边每 500ms 闪灯、一边每 2 秒读一次传感器、还要随时响应网络消息",你会怎么写?体会一下麻烦在哪。