嵌入式的学习和职业发展,写给还在迷茫中的朋友

21ic电子网 2020-02-20 00:00

朱晓明按:

当互联网大行其道之后,政府把“创客”写入政府报告,遍地智能硬件如雨后春笋。在网页设计和网站程序员身价倍涨之后,嵌入式开发苦苦坚守的攻城狮们是否能迎来职业生涯的新的春天?在技术上深耕,是金子总会发光,请看许先生的精彩文章:

正文:

最近我的工作太忙了。身边朋友问我如何学习嵌入式,在这个行业健康的发展。我一直未能做一个系统的回答。这里我想写篇文章,彻底的回答这个问题。


嵌入式,这是个术语。在我看来,嵌入式系统是:为了应用高度定制软件和硬件的计算机系统,满足一系列的特定应用需求。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。原文为:Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants。(此段来自百度) 从我个人的理解,到普遍的定义,再到IEEE的权威。可以看到,嵌入式系统首先是计算机系统。我们不能忽略这个问题。既然是计算机系统,那么学习嵌入式,计算机的基本理论知识我们要不要学习呢?比如说,编译原理、数据结构、操作系统、离散数学、计算机系统体系结构。个人认为,没学走,就学跑是非常要不得的。很多人意识不到这点。加之国内很多学校没有培养嵌入式的专业,没有相应的人才输出。很多学习嵌入式的人都是从电子类的专业,自动控制类的专业等等转过来的。这个转型也意味着理论上的巨大缺憾。如果要问,排序算法有几种,恐怕只知道冒泡和希尔,不知道堆排序,快速排序,基数链式排序这些算法,更不知道还有内部排序和外部排序之分。查找算法只知道个基本的2分查找。对于树的查找算法一无所知。怎么说呢?也许很多从业的程序员,不乏专业水平相当优秀的,认为这些并不重要。我只能说,你命好,做这种具体的工程大于理论的东西。实际上,如果从一个嵌入式的程序员成长为系统设计者,或者更高的技术职位,要从更深的层次看问题。理论起到了非常大的支撑作用。

比如说,设计一个普通的微波炉控制系统。说实话,这个代码应该是非常简单的。但是,作为精细的设计者,不仅仅要考虑需求是否完成。还用从整个程序的空间杂度、时间杂度上去分析,并降低整个代码的复杂度。从而进一步降低软件结构、算法实现对处理器的要求,达到对成本的节约。一般来说,成本不光光是BOM成本,还包括人力成本,运营成本,开发成本,维护成本等等。任何软件系统都要测试,然而一份代码要怎么才能比较好测试呢?这个问题并不好回答。我这里先卖个关子,回头我在另外一篇文章里详述。尤其是嵌入式代码,测试方法虽然沿用了PC机的一些做法,但是仍然有许多工程限制。做起来难度颇高。马克思说过,一切的节约可归结为时间的节约。代码结构简单,空间杂度小。那么也意味着更小的工程量,更短的测试时间,更稳定的产品质量。如果是个理论性稍微强点的产品,汽车导航系统。地图的路径搜索算法。定位位置的搜索,以及地图的分类加载优化等等,都不是太容易就能做好的。更需要坚实的理论基础。许多刚出学校的大学生朋友们,没出校门就把相关的知识还给老师了。其实,我经常问公司新来的同事,设计算法的思路是什么?这个是从计算机的角度去考虑一个问题的解决办法。很多新人是计算机毕业的都无法完整的回答我的问题,失望之余,更想说的是:经验很重要!但是比经验更重要的是知识,比知识更重要的是方法。在理论的指导下去积累经验。减少从经验下获取知识,减少体验式学习这种状态,养成系统的认识分析问题的方法,理论联系实践的方法,实践检验真理的方法,经验必须能被理论解释的方法。

所以,这第一点建议,就是希望从事嵌入式的朋友能把计算机基础课程全部系统的学习一遍。

我们还是来看嵌入式的定义,这个定义是相对的概念。什么计算机系统不是“高度定制的软硬件计算机系统”呢?PC机。不严谨的说是这样。嵌入式在工程上有非常多的特点,相对于PC系统说,如果把PC系统看成一个完全的标准的“大嵌入式系统”,我们用大鹏鸟来形容它。那么,像“蜂鸟”这样的最小的小鸟,像“麻雀”这样的常见系统。也就不难理解了。从技术上讲,PC系统的知识量,难度都要比一般的嵌入式高出N个数量级。但由于PC系统在计算机历史上发展得比较早。因而,其智力投入、完善性、应用的广泛性重要性是别的系统平台无法比拟的。然而,正因为发展了这么久,其平台的封装性稳定性是非常高的。操作系统级,支撑软件级,应用软件级。特别是应用软件级,一些与平台无关的软件,基本上很少涉及操作系统的知识,以及一些内部的原理。如浏览器里的Javascript开发,基本上不涉及操作系统的知识,只是受不同的浏览器的影响;又如Java,只涉及较少的系统平台的知识;就算是C/C++语言,开发应用程序,也就是一套API的应用。涉及的操作系统的东西也只是冰山一角。由此可见,PC平台的优良封装,极大的简化了问题的复杂度,使开发者和应用者能把主要精力放在自己的业务上,提高开发效率。嵌入式领域就没有这么幸运了。其为应用的高度定制,造成了以效率,应用为优先的特点。封装层次太多必然对效率有所伤害。同时规模变大,测试变得复杂。开发周期变长。所以嵌入式的层次结构相对于PC系统,边界没那么清晰,封装考虑的问题没有那么全面。完成同样的一个工作,需要了解的内容更多,才能做得更好。如果一定要拿嵌入式和PC系统比,个人觉得,PC系统的开发有时候比嵌入式系统还要难。由于封装的比较完善,PC开发的门槛比较低,但是做好,做精通,做全面,比嵌入式难多了。嵌入式因为一开始就要了解相当规模的东西,所以入门的门槛变得比较高。纵观这些东西,其实PC系统和嵌入式系统很大一部分都是重叠的。


所以,第二点,我推荐大家读(俞甲子 / 石凡 / 潘爱民)写得《程序员的自我修养》。这里多说两句,首先,嵌入式只是比PC开发要多了解些东西,本质上来讲并无区别,这些知识当中有一半是与具体工程相关的东西。也就是说,照着流程做,并无太多的为什么,如果硬要问为什么,其实也就是一些工程上的需求。一些嵌入式应用之间可能略有一些区别,可能有些区别还很大,但大致的流程还是相似的。有个比较好的PC开发功底,了解了这些流程,开发嵌入式应该是没什么特别的障碍的。其次,《程序员的自我修养》这本书是针对PC平台的,书中的许多东西是PC平台特有的,比如说动态加载等。但理解动态加载也会对Bootloader加载应用程序和操作系统有一个直观的比较。由于并不是针对嵌入式平台的(我没发现有专门讲嵌入式的书),所以,很多东西需要自己在嵌入式中去体会。另外书中对一些嵌入式中比较在意的问题描述的并不够详细,比如说链接脚本还有ABI。PC平台这些问题被很好的封装起来了。所以,有些问题在嵌入式领域,还需要进一步深挖。这本书作为嵌入式入门的理解是非常合适的。

嵌入式在工程领域最大的问题是软硬件同时成熟,出了问题容易踢皮球。这里就很容想到调试。嵌入式的问题定位较为复杂,尤其是牵涉到软硬件的复杂问题。首先嵌入式的调试手段较为单一。相对于PC平台,稳定性和可靠性都要打折扣。这里不仅包括调试平台的问题,也包括一些调试手段对代码的影响,诸如改变代码的运行时间,改变了代码的动态行为(频度,触发时差等)。做嵌入式对系统更加要有个全面的认识。这里包括从设计方法思路,设计目标要求,硬件的详细设计和软件的详细设计。了解的越深刻对问题的定位越有帮助。这里就涉及到一个最大的问题,也就是刚出校门很多学生对自己的憧憬:要软件硬件都通。这个目标向大家坦白,我也憧憬过。当我现在招聘学生的时候,甚至有些工作经验的人都说出这个目标。这个目标不是错,只是计算机软件和硬件这两大块都是非常广袤的领域,说通,目标的确有点点高了。所以在这里,我常常给同事的建议是:如果你的专业是电子类的,可以把精力主要的放在硬件上,软件只作为兼顾,学习一些C语言的基本知识,写一些小型代码,不宜把目标放在全职编程上。如果是计算机专业的,我建议把主要精力放在软件上,学会看懂原理图,了解一些电路的大致功能就可以了。两方面往深里面去都是无底洞。全通的话,的确要些大本事的。这里只是我的建议。理由也很简单,人都是经营自己的长处,规避自己的短处。曾经有一个朋友问我嵌入式问题,想成为软硬都通的人。想给自己的职业规划一下,我大致的问他几个软件问题,比如说,算法的设计思路,排序算法的种类,搜索算法的种类,操作系统的本质,互斥多线程等等基本问题,回答毫无头绪。然而问起电路的知识,KCL,KVL,竞争冒险,运放的分析方法,信号与系统的基本知识,对答如流。这种人去主攻软件,是资源的极大的浪费。等你软件入门了,硬件方面的设计知识也忘得差不多了。然后面临事业更上一层楼的压力,软件需要学习的东西比较多,基础理论差,学什么都吃力。硬件方面缺乏调试和经验/的积累,也很难有所作为。若干年后只能做配角,精力的下降,事业上的失意,只能让自己沦为屌丝。

这里又提到项目经理,技术总监这样的技术管理职位,不是说你技术好就可以做这个职位了。首先各个公司这两种职位都是有所区别的,但一般来讲都是偏向管理的。既然是管理,不能用别人管你的时候,你得到的体验再去管别人,要学习管理理论。诸如PMBOK,CMMI,好好看看行业内优秀的工程实践,好好看看项目目标如何对齐。这些理论知识都是指导我们实践的最有效的手段。不要寄希望自己是牛人中的牛人,可以发明新的理论。请大家看看历史,每个行业都有个开山鼻祖,那时候水平还比较低,然后发展一段时间后有一个将这个行业壮大的牛人。这个并不仅仅是因为那个牛人牛,也有因为这个行业积累到一定的时间,可以出这样的一个牛人将这个行业进一步壮大。这是事物发展的客观规律,我们必须要尊重。但在中国,技术人是一类特殊的人群,他们因为技术而傲,对于不懂技术的领导,私下缺乏应有的尊重和诚服。容易造成政令不通。项目经理,总监更应有好的技术,以便得到下属最大的认同。


所以这第三点,要综合自己的专业情况,知识背景,合理的选择自己的职业目标。在嵌入式领域找到自己的发展空间。


最后是一些杂项,我也不分类了。学习嵌入式的方法多种多样。但最好的办法,还是求助于计算机,计算机是自己的第一老师,人都是第二位的。不要指望通过牛人,你就可以变成牛人。学习知识,实际上是自己对知识建立理解的过程,不要第一时间去听大牛的讲解。首先要有自己的理解,即使是错的,我认错。再通过大牛的讲解进一步的学习,纠正调整自己,可以事半功倍。如果没有自己的思考,自己也只是个鹦鹉学舌的人,缺乏创造力和独立面对问题的能力。久而久之是非常可怕的。


不要想通过几个月培训机构的学习,就能像屌丝吃了全能丸,拿到高薪。如果真是这样,这世界里有时间有钱的人多了,他们为什么不能通过这种办法变得更有能力,拿到更高的收入?高薪背后意味着很多内涵和外延,这些内涵和外延不仅仅包括点点知识和技术,还有做事的态度方法,面对问题的坚韧……太多了。一句话,在自己想把自己变得更强,首先寻求的是能力的全方面的提升,不光光是点点技术。所以,面对这种问题一定要踏实。你要求的薪水高,公司对你的期望也高;每个公司都有特殊的东西,那不是一两天就能学会的,也不是技术能替代的。自己把调子提得那么高,要么惨淡收场,要么勉强完成任务;要么惊艳四座。自己看着办。想反,薪水提得不高不低,给自己一点点时间,企业对你的期望低,能做出点成绩,反倒容易让别人刮目相看,利于自己的长期发展。这里还是有许多学问的。自己的人生,一定要谨慎经营。


学习嵌入式一定要勤奋,编程是一种体力+脑力的活。熟能生巧,这是常识。十万行的编程量是基础。写一些复杂的算法,如A*,树等等算法;再写一些计算机图形学方面的算法,以应用软件为目标,把自己的编程量撑到十万行。这样的强度能保证自己对所用的语言有一个非常的熟练程度,也能对计算机的算法设计和数据结构有个深刻的认识,同时对操作系统的API也能略微熟悉。若能坚持这种训练到达三十万行。那么就会更加的优秀。可为进一步的行业发展,打下坚实的基础。


简单的聊聊,欢迎拍砖。谢谢。



作者:许雪松

来源:硬件十万个为什么

21ic电子网 即时传播最新电子科技信息,汇聚业界精英精彩视点。
评论
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 122浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 223浏览
  • 本文介绍编译Android13 ROOT权限固件的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。关闭selinux修改此文件("+"号为修改内容)device/rockchip/common/BoardConfig.mkBOARD_BOOT_HEADER_VERSION ?= 2BOARD_MKBOOTIMG_ARGS :=BOARD_PREBUILT_DTB
    Industio_触觉智能 2025-01-08 00:06 92浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 164浏览
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 116浏览
  • 故障现象一辆2017款东风风神AX7车,搭载DFMA14T发动机,累计行驶里程约为13.7万km。该车冷起动后怠速运转正常,热机后怠速运转不稳,组合仪表上的发动机转速表指针上下轻微抖动。 故障诊断 用故障检测仪检测,发动机控制单元中无故障代码存储;读取发动机数据流,发现进气歧管绝对压力波动明显,有时能达到69 kPa,明显偏高,推断可能的原因有:进气系统漏气;进气歧管绝对压力传感器信号失真;发动机机械故障。首先从节气门处打烟雾,没有发现进气管周围有漏气的地方;接着拔下进气管上的两个真空
    虹科Pico汽车示波器 2025-01-08 16:51 70浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 202浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 141浏览
  • 「他明明跟我同梯进来,为什么就是升得比我快?」许多人都有这样的疑问:明明就战绩也不比隔壁同事差,升迁之路却比别人苦。其实,之间的差异就在于「领导力」。並非必须当管理者才需要「领导力」,而是散发领导力特质的人,才更容易被晓明。许多领导力和特质,都可以通过努力和学习获得,因此就算不是天生的领导者,也能成为一个具备领导魅力的人,进而被老板看见,向你伸出升迁的橘子枝。领导力是什么?领导力是一种能力或特质,甚至可以说是一种「影响力」。好的领导者通常具备影响和鼓励他人的能力,并导引他们朝着共同的目标和愿景前
    优思学院 2025-01-08 14:54 61浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 106浏览
  •  在全球能源结构加速向清洁、可再生方向转型的今天,风力发电作为一种绿色能源,已成为各国新能源发展的重要组成部分。然而,风力发电系统在复杂的环境中长时间运行,对系统的安全性、稳定性和抗干扰能力提出了极高要求。光耦(光电耦合器)作为一种电气隔离与信号传输器件,凭借其优秀的隔离保护性能和信号传输能力,已成为风力发电系统中不可或缺的关键组件。 风力发电系统对隔离与控制的需求风力发电系统中,包括发电机、变流器、变压器和控制系统等多个部分,通常工作在高压、大功率的环境中。光耦在这里扮演了
    晶台光耦 2025-01-08 16:03 58浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦