1、不变
技术。现在去阅读嵌入式软件行业黄金年代开始年代也就是10多年前的书,感觉很清晰、很无感——这跟现在的技术没差多少。但是往上走,java、互联网(那个年代的互联网还是PC+服务器)可能就看不懂了。为何嵌入式软件技术多年还是C语言+ARM内核打大半*(剩下一小半很复杂)?嵌入式软工表示很无奈,因为硬件没变啊。嵌入式软件本来就是做贴近硬件的最底层软件的,硬件变化没有引起整个行业变化。除非哪天硬件变了,不用图灵机模式计算机、不用ARM架构了、不用C语言了、不用处理器指令集了、不用半导体了……
很多不懂行的人会被新媒体小编带节奏掉入坑,那些新技术、新领域绝大部分都走不出实验无法商业化。嵌入式软件是行业、商业、工业,不是爱好者自研用的。当然土豪玩家请随意买各种新奇的嵌入式技术。
工资。会被人打。
2、变
技术,其实技术还是有变的而且变化方向多、内容也不少。
①语言。
汇编语言少了,这要归功于MCU和编译器进步,其实电子计算机底层依旧是01串的机器语言,肯定也可以用汇编语言实现软件。但是用汇编写现在的程序像直接用沙子建大厦,虽然可以足够底层、可靠、*,但实现业务效率就低了。现在除了在需要非常可靠的地方用C和编译器预处理一段汇编外,基本没有整个产品全用汇编的案例。
多语言混用多了。Java、C++、C、汇编都会在一个产品上出现,尤其是应用层和内核、驱动层 交互式。现在应用层千变万化,内核和驱动层也应该略微变化。中间层的实现就牵涉到多语言混用。
②硬件和计算下沉
硬件的进步有目共睹,GPU、Cortex内核、高性传感器、多路ADC、DAC、SOC、新接口协议种类……硬件变化自然带来软件的变化,现在的嵌入式软件代码量和业务逻辑数量增大了好几倍。随着功耗和成本下降,计算下沉到移动端、便携式端已经非常明显。由此自然嵌入式软件也要开外挂,比如AI包、飞控包、RTOS包、PID包、多核心交互模块……很多开发外挂包的其实已经不是传统的嵌入式软件工程师了,它们有些甚至可以无视硬件平台(算力足够强大)任意开发算法。
③开发工具和平台
STM32CubeMX软件10年前几乎是不可想象的,因为硬件特别是MCU没有那么固定,自然没有库函数之类对底层寄存器包装的一层软件。虽然很多人在多年前可能已经在工作中这样做了,当硬件平台比较固定,以前的底层软件移植即可,直接开发MCU控制器以外的外设驱动和业务层。虽然现在很多半导体厂商没有做类似意法半导体的工作,因为这样会加重成本要大量招聘软件工程师。但对MCU理解最深的人自然是他们,他们做的底层驱动和配置软件必然是更好的。但可惜现在类似意法半导体这么彻底的厂商不多,“不就是配几个寄存器吗?”——几个?!几千个吧!为了提高效率,珍爱生命,提供MCU原始驱动包是应该了,特别是小公司,人没几个,库函数开发效率比较高。从寄存器开始开发,产品发布又要推迟了。
开发工具主要是交叉IDE和烧写器。交叉IDE要赞裸机、RTOS领域,对嵌入式Linux负分评价。嵌入式Linux至今没有免费开源好用的一体IDE出现,ARM DS5就是土豪才玩的起。嵌入式Linux已开发至少要十个工具或软件,大牛自然可以无视,Linux操作系统和硬件都搞死人,即使改改驱动和用QT写个界面,也要掌握大量工具的使用方法,小白表示压力巨大。烧写器出现了更多实惠的烧写器。
开发工具成本低自然带来行业的发展,业内虽然都觉得C51和STM32其实很Low,在汽车电子、安防等特殊领域不被待见。但是在大半领域绝对是统治级别,就是因为成本低、开发效率高。公司可以专注于产品和逻辑。当然这其实是加大了对嵌入式软工的要求,以前写几个寄存器就好了,现在行业逼着你除了继续加深底层还要往上走,去关注终端AI、终端区块链、终端算法等新领域新技术。