第一章:课程导论与开发环境搭建

1.1 照明系统智能化趋势

照明系统这几年变化真大。我入行那会儿,大家还在纠结怎么把LED驱动效率做到95%以上。现在呢?客户开口就问:「能不能支持蓝牙Mesh?能不能做边缘计算?」

说白了,照明已经不再是「亮不亮」的问题。它正在变成一个物联网终端节点。你想想看,一个智能灯泡里,除了电源驱动,还得跑协议栈、做传感器融合、甚至本地决策。这就对嵌入式软件提出了新要求。

我去年帮一家做商业照明的客户做方案。他们要求一个灯控器同时管理32个节点,还要响应时间小于50ms。嗯,裸机轮询肯定扛不住。这时候,RTOS就成了刚需。

智能化趋势主要体现在三个方向:

  • 联网化:从单灯控制到群组联动,Zigbee/BLE/Wi-Fi混网已成常态
  • 自适应:根据环境光、人体感应自动调节亮度色温
  • 可维护:OTA升级、远程诊断、故障预测

这些功能叠加起来,任务数量轻松超过10个。没有RTOS,你光处理任务调度就够头疼的。

1.2 RTOS选型分析:FreeRTOS vs RT-Thread

选RTOS就像选工具。没有最好的,只有最合适的。我个人习惯先看三点:生态、资源占用、学习曲线。

先看一张对比表,心里有个底:

对比项 FreeRTOS RT-Thread
内核大小 极小,ROM 4-9KB 标准版约10KB,nano版约3KB
任务数量 无硬限制,取决于RAM 无硬限制,支持动态/静态创建
IPC机制 队列、信号量、互斥量、事件组 邮箱、消息队列、信号量、事件集
组件生态 较少,需自行移植 丰富,内置AT组件、SAL、DFS
商业许可 MIT,商用友好 Apache 2.0,商用友好
学习曲线 平缓,文档清晰 中等,概念稍多

FreeRTOS 是我用得最多的。为什么?简单。它的API设计很直观,你只要记住xTaskCreate、vTaskDelay、xQueueSend这几个,就能跑起来。我在一个路灯控制器项目里,用FreeRTOS管理了8个任务:PWM调光、传感器轮询、通信处理、心跳上报……总共只用了不到12KB的Flash。

但FreeRTOS也有短板。它的组件生态比较弱。你想加个文件系统?得自己找第三方库。想用TCP/IP?得自己移植lwIP。说白了,它只给你一个内核,剩下的你自己拼。

RT-Thread 就不一样了。它更像一个「微型操作系统」,自带文件系统、网络框架、设备驱动框架。我有个做智能面板的朋友,用RT-Thread开发,从零到出样只用了两周。因为他直接用了RT-Thread的Sensor框架和AT组件,模组驱动都不用自己写。

不过RT-Thread也有代价。它的任务栈开销比FreeRTOS大一些。在资源极度受限的MCU上(比如2KB RAM),我会优先选FreeRTOS。

我的建议:

  • 如果你做的是简单照明控制(5个任务以内),RAM小于8KB → 选FreeRTOS
  • 如果你需要快速原型验证,或者要集成网络/文件系统 → 选RT-Thread
  • 如果你团队里新人多,FreeRTOS上手更快

1.3 开发板与工具链安装

好,选完RTOS,咱们得把环境搭起来。这门课我选的是STM32F103C8T6开发板,也就是大家常说的「蓝色药丸」。为什么选它?

  • 性价比高,某宝20块包邮
  • 资源适中:64KB Flash、20KB RAM,跑RTOS绰绰有余
  • 资料多,遇到问题好查

工具链方面,我推荐用 STM32CubeIDE。它集成了GCC编译器、调试器、代码生成器,一套搞定。当然,如果你习惯用Keil或者IAR,也没问题。我个人偏好开源工具链,因为跨平台方便。

安装步骤很简单,但有几个坑我得提醒你:

避坑指南:

  • 安装路径不要有中文和空格。我曾经因为路径里有个「项目」两个字,编译死活报错,查了半天才发现是路径问题。
  • 下载STM32CubeIDE时,选对操作系统版本。Windows用户注意区分32位和64位。
  • 安装完成后,第一次启动会下载固件包。建议挂个代理,否则下载速度会让你怀疑人生。

安装完成后,验证一下环境:

// 新建一个空工程,编译看看
// 如果能看到这个输出,说明环境OK
arm-none-eabi-gcc --version
// 输出类似:
// arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors) 10.3.1 20210824

接下来是调试器。我习惯用ST-Link V2,便宜好用。连接方式很简单:

  • SWDIO 接 PA13
  • SWCLK 接 PA14
  • GND 接 GND
  • 3.3V 接 3.3V

嗯,这里要注意。有些便宜的ST-Link V2是盗版的,固件可能有问题。如果你发现连不上目标板,先检查驱动。我曾经被一个盗版ST-Link坑了整整一天,最后换了个正版的,一次成功。

小技巧:

第一次连接时,用STM32CubeProgrammer读一下芯片ID。如果能读到0x410,说明连接正常。读不到的话,检查接线和驱动。

1.4 本章小结

这一章我们聊了照明系统为什么需要RTOS,对比了FreeRTOS和RT-Thread的优劣,也把开发环境搭好了。说实话,环境搭建是最枯燥的部分,但也是最重要的。我见过太多人卡在「编译不过」这一步就放弃了。

下一章,我们会真正开始移植RTOS内核。你会看到,一个任务是怎么被创建、调度、切换的。嗯,那才是RTOS最精彩的部分。

公众号:蓝海资料掘金营,微信deep3321