很多初学者,甚至是混了好几年的老手,都在抱怨,电子这行怎么竞争这么大啊? 颓废,这完全在抹杀自己的激情,没了激情,搞电子,完全就是在浪费生命。其实,竞争真的大吗??对比一下,难道做业务的竞争不大,做管理的竞争不大,现在这个社会,哪个领域、哪个行业竞争不大?
所以,假如你想逃避竞争,那你就不用活了,当然,你本身家庭很好,父辈好有钱的话,那另当别论!所以,不管什么行业,竞争大不大的问题,都不用问了。答案都是:竞争大,但是必须面对,我们要自己面对的竞争越小,那么你的技术能力应该是越牛X。搞电子的人要跟得上时代,但是人的脑袋会随着年龄的增大而迟钝,所以这就造成了电子人才(特别是搞电子软件)的一种生老病死的自然规律。1、自己创业了或者是技术管理层,完全脱离技术,请几个二十来岁的新手,让他们去发掘脑袋,自己在一旁,靠着自己的经验,嘴巴说说可以了。3、继续做技术,但是这种会很累,天天逼着自己学习,还吃力不讨好,也不敢轻易换工作了,因为此时编程思维固定,工作激情缺乏,学习能力偏低,一个新的工作环境很难让他适应,这种情况,假如不是元老级人物,或者已经是个技术负责人,那么很容易被一个新手所代替。也就是说,搞了十多年技术之后,这批人将慢慢的淡出这个行业,新老交替,长江后浪推前浪。所以真正的技术人才永远都缺,前提是你真的有能力。所以,只要有能力,你永远都吃香的,永远都不怕竞争,就不应该担心竞争大不大的问题,而是担心自己牛不牛的问题。学单片机,是软硬件的综合体。并不是单单会点汇编或者C语言就说会单片机,这顶多只能说会编程而已。因为大部分单片机系统都是不带操作系统的裸机系统,那么没有所谓的操作系统和应用软件,没有操作系统层所封出来的一些接口可用,也就是说,需要架一个简单的前后台系统,只会写应用软件,就比较难使用单片机,因为他们对这些只有硬件,没有软件接口的东西,无从下手。所以,学单片机,首先学会硬件,也就是简单的电阻电容电感,三极管,二极管,比较器,等等相关的基础元器件特性及其应用。个人觉得,大学教程的模电数电很重要,先模后数,模电是数电的基础,也是电子这块的基础,显得特别重要。然后数电就要吸取其思想,很多数电所介绍的集成IC,比如门电路,计数器,触发器,比较器,运算器等等,现在工业很少见的了,但是,其设计思想是值得学习的。理解单片机内部的人就清楚,单片机或者其他的主控(ARM DSP等)的内部其实也就是这些东东高度集成而来的。所以,学单片机的时候或者之前,先抽时间学习一下模电数电,学到自己有所理解的程度,就可以学一下单片机编程,C语言或者汇编都可以,看个人爱好,C语言移植方便,好维护,编程快速,但是缺点是其编译出来的CODE比较占空间,一般用于移植性通用型要求高的嵌入式软件领域,或者比较大的单片机项目,或者要求开发速度而对价格不敏感的产品。而汇编刚好相反,对利润薄,成本低,开发难度不大的行业使用,比如小家电。不过现在的MCU也很便宜的,几块钱都几十k的FLASH ROM,在现在技术人工那么贵的情况下,还是C语言比较迎合市场。学习这些理论知识的同时,都需要动手做实验,不怕搞错,最怕就是懒得搞。初学者学了编程语言的之后,又或者搞纯软件想转单片机的人,都会有个共同的特点就是,下一步不知道如何入手?那么我就会问,你懂硬件吗?要求不高,略懂就好,不求很精,因为硬件这东西是越老越辣,越久越醇,锻炼多了,自然会精。假如你一点都不懂,那请看上面的一段,学硬件基础去吧。假如略懂,那么你现在的切入点就是在五花八门的单片机中找一款合适的入门单片机,初学者做任何决定都是以“易入手”为标准,入手了,就不怕你以后跑不快,力求找些通用的MCU,资料多,软件平台也多,容易上手,比较51核的,虽然简单,但是它是鼻祖,学起来方便,只要懂了这个鼻祖,其他的再复杂的东西,也不过它繁殖出来的,不会太难。一下子搞太难的东西,不单学不会,还会打击自己的脆弱的心灵。选好了单片机,那就搭开发平台,首先是软件开发平台,针对不同的单片机内核或者型号,有不同平台,通用性51核的KEIL51,AVR的IAR ICC,还有很多不同厂家的开发平台,不一一列举。其次就是单片机硬件平台了,也就是开发板,不同的单片机器引脚和外围都稍有不同,所以开发板也有针对性,网上很多卖开发板的,都希望做的很通用,支持很多种型号的MCU,价格也不高,假如怕麻烦,怕焊接出错的初学者,可以买,关键是现在的开发板便宜,几十块钱很漂亮,以前那个年代动不动几百块,流血啊。当然,我更推荐是自己焊接,特别是自我感觉硬件还可以的人,趁此机会锻炼一下焊工,还有,会对电路理解更深的。其实各种各样的开发板都是一样的,只要你焊接遵循以下原则:首先,焊接最小工作环境,电源电路,复位电路,振荡电路(现在很多MCU都集成内部晶振,精度也可以,频率也比较高)。然后就是其他的常用的外设电路,按键输入(按键多的话,可以用矩阵,学学矩阵扫描),串口(UART),AD/DA,蜂鸣器,数码管,点阵显示屏,电机驱动,温度传感器等等,这些资料很多的了,几十年来,初学者都是学这些。这些外围电路,网上资料多得是,随便找几份对比一下就有了。找个万用板,就可以动手焊了。不成功的,测量单片机工作电压正不正常,晶振有没有起振,复位电路有没有搞错等等,再不成功,焊多一块,哈哈。有了软硬件平台,就可以一个实验一个实验的动手,开始是模仿,后来就改动,再后来就完全自己搞一个有新意的,从0开始写code,做第一个属于你自己的project。顺便说一下,单片机的编程和纯软件的编程,除了编程思想和大部分语法可以沿用之外,其他的,寄存器配置和部分语法都有针对性,要花点时间去学的。学会了51之后,假如有时间可以学一下AVR PIC MSP430 等等其他内核的单片机或者功能更强大的51核单片机,宏晶,笙泉等等,作为一种提高的练习。ARM 、DSP等,其实也属于单片机一类,只不过它的内核牛X一点而已,但是,假如你就单单让他作为一种普通的单片机来用,那说明你不会用。首先说ARM芯片吧,它的内核就是ARM内核,它的主频高很多,普通的都有几百M。CPU缓存大,分有很多级的流水处理线,这样大大提高了CPU利用率。这种IC的资源足以让一个嵌入式操作系统正常跑起来,WINCE, LINUX, UCOS 等等,一个操作系统移植到里面去,跑起来,然后就自己利用操作系统的接口写一些应用软件,就可以直接控制其强大的外设了。当然了,这中间还有另外一种工程师在工作,就是嵌入式驱动工程师,他是专门针对硬件接口写驱动的,封出来的接口就给上层的人使用,这种工作有点类似搞单片机的。很多人想从搞软件直接搞ARM,那么我的建议的是,除非你能力很强大,可以直接搞ARM,否则的话,先学单片机,再学ARM吧。DSP,中文名叫数字处理器,看它的名字就知道了,它就是用来处理数据的,他的数据处理能力,比ARM强大的多,一般来说接口没有ARM丰富,它的接口都是有针对性的,快速的存储,快速的访问,这都是为了快速的处理数据而作准备的。它的主频也是几百M,DMA就肯定有的了。一般来说,图片处理,视频处理,网络数据处理等等多是用DSP的。就是因为它是用来做数据处理,那么精通DSP的人,一定要精通各种数据处理的算法,什么傅里叶等等,假如你将DSP看做一款MCU来搞,那太浪费了,100块的东西当几块钱的来用。要用好它,物尽其用,那真的很难,要精通算法才行。嵌入式软件分为嵌入式操作系统软件,嵌入式应用软件。大部分的嵌入式软件都寄宿在ARM内核的芯片上,三星,飞利浦等等都有ARM内核的IC,做计算机软件的人,很容易的就转做嵌入式软件,但是要做嵌入式驱动软件的话,就有点难了,因为这个涉及到硬件接口,一般都是搞单片机的人转过去做的。这几年,这个东西很火,用在数码产品,比如MID,掌上电脑等。现在刚毕业进来的应届毕业生都懂linux了,那个压力啊可想而知,想逃避竞争的人,不用想了。
嵌入式一直冠以高门槛的名号,相较于软件开发逊色的起步薪资也被网友调侃“饿肚子”。热情投入嵌入式的人比比皆是,无可奈何转入产品经理或技术型销售的也比肩继踵。嵌入式工程师到底有没有前途?的确,由于嵌入式代码量相对纯软导致起步工资低,但行业大牛的工资也非常可观。另外以长远目光来看,嵌入式渗透消费电子、安全安防、汽车电子、医疗电子、电信等等各个行业的计算机领域,而每年也约有40万的人才缺口。今年机器学习(ML)话题大热,Arm也推出神经网络机器学习软件 Arm NN,可在基于Arm的高能效平台上轻松构建和运行机器学习应用程序,未来嵌入式行业也将不断革新,嵌入式市场有所可期。据知乎某15年从业人员看,对于嵌入式不必悲观,也切莫盲目乐观,不同时期不同人对前途的定义是不同的。他表示,影响前途发展的因素包括平台、人脉、目标与机遇,有了更多的项目经验才有立足的机会,有广阔的人脉关键时刻才会有人拉一把,有了目标才能专注一个方向不断发展。另外,他还表示,切莫钻技术“牛角尖”,管理岗能爬就爬,错过机会,错过年龄,追悔莫及也无济于事。还有网友表示,世上不只平均收入排名第一的行业从业人员可以高质量的生活,排名第二、第三、第四等等从业人员都有高质量的生活,而在排名榜单上光鲜亮丽的从业人员也未必过得大红大紫。任何行业都与机遇、环境都有关,再好的行业也有混不下去的人,再差的行业也有人闷声赚大钱。另外,时间在变,世事也在变,前几年大热的公务员,现在也逐渐被人嫌弃。所以在浓厚的兴趣使然下,才有可能成功。另外,嵌入式这个鱼塘也有搅浑水般的存在,据了解,某知乎er最近面试的十几个平均工作年龄超三年的硬件工程师,居然搞不清楚三级管mos管,甚至连三个脚的名字都可以搞错,高低电平这种基础知识也搞不清楚,令人意外的是,这种水平的人开口要价也基本10K+。高的并不是门槛,高的是可以踏踏实实干好这一件事。嵌入式工程师的的终点只有一个,就是真正的技术专家。
嵌入式技术大体上可分为编程语言,内核技术,操作系统,总线接口,系统集成。其实细心的可以发现,在 CSDN的论坛分区上就已经体现了,除了系统集成只是在嵌入式系统大区里面体现了下,其他的都有明确的板块对应关系。但是学习之路并非如此学习,而是分为几个层次,据该工程师多年对业内的观察,将嵌入式工程师的技术范围分成下面几个等级:1.初级:8051或其他单片机,UCOS,I2C,SPI,UART。汇编和C能力一般,系统集成能力弱。2.中级:在初级的基础上,ARM/MIPS,其他一些RTOS并了解Linux,SDIO,USB。汇编和C能力不错,有一定系统集成能力。3.高级:主要是对中级的进阶,这一个层面已经不在于掌握具体的技术,而是掌握当前流行技术中的基本思想和构成方式,所以任何流行的技术,对于这一阶段来说,都是手到擒来的。而由于掌握了所有技术的原理,系统集成能力也是超强。对于初级和中级,都有明确的标杆,在此阶段,工程师还是在入行阶段,评判标准往往是掌握了什么技术,而学技术的最高境界是需要掌握了技术的构成和模式。拿个很简单的例子来说,所有的接口技术,其实都可以归纳为几个要点,单工还是双工、如何发起传输、如何应答、如何报错、如何纠错、如何在其基本传输之上建立高级的应用。只要掌握这些,接口技术便不攻自破。在系统的设计阶段,系统分析师将根据需求确定系统的硬件的基本构成,根据系统的需求选择使用那种处理器,使用哪种操作系统,使用那些软件开发工具。系统分析师往往是较为完整的参与过嵌入式系统设计的全过程,对于系统应用的行业较为了解,对于嵌入式系统本身的开发流程十分清楚的人。系统硬件设计人员需要根据系统分析师的设计结果,进行硬件原理图的设计。通常需要硬件设计人员熟悉嵌入式系统的硬件构成。硬件设计人员需要了解常用的嵌入式系统处理器,存储器(Flash,SDRAM),以太网MAC芯片,音频/视频编解码芯片,电源管理芯片,总线接口电路 (USB,PCI),液晶显示模块,可编程逻辑器件(FPGA/CPLD),无线网络通信模块(Bluetooth,WLAN,GPRS)等硬件电路构成元素的基本工作原理,连接使用方法,使用注意事项,基本调试方法等内容。在网络上能找到很多公司的评估板的原理图,对于这些原理图要仔细研究,摸清处理器同存储器,网卡,液晶模块等器件的连接方法和原因。通过对这些电路的研究,能够较快地了解整个嵌入式系统的构成,这些电路同实际产品中的电路虽有一定差别的,特别是对于手持设备,但这些差别不影响初学者学习嵌入式系统的硬件设计基本构成。现代嵌入式系统的开发同传统8位单片机系统的开发相比,一个显著的区别就是嵌入式操作系统的广泛使用。在拿到焊接完毕的电路板,并进行基本的测试后,就要进行驱动程序和操作系统的移植工作了。首先要进行的Bootloader的编写和移植工作。Bootloader相当于PC系统的BIOS。对于有些嵌入式操作系统,如uc/OSII没有bootloader同样可以开发调试。但是对于WindowsCE和嵌入式linux系统而言Bootloader就是必须的了。嵌入式系统的应用程序开发同在PC 机上开发应用程序的区别不是很大。对于Windows CE系统而言,Microsoft已经提供了较为完善的开发工具。开发人员可以使用Windows 的C# 语言直接在PC上进行应用程序的开发和模拟调试,也可将目标系统同PC 机相连,进行联机调试。现在有很多系统支持J2ME(JAVA的嵌入式系统版本) ,这使得JAVA 在嵌入式系统应用开发中占有较大的优势。另外,作为专业的嵌入式系统软件开发人员,还需要充分了解面向对象技术和设计模式等方面的知识,当然作为初学者可以先不深入研究这方面的内容。同学们在学习嵌入式的过程中要不断进行知识的探索,在一步一步学习之后就会有一个很大的进步。目前的嵌入式开发更倾向于智能化,也就是我们所说的智能硬件(硬件+软件),从现在各种前沿的嵌入式产品来看的确如此,嵌入式产品的一个发展趋势是更倾向与自动化控制和人机交互,而不是强调“算法”这一块。
要区分你仅仅是一名嵌入式工程师而不是算法工程师,什么一大堆“人工智能”、“阿尔法狗”、“深度学习”、“神经网络”都不需要深入理解,那是研究生、博士生做的。
笔者并不是说你的能力不足,而是“术业有专攻”,这并不是一名嵌入式工程师的工作量,你需要做的仅仅是与他们的“云端大脑”进行对接,调用他们API就完事了。
由于人工智能、深度学习、神经网络、区块链、大数据等先进学科的崛起,很多人都产生质疑:“嵌入式还有发展前景吗”?
这个问题我在这里可以很肯定地告诉你:“嵌入式有很好的发展前景,前沿嵌入式技术即将崛起,或者说已经崛起”。
的确,人工智能、大数据这些学科会给嵌入式带来冲击,就目前来看,大学生更倾向与python编程语言、机器学习这一块,而嵌入式学者的确比往年有所下降。
但学者少了并不代表他的需求就少了,并不代表他的薪资水平下降了,目前的一个嵌入式技术更倾向于与智能学科相结合的趋势。
以百度机器人为例,机器人的核心是大脑,即是“数据和算法”,但机器人大脑想机器人身躯能够像人类一样活动,能说会道,行走自如,那么就必须得依靠嵌入式技术。
这就是我所说的嵌入式+智能学科应用,从长久来看,嵌入式只会越来越火,智能学科的崛起必定带动新型的嵌入式技术发展。
合格的嵌入式开发者应是多面手,应具备各方面的技能,包括从硬件到软件到应用(电力系统保护,自动化,控制,人工智能,机器学习等),从单板到系统整机,从技术到管理,甚至吹拉弹唱也需要了解一点,做项目管理时可以提升团队气氛和丰富业余生活。
嵌入式知识和技能体系庞大,样样精通者凤毛鳞角,一般都是一专多能,各类技能多少都能说上一点。按照嵌入式开发层次关系,整理嵌入式开发者技能大全如下。MCU架构及开发。MCU,俗称单片机,把中央处理器(CentralProcess Unit,CPU)的频率和规格作适当删减,并将内存(Memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD等驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同的组合控制。常见的MCU包括Intel的C51/C8051F系列,Motorola的68K系列,MicroChip的PIC系列等。MPU架构及开发。MPC指微处理单元,一般不带外围器件(如存储器阵列等),是高度集成的通用结构的处理器。典型如Intel的X86系列、飞思卡尔的PowerPC系列、P1系列,ARM架构处理器等。DSP架构及开发。DSP采用哈佛结构,同一个时钟周期内可以多次访问存储器,多级指令执行流水结构提高了系统的执行效率,DSP芯片常用于复杂的运算,典型如TI的TMS CXX系列,ADI的SHARC系列、Blackfin系列等。CPLD&FPGA作为专用集成电路(ASIC)领域中的一种半定制电路而出现,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。通过可编程逻辑单元实现各种算法和组合逻辑。基于CPLD&FPGA实现程序开发。包括RTL门级逻辑图设计,VerilogHDL程序设计,VHDL程序设计,XILINX编译软件使用,ALTERA编译软件使用,低速串、并行通信控制器设计,高速串行通信控制器设计。包括模拟电路和数字电路设计,包括器件DataSheet阅读,原理图及PCB阅读等。Cadence,Altium,PADS,DXP等。Multisim,Pspice,ADS,MATLAB等。电路防护类器件,阻容器件,电感磁珠,DC/DC,晶振,二极管,三极管,稳压管,光耦,MOS管,IGBT,继电器,开关和按键,LED指示灯,PCB板用接线端子,交流互感器等。AD,逻辑器件,DA,运放,计数器,触发器,锁存器,译码器,SRAM,SDRAM,DDR,FLASH,EEPROM,接口芯片等。物料的构造与工作原理,金相切片,显微观察,PCB形变测量,HALT实验技术,可靠性计算等。元器件测试方法,模件、整机测试方法,元器件、模件、整机测试问题分析,国标、行标理解,EMC问题分析和解决等。了解操作系统原理及基本编译原理。操作系统提供CPU资源管理、外设驱动、内存管理、线程/进程管理、文件系统、网络通讯、安全机制、界面管理等。嵌入式实时操作系统的基本特征是事件响应的快速性和确定性,在嵌入式系统中广泛应用。通用操作系统包括windows、Unix、LInux等。目前在嵌入式领域广泛使用的操作系统包括:嵌入式实时操作系统µC/OS-II、嵌入式Linux、WindowsEmbedded、VxWorks、FreeRTOS、QNX等,以及应用在智能手机和平板电脑的Android、iOS等。VxWorks操作系统驱动开发,Linux移植,Linux开发,单板DTS配置以及根文件系统生成(Buildroot),U-BOOT移植和开发,C语言开发,Python语言开发,Makefile编写,GNU编译器及工具链的使用,Linux操作系统使用。具体包括以太网驱动,SPI驱动,I2C驱动,文件系统驱动,CAN驱动等。面向对象,设计模式,UML,嵌入式多任务开发,重构,多核开发等。了解常用的开发过程,如敏捷编程,测试驱动开发等。熟悉开发语言,包括:C,C++,C#,QT,Python,JAVA,等。熟悉WEB 开发,开发规范等。常用数据结构和算法,图论算法,数字信号处理算法,小波算法等。计算机网络原理,TCP/IP协议原理及分析,IEC61850规约(建模,MMS,SV,GOOSE等),103规约,104规约,DNP规约,Modbus协议,物联网Zigbee协议,bluetooth,wireshark等报文分析工具,环网HSR协议,网络安全等。数据库原理与设计,SQLite/Access/MySQL/SQLServer/Oracle/大数据hadoop等。Zinc,UGL,QT,SVG,MiniGUI等。电力系统常识,继电保护知识,测控知识;智能变电站网络架构,网分,故障录波器,保信,远动等。软件测试基础,61850规约测试,网络测试,时间管理测试,应用功能测试(继电保护功能等),ATS测试开发与使用,Labview测试程序开发等。配置管理如版本管理工具Git使用等,项目计划与任务划分,项目进度跟踪,项目协调等。
定期以通俗易懂的方式分享嵌入式知识,关注公众号,加星标,每天进步一点点。
声明:
本号原创、转载的文章、图片等版权归原作者所有,如有侵权,请联系删除。
关注、点赞、在看、转发,支持优质内容!