1. 机器人嵌入式岗位的定价逻辑正在发生什么变化
这两年跟做机器人的朋友聊天,话题从“你用什么主控”慢慢变成了“你那边Linux驱动谁在扛”。这个变化挺微妙的,但背后反映的是整个行业对嵌入式工程师能力评估体系的一次重构。以前我们聊嵌入式,STM32加个RTOS基本就能覆盖大部分场景,现在你去翻招聘需求,会发现“熟悉Linux驱动开发”“有ROS/ROS2经验”“了解实时内核调优”这些词出现的频率越来越高。不是STM32不重要了,而是单纯会STM32已经不够撑起一个机器人岗位的薪资预期了。
我自己的观察是,机器人这个赛道把嵌入式岗位拆成了两个明显的方向:一个是偏底层的实时控制,一个是偏上层的系统集成。前者还是STM32、RTOS那一套,但要求你对电机控制、传感器融合、实时性有更深的理解;后者则直接跳到Linux、ROS、甚至具身智能的训练部署框架上。这两个方向的能力定价差异正在拉大,而且拉大的速度比很多人预想的要快。
这篇文章我想把这件事拆开聊透。从STM32和RTOS这些传统能力为什么“变贵”了,到Linux在机器人里到底承担什么角色,再到如果你现在想往机器人方向转,应该怎么规划自己的技能树。我会尽量用实际项目里的例子来说明,而不是泛泛地谈趋势。适合已经在做嵌入式、想往机器人方向靠的朋友,也适合刚入行、想知道该往哪个方向投入时间的新人。
2. STM32和RTOS:从“会用”到“用得好”的分水岭
2.1 为什么STM32依然是机器人底层的硬通货
先说一个可能有点反直觉的判断:STM32在机器人领域的地位不但没有下降,反而在某些细分场景里变得更关键了。原因很简单,机器人对实时性的要求是刚性的。你让一个机械臂的关节控制跑在Linux上,哪怕打了实时补丁,抖动也可能到几百微秒级别,而STM32跑裸机或者RTOS,抖动可以控制在微秒级。这个差距在低速场景可能看不出来,但在高速抓取、力控打磨这些场景里就是能不能用的区别。
我去年帮一个朋友调过一台协作机器人的关节控制器,用的就是STM32F4系列跑FreeRTOS。他们的痛点很有意思:单个关节控制没问题,但六个关节联动的时候,总线通信的延迟导致末端轨迹跟踪误差超标。这个问题最后不是靠换更快的芯片解决的,而是重新设计了CAN总线的调度策略,把关键控制帧的优先级提上去,同时把一些非实时的状态上报挪到低优先级任务里。这个过程里,对STM32的CAN外设、中断优先级、RTOS任务调度的理解深度,直接决定了你能不能定位到问题。
所以STM32的“变贵”,不是因为它本身变难了,而是因为机器人场景对它的使用深度提出了更高要求。以前你可能只需要点个灯、读个传感器,现在你需要理解DMA和中断的配合、理解总线仲裁、理解RTOS里优先级反转怎么避免。这些知识在普通项目里可能一辈子用不上,但在机器人里是天天要面对的。
2.2 RTOS在机器人项目里的真实使用场景
RTOS在机器人里的角色,我觉得可以用一个类比来说明:它就像是一个交通警察,负责让不同优先级的任务在正确的时间得到CPU。机器人系统里通常有这么几类任务:高频的电机控制循环(1kHz以上)、中频的传感器读取(100Hz到1kHz)、低频的状态上报和通信(10Hz到100Hz)。如果没有RTOS,你得自己写一个调度器来管理这些任务,而且很容易写出优先级反转或者任务饿死的bug。
我用过几种RTOS,FreeRTOS在STM32上是最常见的,Zephyr这两年在机器人圈子里也开始多起来,尤其是需要网络协议栈或者多核支持的场景。选哪个其实不是最关键的,关键是你得理解RTOS的几个核心概念:任务优先级怎么分配、中断和任务的交互怎么设计、共享资源怎么保护。这些东西在文档里都有,但实际项目里踩的坑往往出在细节上。
举个例子,我之前做一个移动机器人的底盘控制,用FreeRTOS建了三个任务:电机控制任务(最高优先级)、IMU读取任务(中优先级)、上位机通信任务(低优先级)。看起来没问题对吧?但实际跑起来发现电机控制任务偶尔会延迟。查了半天发现是IMU读取任务里用了I2C,而I2C的驱动里有个忙等待的循环,在等待期间它不释放CPU,导致高优先级任务被阻塞。解决办法是把I2C改成中断或者DMA模式,或者在忙等待里加个taskYIELD。这种问题你在教科书里看不到,但实际项目里很常见。
2.3 传统能力“变贵”的具体表现
所谓“变贵”,我理解体现在两个方面:一是薪资溢价,二是岗位门槛。从我这段时间看到的招聘信息来看,同样写着“熟悉STM32和RTOS”,机器人公司的面试深度明显比消费电子公司要深。他们会问你:如果CAN总线负载率达到80%你怎么优化?如果电机控制任务和通信任务共享一个SPI接口你怎么设计互斥?如果系统需要在不重启的情况下更新参数你怎么做?这些问题没有标准答案,但能看出你有没有真正在资源受限的环境里做过取舍。
薪资方面,我了解到的情况是,一个有三年机器人底层控制经验的嵌入式工程师,薪资大概比同等经验做消费电子的高出30%到50%。这个溢价不是因为STM32本身,而是因为机器人场景对实时性、可靠性的要求更高,能胜任的人更少。而且这个差距还在扩大,因为机器人出货量在涨,但能做好底层控制的人培养周期很长。
3. Linux在机器人系统里到底承担什么角色
3.1 从“可选”到“必选”的转变
五年前你做机器人,Linux可能只是用来跑个上位机界面,或者做个简单的通信网关。现在不一样了,Linux在机器人系统里承担的角色越来越核心。导航、SLAM、路径规划、视觉处理、甚至一些中频的控制逻辑,都跑在Linux上。原因也很直接:这些算法需要大量的计算资源和内存,STM32那点RAM和Flash根本不够用。而且Linux有丰富的库和框架支持,ROS/ROS2、OpenCV、PCL这些工具链在Linux上是最成熟的。
但这里有个常见的误区:很多人以为Linux就是“跑个Ubuntu”,会敲几个命令就行了。实际机器人项目里对Linux的要求远不止于此。你需要理解实时调度策略(SCHED_FIFO、SCHED_RR)、需要知道怎么隔离CPU核心给实时任务、需要会看ftrace或者perf来定位延迟问题。这些技能在普通的Linux运维里用不到,但在机器人里是刚需。
3.2 机器人Linux开发的几个关键能力点
我梳理了一下,机器人方向的Linux嵌入式开发,核心能力大概有这么几块:
第一是设备驱动开发。机器人上有很多自定义的传感器和执行器,它们的接口可能是SPI、I2C、CAN、甚至PCIe。你需要能在Linux内核里写驱动来对接这些设备。这个门槛比STM32的HAL库开发要高不少,因为Linux驱动涉及内核态编程、并发控制、电源管理等一系列复杂问题。但一旦掌握了,你会发现它的扩展性强很多,一个驱动写好了,上层应用可以通过标准的文件接口来访问,不用每次都改应用代码。
第二是实时性调优。标准Linux内核的调度延迟在毫秒级别,对于很多机器人应用来说是不够的。你需要会用PREEMPT_RT补丁,或者至少知道怎么用CPU隔离、中断亲和性设置来降低延迟。我见过一个案例,一个移动机器人的激光雷达数据处理跑在Linux上,因为调度延迟导致点云时间戳不准,最后影响了建图效果。解决办法是把雷达数据接收的中断绑定到一个隔离的CPU核心上,同时把处理线程设成SCHED_FIFO优先级。调整之后延迟从几毫秒降到了几百微秒。
第三是系统集成和调试。机器人系统通常由多个节点组成,节点之间通过ROS2的DDS或者自定义的IPC机制通信。你需要能定位通信延迟、数据丢包、节点崩溃这些问题。常用的工具包括ros2 topic hz、ros2 doctor、以及Linux本身的strace、gdb、perf。这些工具的使用熟练度,直接决定了你排查问题的效率。
3.3 Linux和RTOS的边界在哪里
这个问题我被问过很多次:既然Linux也能做实时,那是不是可以全部用Linux,不用RTOS了?我的回答通常是:看你的控制频率和抖动要求。如果你的控制循环在100Hz以下,抖动要求是毫秒级,那Linux加上实时补丁基本够用。但如果你的控制循环在1kHz以上,抖动要求是微秒级,那还是老老实实用STM32加RTOS。
实际项目里更常见的做法是异构架构:STM32负责硬实时的电机控制和传感器读取,Linux负责导航、规划、视觉这些计算密集型的任务,两者之间通过CAN、以太网或者共享内存通信。这种架构的好处是各司其职,STM32保证实时性,Linux提供算力和灵活性。难点在于两者之间的通信设计,需要保证数据同步和时序正确。
我参与过一个AGV项目就是这种架构。STM32负责底盘的运动控制和安全逻辑,Linux跑ROS2做导航和调度。通信用的是CAN,但CAN的带宽有限,不能把所有数据都往上发。我们的做法是在STM32上做一层数据聚合和降采样,只把导航需要的关键状态发上去,同时Linux下发的速度指令也做了限幅和看门狗保护。这个设计花了不少时间调试,但跑起来之后很稳。
4. 机器人嵌入式岗位的能力定价模型
4.1 不同能力组合的市场价值对比
为了更直观地说明问题,我整理了一个粗略的能力定价对比表。这个表是基于我看到的招聘信息和跟同行交流得出的,不一定精确,但能反映大致的趋势。
| 能力组合 | 典型岗位 | 薪资范围(一线城市,3-5年经验) | 市场供需 |
|---|---|---|---|
| STM32 + RTOS + 电机控制 | 底层控制工程师 | 25K-35K | 供需平衡 |
| STM32 + RTOS + Linux驱动 | 嵌入式系统工程师 | 35K-50K | 供不应求 |
| Linux + ROS2 + 导航算法 | 机器人系统工程师 | 40K-60K | 供不应求 |
| STM32 + RTOS + Linux + 实时调优 | 机器人嵌入式架构师 | 50K-80K | 严重供不应求 |
| 纯Linux应用开发(无嵌入式背景) | 机器人软件工程师 | 30K-45K | 供需平衡 |
从表里能看出来,单纯会STM32或者单纯会Linux,薪资上限是有限的。真正“变贵”的是那些能打通底层实时控制和上层系统集成的人。这种人需要同时理解微秒级的时序约束和秒级的任务调度,能在两种截然不同的开发范式之间切换。培养周期长,自然就贵。
4.2 为什么“全栈嵌入式”在机器人领域特别值钱
机器人系统的特殊性在于,它的性能瓶颈往往不在单个模块,而在模块之间的交互。比如你有一个很好的视觉算法,但图像传输延迟太大,整个系统的响应就上不去。或者你的电机控制很精准,但上位机的轨迹规划不平滑,末端抖动就很明显。这些问题需要有人能从系统层面去分析和优化,而不是只盯着自己那一亩三分地。
我认识一个做协作机器人的架构师,他的背景很有意思:最早是做STM32电机控制的,后来自己学了Linux和ROS,再后来去做了两年的运动规划算法。现在他带团队,能跟底层驱动的同事聊中断延迟,也能跟上层的算法同事聊轨迹插值的连续性。这种人在市场上非常抢手,因为机器人公司最缺的就是能打通上下层的人。
4.3 哪些传统能力正在贬值
有变贵的就有变便宜的。我观察到几个趋势:单纯的STM32外设驱动开发(比如点屏、读传感器)正在贬值,因为这部分工作越来越标准化,而且很多芯片原厂提供了很完善的库。单纯的Linux应用开发(比如写个Qt界面)在机器人领域也不值钱,因为这部分工作可以外包或者由软件团队承担。
真正贬值的是“只会调库”的能力。以前你会用STM32的HAL库点个LCD,就能找到工作。现在面试官会问你:你知道这个LCD的时序参数怎么算吗?如果刷新率上不去你怎么排查?如果你只会调库,这些问题就答不上来。机器人领域对底层原理的要求更高,因为出了问题往往没有现成的库可以调,你得自己分析波形、看手册、改配置。
5. 从STM32到Linux的跃迁路径
5.1 第一阶段:把STM32和RTOS吃透
如果你现在还在做STM32裸机或者简单的RTOS项目,我的建议是先别急着学Linux,把手头的东西做深。什么叫“做深”?我举几个具体的标准:
- 你能独立设计一个多任务的RTOS系统,合理分配优先级,处理好任务间的同步和通信。
- 你能用示波器或者逻辑分析仪定位时序问题,能看懂芯片手册里的时序图。
- 你能优化中断服务程序的执行时间,知道哪些操作该放在中断里,哪些该放到任务里。
- 你能设计一个可靠的通信协议,处理丢包、重传、超时这些异常情况。
这些能力在机器人底层控制里是基础,而且它们是可以迁移的。你理解了RTOS的任务调度,再去看Linux的调度器就会容易很多。你理解了STM32的中断机制,再去看Linux的中断子系统也会有似曾相识的感觉。
我自己的经验是,在STM32上花时间研究RTOS的源码是值得的。FreeRTOS的源码量不大,核心的调度器和IPC机制几千行代码,啃下来之后你对实时系统的理解会上一个台阶。这个投入在后面的Linux学习中会加倍回报给你。
5.2 第二阶段:Linux系统编程和驱动入门
从STM32转到Linux,最大的障碍不是命令行,而是思维方式的转变。在STM32上,你直接操作寄存器,一切都在你的掌控之中。在Linux上,你通过内核提供的接口来操作硬件,中间隔了好几层抽象。这个转变需要时间适应。
我的建议是从Linux系统编程开始,先熟悉文件IO、进程线程、信号、IPC这些概念。然后找一个简单的驱动例子,比如GPIO驱动或者字符设备驱动,在树莓派或者BeagleBone上跑一遍。重点不是把驱动写得多完美,而是理解Linux的设备模型:设备树怎么描述硬件、驱动怎么注册、用户空间怎么访问。
这个阶段我推荐用BeagleBone Black或者树莓派,因为它们的社区资源丰富,出了问题容易找到答案。等你有了一定基础,再上更复杂的平台,比如NXP的i.MX系列或者瑞芯微的RK系列,这些在机器人产品里用得比较多。
5.3 第三阶段:实时调优和系统集成
当你能在Linux上写驱动、跑ROS节点之后,下一步就是实时调优。这部分是机器人Linux开发和普通Linux开发的分水岭。你需要理解:
- 调度策略:SCHED_FIFO、SCHED_RR、SCHED_DEADLINE的区别和适用场景。
- CPU隔离:怎么通过isolcpus或者cgroups把CPU核心隔离出来给实时任务用。
- 中断亲和性:怎么把特定中断绑定到特定CPU核心,减少缓存失效和上下文切换。
- 内存锁定:怎么用mlockall防止实时任务被换页出去。
- 延迟测量:怎么用cyclictest测量系统延迟,怎么用ftrace追踪延迟来源。
这些知识在普通的Linux运维里用不到,但在机器人里是核心技能。我建议你在学习的时候准备一个实际的测试平台,比如用树莓派加一个伺服电机,写一个简单的控制循环,然后测量不同配置下的延迟。这种动手实验比看文档有效得多。
6. 实操案例:一个移动机器人底盘的软硬件协同设计
6.1 系统架构和选型理由
去年我参与了一个移动机器人底盘的项目,正好可以用来说明STM32和Linux怎么协同。这个底盘的要求是:最大速度1.5m/s,控制频率1kHz,支持ROS2接口,续航4小时以上。
架构上我们选了STM32H7加树莓派CM4的方案。STM32H7负责电机控制、IMU读取、电池管理、安全逻辑,跑FreeRTOS。树莓派CM4跑Ubuntu加ROS2,负责导航、路径规划、上位机通信。两者之间通过CAN FD通信,STM32作为CAN主节点,树莓派作为从节点。
选STM32H7的原因是它的主频高(480MHz),有硬件浮点单元,适合做电机控制的FOC算法。选树莓派CM4的原因是它的算力足够跑ROS2的导航栈,而且社区支持好,出了问题容易找到资料。CAN FD的带宽比经典CAN高不少,能满足1kHz控制频率下的数据交换需求。
6.2 STM32侧的关键实现
STM32侧的核心是一个1kHz的控制循环,用FreeRTOS的任务来实现。任务的优先级分配是这样的:
// 任务优先级定义(数值越大优先级越高) #define PRIO_MOTOR_CTRL 5 // 电机控制,1kHz #define PRIO_IMU_READ 4 // IMU读取,500Hz #define PRIO_CAN_RX 3 // CAN接收,事件驱动 #define PRIO_BATTERY 2 // 电池管理,10Hz #define PRIO_STATUS_LED 1 // 状态指示,5Hz电机控制任务里做FOC的电流环和速度环计算,IMU读取任务里做姿态解算,CAN接收任务里处理来自树莓派的速度指令。这里有个关键设计:速度指令不是直接用的,而是经过一个斜坡函数做平滑,防止速度突变导致电机过流。同时还有一个看门狗机制,如果超过100ms没收到新的速度指令,就自动减速停车。
CAN通信的数据格式我们定义了一个简单的协议,每帧8字节,包含帧类型、数据长度、数据和CRC校验。速度指令帧包含线速度和角速度,状态上报帧包含当前速度、电流、温度、错误码。这个协议很简单,但足够用,而且调试起来方便。
6.3 Linux侧的关键实现
树莓派侧跑的是Ubuntu 22.04加ROS2 Humble。我们写了一个ROS2节点来跟STM32通信,用的是socketcan接口。这个节点订阅/cmd_vel话题,把速度指令转换成CAN帧发出去,同时接收STM32的状态帧,发布成/odom和/battery_state话题。
实时性方面,我们把CAN接收的中断绑定到了一个隔离的CPU核心上,同时把ROS2节点的回调组设成了Reentrant,避免回调阻塞。还用了PREEMPT_RT补丁,把最坏调度延迟从几毫秒降到了几百微秒。这些调整之后,从/cmd_vel发出到STM32收到指令的端到端延迟大概在2ms左右,对于1.5m/s的速度来说,位置误差在3mm以内,满足要求。
调试过程中遇到的一个坑是CAN总线的终端电阻。我们一开始只在一端接了120欧姆的终端电阻,结果通信不稳定,偶尔丢帧。后来在另一端也加上终端电阻,问题就解决了。这个坑很经典,但第一次做CAN的时候很容易忽略。
6.4 这个案例的启示
这个项目让我更深刻地理解了异构架构的价值。STM32和Linux各有所长,强行让一方做另一方的事,效果往往不好。STM32做实时控制,Linux做计算和决策,两者通过定义良好的接口通信,这是目前机器人底盘的主流方案。
另一个启示是,通信协议的设计比想象中重要。我们一开始想用ROS2的DDS直接跟STM32通信,但DDS的协议栈太重,STM32跑不动。后来改成自定义的CAN协议,简单可靠,反而更合适。所以在机器人项目里,不要迷信“标准方案”,要根据实际约束来选择。
7. 常见问题与排查技巧实录
7.1 STM32和RTOS相关的典型问题
问题一:RTOS任务偶尔延迟,导致控制周期抖动。
这个问题的排查思路是:先确认是哪个任务延迟,用GPIO翻转加示波器测量任务的实际执行时间。如果发现是高优先级任务被低优先级任务阻塞,检查是否有共享资源没有正确保护。常见的原因是低优先级任务在持有互斥锁的时候被中断打断,而中断里又试图获取同一个锁。解决办法是用优先级继承互斥锁(FreeRTOS的xSemaphoreCreateMutex默认支持),或者把共享资源的访问放到临界区里。
问题二:CAN总线负载率高的时候丢帧。
CAN总线的仲裁机制决定了低优先级帧在总线忙的时候会被延迟甚至丢失。解决办法是合理分配CAN ID,把关键控制帧的ID设小(优先级高),非关键的状态帧ID设大。同时可以降低非关键帧的发送频率,或者用CAN FD提高带宽。如果还是不够,考虑用多条CAN总线分担负载。
问题三:STM32的ADC采样值跳动大。
这个问题在电机控制里很常见,因为PWM开关会产生电磁干扰。解决办法有几个:一是用硬件滤波,在ADC输入引脚加RC低通滤波;二是用软件滤波,比如多次采样取中值或者滑动平均;三是调整采样时机,在PWM的中央对齐模式下,在计数器过零点的时候触发ADC采样,避开开关噪声。我一般会先用示波器看ADC输入引脚的波形,确认噪声来源再决定用哪种方案。
7.2 Linux和实时性相关的典型问题
问题一:ROS2节点通信延迟大。
先确认是网络延迟还是处理延迟。用ros2 topic hz看发布频率,用ros2 topic delay看消息延迟。如果是网络延迟,检查DDS的配置,可能需要调整QoS设置,比如把可靠性从RELIABLE改成BEST_EFFORT,或者增大缓冲区。如果是处理延迟,检查回调函数里有没有阻塞操作,比如同步的文件IO或者sleep。
问题二:系统调度延迟超标。
用cyclictest测量系统延迟,如果最坏延迟超过预期,用ftrace追踪延迟来源。常见的延迟来源包括:中断处理时间过长、内核线程抢占、内存换页。解决办法包括:把实时任务绑定到隔离的CPU核心、用mlockall锁定内存、把中断亲和性设置到非实时核心上。
问题三:Linux驱动加载失败。
先看dmesg的输出,通常会有错误信息。常见的原因包括:设备树配置错误、引脚复用冲突、时钟没有使能、电源域没有打开。如果是设备树的问题,用dtc工具反编译设备树,检查节点的属性和兼容性字符串是否正确。如果是引脚冲突,检查pinctrl的配置,确保同一个引脚没有被多个驱动占用。
7.3 问题排查速查表
| 现象 | 可能原因 | 排查工具 | 解决方案 |
|---|---|---|---|
| RTOS任务延迟 | 优先级反转、中断阻塞 | 示波器、GPIO翻转 | 优先级继承互斥锁、缩短中断 |
| CAN丢帧 | 总线负载高、终端电阻缺失 | candump、示波器 | 调整ID优先级、加终端电阻 |
| ADC跳动 | 电磁干扰、采样时机不对 | 示波器 | RC滤波、中央对齐采样 |
| ROS2延迟大 | QoS配置、回调阻塞 | ros2 topic delay | 调整QoS、异步回调 |
| Linux调度延迟 | 中断抢占、内存换页 | cyclictest、ftrace | CPU隔离、mlockall |
| 驱动加载失败 | 设备树错误、引脚冲突 | dmesg、dtc | 修正设备树、检查pinctrl |
8. 给不同阶段嵌入式工程师的建议
8.1 如果你还在学校或者刚入行
先把C语言和数据结构基础打牢,然后找一块STM32的开发板,从点灯开始,一步步做到能跑RTOS、能写通信协议、能控制电机。这个过程不要跳步,每一步都动手做一遍。我见过太多人直接上Linux,结果底层的基础不牢,遇到时序问题就抓瞎。
同时建议学一点Python和Linux的基本操作,因为机器人领域不可避免地会用到这些。但不要本末倒置,嵌入式工程师的核心竞争力还是在对硬件和实时系统的理解上。
8.2 如果你有几年STM32经验想转机器人
你的优势是对实时系统和硬件接口的理解,这是很多纯软件背景的人不具备的。你需要补的是Linux系统编程、ROS2、以及一些机器人学的基础知识(比如坐标变换、运动学)。建议从一个小项目入手,比如用树莓派加STM32做一个简单的移动机器人,把ROS2的导航栈跑起来。这个过程会让你理解机器人系统的整体架构,也会让你发现自己的知识缺口。
不要试图一下子把Linux内核和ROS2都学透,那样容易挫败。先能用起来,再逐步深入。遇到问题的时候,善用社区资源,ROS2的官方文档和GitHub上的开源项目是最好的学习材料。
8.3 如果你已经是机器人嵌入式工程师
你的下一步可能是往架构师方向走,或者往某个垂直领域深入(比如运动控制、传感器融合、功能安全)。架构师需要更广的知识面,包括系统设计、性能优化、团队协作。垂直领域专家需要更深的理论基础,比如控制理论、状态估计、机器学习。
不管走哪条路,保持动手的习惯很重要。我见过一些架构师,脱离一线太久,对具体的技术细节失去了判断力,设计出来的方案看起来很美好但落地困难。定期写代码、调板子、看波形,能让你保持对系统的直觉。
9. 我对这个趋势的个人判断
回到标题里的“重新定价”,我的理解是:机器人行业正在从“能做出来”向“做得好”转变,这个转变对嵌入式工程师的能力要求从“广度”转向了“深度加广度”。以前你会STM32就能找到工作,现在你需要在一个方向上足够深,同时在其他相关方向上有足够的广度来支撑系统级的思考。
STM32和RTOS不会过时,但它们的价值会越来越依赖于你用它解决了什么问题。如果你只是用STM32点了个灯,那这个技能不值钱。如果你用STM32加RTOS做出了一个抖动在微秒级、能在恶劣电磁环境下稳定运行的控制系统,那这个技能就很值钱。Linux也是一样,会敲命令不值钱,能用Linux构建一个满足实时性要求的机器人系统才值钱。
最后分享一个我自己的习惯:每隔一段时间,我会把自己会的东西列一个清单,然后问自己,这里面哪些是“只有我会”或者“会的人很少”的。如果清单里大部分都是“很多人都会”的技能,那就说明我需要往深处再挖一挖了。这个习惯帮我避开了不少“看起来很忙但实际在贬值”的陷阱。