招聘网站刷到「嵌入式软件工程师」,买设备时看到固件版本号,嵌入式软件到底指什么?说直白点:跑在专用硬件里的程序,不装在你我日常用的电脑和手机上。

哪些东西里有它

洗衣机控制板上定时启动的逻辑、扫地机器人的路径程序、汽车里的发动机控制单元、路由器和摄像头的固件,全是嵌入式软件。医疗设备、充电桩、共享单车锁里也都跑着这类程序,需求面比多数人想象的宽。共同点是硬件为特定功能定制,软件烧进去就长年跑同一类任务,不经常更新。

和普通软件的区别

资源紧张是最大不同,低端单片机内存可能只有几 KB,写代码要精打细算,没有垃圾回收,内存和堆栈都得自己管。其次是贴硬件:直接读写寄存器,配置定时器和中断,出问题要靠示波器和串口打印去抓。再一个是对稳定性苛刻,洗衣机控制器死机可以断电重启,跑在刹车和气囊系统里的代码不敢这么想。

工具箱也不一样:串口线是标配,进阶用 ST-Link、J-Link 这类烧录调试器,抓时序问题还得逻辑分析仪,单价不算高,但离开它们基本没法干活。

常见的技术分层

最底层是裸机程序,单片机上直接跑 main 循环;往上是带实时操作系统 RTOS 的方案,FreeRTOS、RT-Thread 用得多,任务调度交给系统;再往上是嵌入式 Linux,路由器、NVR 这类设备跑完整的 Linux,应用层写法和普通后台有点像。RTOS 的卖点是实时性,关键任务必须在规定时间内响应,这是它和普通 Linux 的一大差别。语言以 C 为主,性能敏感处穿插汇编,上层用 C++、Python 的也不少。

开发流程一般是电脑上交叉编译,再把固件烧进板子,靠串口日志调试。固件升级也是日常:小设备用烧录器重刷,联网设备走 OTA 在线升级,升级中途断电变砖是新手常踩的坑,正经产品都会做双分区回滚保护。

想入行的话,把 C 语言过扎实,买块 STM32 开发板做几个小项目,比背概念有用得多。岗位细分有单片机应用、驱动开发、BSP、固件测试几类,先把一类吃透再横向扩;这行起薪不算高,但经验是累积型的,越老越吃香大体成立。