做技术越久,越觉得自己所掌握的东西,只是冰山一角,单片机只是解决问题的工具罢了。
我做过工程师,也技术入股过一家小公司,也做过自由职业。
我现在已经从业13年了,有很多老板找我开发方案,时常感叹隔行如隔山,有很多功能没做过的,也要花很多心思研究,过程也要跳很多坑。
但经验的优势,确实体现在开发效率和产品稳定性上,哪怕是没做过的项目,稍微研究一下,也能很快找到切入点。
先以一句话总结:复杂性很大程度上,是源于降低产品成本的需求。
比如以前我做项目,都很喜欢用STM32,复杂点的上F10x系列,简单的上F030系列,因为熟悉,用起来顺手,但是站在产品的角度,需要考虑到成本,不会管要牺牲工程师多少脑细胞的。
有一次,我在一家公司做研发,硬件工程师为节约几个电容的成本,导致纹波大,产品在某些特定环境,出现通讯数据问题,大批量退货,研发部通宵加急整改。
产品也很简单,可以说功能的程序部分,哪怕是应届生调上一段时间,也能调出来。
但是又如何?很多新手的想法和标准,仅仅是在实现功能上,而非能保证低成本的同时,可靠性,稳定性又好。
所以,我经常对那些看不起51单片机的人说一句话,功能再简单,做成产品也不容易啊。
同时,我也想表达一个信号,做国内消费类产品,特别是对成本敏感度,工程师都比较想砸键盘。
觉得单片机简单的人,大多都还停留在表层,真正的高手,不是把简单的事情复杂化去炫技,而是能够把复杂的事情简单化,并且考虑到各种潜在的风险。
比如,以前我们有个经理,一直在做51单片机程序,他写单片机程序从来不用指针。
为什么?
因为他曾经在一个量产项目中栽过跟头,小批量测试没问题,大批量却出现几率性死机,被老板骂得狗血淋头。
从那以后,他老实了,能简单,哪怕笨一点的方法,也要确保代码的稳定性。
说到稳定性,这又是一个大话题,做单片机开发的,恶心就恶心在不可控因素太多,涉及硬件软件,其中一个环节有问题,产品就是有缺陷的。
很多人抱怨,MD屁事多工资低,都去卷纯软件,也不是空穴来风,特别是做硬件设计,特别容易背锅,但是能精通,工资也是很高的。
软件的可靠性设计包含很多方面,小项目还好,代码不多,能实现功能就行了,不用指针完全是没问题的,而且单片机资源也有限,代码多了也放不下。
如果是大项目,代码则要复杂很多,要考虑到后期的维护成本,所以实现功能的同时,要保证功能扩展的灵活性,可移植性,这就必须要用指针来实现的。
回顾这些年的经历,从最初的51单片机,到现在的ARM Cortex-M系列项目,再到各种专用芯片,一个看似简单的功能背后,在内行人眼里,可能都隐藏着复杂的硬件设计和软件算法。
所以,当有人说单片机简单时,我总是保有敬畏之心。
因为我知道,他们可能只是关注单片机本身,而真正的产品开发,是涉及硬件、软件、协议、算法、平台等多个领域,是通用技能和行业的知识储备和实践经验。
最近有些老铁找我咨询学单片机,聊完发现99%的人都走了弯路,特意写了一篇单片机学习路径:
单片机不踩坑的学习路线https://blog.csdn.net/2301_78464137/article/details/141396541