查看: 637|回复: 0
打印 上一主题 下一主题

[提问] 入坑嵌入式开发多年!一位资深工程师谈怎样才能保证自己不被历史洪流冲走.... [复制链接]

xyd2018 (离线)
积分
694
帖子
135
跳转到指定楼层
楼主
发表于 2018-9-25 14:39:04 |只看该作者 |倒序浏览
关键词: 嵌入式、stm32
我时常在想,现代社会发展变化速度之快超越了很多人的认知。罗胖子说跟不上时代要交认知税,很有道理。半导体和IT行业又是旋涡中心,发展更加快,其实想想其他行业的创新(美团外卖、滴滴打车、微信社交、淘宝京东电商,以及最新的新零售自动售货机、自动驾驶汽车等)本质上都是半导体行业的创新驱动的,都要靠先有芯片,先有配套的软件资源和开发人才,才能有人在这些行业创新。

入坑嵌入式开发多年的我,面对芯片及其相关的软件开发技术的快速发展变化,经常会去思考,这些发展变化的内在推动力和外在合理性在哪里,这些发展变化对我们有哪些启发和引导,身处旋涡中心应该何去何从,才能保证自己不被历史洪流冲走,才能不断提升自己的价值。


单片机
单片机是中文名,对应的英文名称是“Single Chip Microomputer”,很多人可能奇怪平时不是都说MCU(Micro Control Unit)吗?其实MCU准确翻译过来应该叫微控制器,现在很多中文书籍都用这个词,不用单片机了。因为单片机这个词是很多年前的概念了,在那个年代半导体工艺还在起步阶段,集成能力很差,往往是CPU一个芯片,SRAM一个芯片,Flash一个芯片,需要中断的话又得有个专门处理中断的芯片,所以一个完整可用的计算机系统是很多个芯片(Chip)做在一个PCB板上构成的。

单片机呢?就是在一个芯片(Chip)上集成了CPU、SRAM、Flash及其他需要模块,在一个Chip上实现一个微型计算机系统,所以就叫Single Chip Microcomputer,也就是单片机了。其实从这个角度来讲,单片机这个词现在已经没意义了,因为现在的半导体工艺早就很厉害了,现在你买到的所有都是“单片机”,根本不存在分离式的所谓“多片机”。而且现代的单片机不但集成了CPU、SRAM、Flash等微型计算机不可少的部件,而且大多集成了很多内部外设,如Nand控制器、LCD控制器、串口通信、定时器、RTC等等,所以现在的单片机其实应该叫SoC(System on Chip)。

英文是很准确的。这里有好几个词你可以体会下各自含义:microcomputer、computer、system、microcontroller。不严格区分的话这些词很多时候可以互相替换和通用的,但是严格说其实各自有不同代指的。譬如computer,指的就是电脑,你可以理解为就是电脑,譬如笔记本、台式机这些。当然很多年前的电脑很庞大很笨重,所以computer就是指的这种有机箱外壳,有键盘鼠标,很庞大笨重,通用性强的电脑。而microcomputer指的就是单片机这类东西,它也是一个独立的电脑系统,有CPU和内存和外设这些,能跑计算机程序。但是他相对于computer来说体积很小,而且不是通用的而是专用的,所以叫microcomputer。system呢?更倾向于整个系统,也就是说system=microcomputer+各种外设。简单理解就是,当串口、LCD控制器等模块进入了Chip内部时,整个microcomputer就成为system了。所以其实system才是更有意义,更适合现代单片机芯片的一个名字。所以现在我们都把芯片叫SoC,这个名字更有价值。那microcontroller呢?现在很多单片机厂商都把自己的单片机叫microcontroller(微控制器),其实我个人理解,觉得microcontroller的重点在于controller,也就是说他们想强调这个chip中集成的system是一个controller,擅长控制。而不是一个DSP(擅长运算)。


嵌入式
嵌入式的全称是嵌入式系统,英文是Embeded system,所以可以看出嵌入式是一个system。为什么叫嵌入式呢?这里的嵌入指的是我们把这个system(硬件上表现为一个Chip)嵌入到某个设备中去。譬如冰箱的板卡上的芯片就是一个嵌入到冰箱中的system,负责控制用户按键、冰箱照明灯、制冷系统等。可以看出,嵌入式系统这个名字主要是从芯片在使用时的组织形态来命名的。所以从这个角度讲,只要是被嵌入到设备中的芯片都可以被叫做嵌入式系统。

那这个范围太宽了,说真的你很难找到不属于嵌入式的system······所以我经常觉得嵌入式这个名词根本是废话,根本没意义。好在这个理解只是广义上的嵌入式的定义,但是我们平时讲嵌入式大多时候是从狭义上理解的。

狭义上讲,嵌入式是为了区别于单片机。我们经常把芯片中不带MMU(memory management unit)从而不支持虚拟地址,只能跑裸机或RTOS(典型如ucos、华为LiteOS、RT-Thread、freertos等)的system叫单片机(典型如STM32NXP LPC系列、新的NXP imxRT1052系列等),而把芯片自带MMU可以支持虚拟地址,能够跑Linux、Vxworks、WinCE、Android这样的操作系统的system叫嵌入式。所以linux WinCE等也常被叫做嵌入式操作系统,就是这么回事。你仔细回顾下,其实大部分人在讲单片机和嵌入式时都是从狭义角度出发的,并非广义。



单片机的技术和市场状况
单片机是出货量最大的一类计算机。这个很好理解,因为单片机用途太广泛了,所有家电内置的控制系统几乎都是单片机的,这个数目就很惊人了。还有各种公共设施,工厂自动化设备等几乎也都是单片机控制的。单片机的厂商和品类也是非常多,我下面列举几类常用的。

· 8位和4位机。这类单片机性能低配置低,但是优势是价格便宜。所以很多低端家电产品都会用到,小家电是这类单片机最大的市场。为了降低成本,这类单片机很多只能用汇编编程(当然近几年很多也提供了C编译器),很多芯片采用bounding封装(就是芯片内核直接贴在PCB上然后用黑乎乎硬胶黏住,大家玩过LCD1602的看那后面那个圆盘型黑色的就是)。做这类产品的以前都是台湾一些小芯片厂商。这些年中国大陆也涌现了很多这类芯片厂商,这些单片机行业大多对标某个具体应用领域,对行业需求很熟悉,直接推出适用这个行业的解决方案。外行的人可能根本都没听说过这种单片机的型号和相关信息。总的来说,这属于比较低端的行业,不太建议大家学习和进入。尤其现在中国在搞产业升级,落后的传统家电产品不断降价还卖不出去,相反各种高端功能和外观的“产业升级”型家电产品利润很高。所以这种适用于传统老旧电子产品的芯片和技术其实并不值得去投入。

· 51单片机。其实51单片机也是8位机,之所以单独拿出来说是因为51单片机实在太出名了。实际上当年单片机百家争鸣的时候(大约1980年代吧)51单片机只是其中一种,还有很多其他很厉害的,可惜都被时间给雨打风吹去了。51单片机之所以出名并活到现在,是因为Intel后来开放了51内核的版权,所以很多公司很多人可以毫无顾忌的使用它而不担心付费或版权风险。实际上到了现在(2018年),51单片机已经是很老很没有技术优势的解决方案了,但是为什么还在大量使用?主要有以下几个原因:一是大量存量项目和存量开发者,这些人很熟悉51单片机,甚至很多老工程师可能只会51单片机,很多老的项目也不可能再去重新开发所以沿用了51单片机。二是51单片机也够便宜,很多对性能没有过多要求的产品干脆就用51也挺好。三是51内核开放,所以很多需要内置单片机核的SoC(譬如很多电容触摸屏芯片,很多指纹识别芯片等)就会选择用51核,不要钱还够用嘛,不选这个选谁。很多同学问我还要不要学51单片机?我认为还是要学。一个原因是51单片机的开发用到的技术技能在开发别的单片机时照样有用,所以学了51将来再学其他的也会快很多,时间不会白花的。另一个原因是确实有时候实际开发也会遇到用到51单片机的,所以学会了也算是个拿得出手的技能。所以如果你要学习单片机开发,从51单片机入手绝对不会错。但是要记得不要沉迷于51了,要迅速学会51单片机后,迅速继续学习更现代更实用的其他单片机(譬如stm32)。很多人学会51后就不动了,这就好像幼儿园毕业就不继续读书了一样,是不对的。

· STM32单片机。终于到了STM32这个当红辣子鸡了,ST于2007年发布了第一款STM32,至今已经11年了。STM32是ARM Cortex-M内核的单片机,实际上同样使用ARM Cortex-M系列内核的单片机还有很多(譬如NXP的LPC系列,原Freescale的K60系列,台湾新唐的M051系列,国内如兆易创新的GD32系列等),STM32只是其中的代表作而已。ARM这些年风头很强,在application级别的SoC中大胜Intel,现在手机行业的芯片都被ARM吃掉了,MIPS之类的更是被压的生不如死。在单片机领域,ARM的Cortex-M系列(M0、M3、M4、M7)也是大获全胜,很多半导体厂商都放弃了自己原来的架构转而做ARM内核的单片机了。怎么说呢,个人觉得ARM内核的单片机很适合当前时代,尤其STM32这种,不管硬件配置还是开发工具都深得市场认可,普及度越来越高。强烈建议大学学单片机就学STM32,会玩STM32很有价值。至于GD32之类国产的类似STM32的单片机,我认为后面会越来越强,甚至会主导市场把洋品牌赶出中国。这些芯片的开发方式也很类同于STM32,所以会了STM32开发很容易切过去,不用担心。
· 其他单片机。我指的是PIC、ATmega、MSP430、STM8之类的,这些不是很熟悉所以不予详细论述。总的来说,这些单片机性价比都不错,在各自领域都有一定竞争力,但是还是不如STM32使用领域宽广。所以除非是公司研发用到,否则不建议主动学习。

· 高性能高价格单片机。这里我特指的是如STM32F7、STM32H7、NXP imxRT1052之类的单片机。这类虽然是单片机,但是性能比一般单片机强劲很多,外设也复杂很多,甚至需要外接SDRAM来提供更大内存,外接SLC Nand或Spiflash来提供存储。同时从价格角度讲这些单片机大多在人民币30元以上,甚至高达100多元。这些真的是单片机中的战斗机,价格都能吓死人了。对于这类单片机,我个人其实很不看好。其实写这篇长文,就是想解释我为什么不看好这类单片机。感兴趣的同学可以继续看下文分析。


嵌入式的技术和市场状况
·
嵌入式领域目前最火的就是ARM+linux和ARM+android。
芯片都是基于ARM的,低端的有ARM9、ARM11,高端的有Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A53、Cortex-A57等。从单核心到双核心、四核心、八核心都有。厂商也一大堆,国产进口台产等都有。覆盖面也广,消费级、工业级、车规级都有。
·
嵌入式级别的ARM因为有MMU所以可以很好的跑复杂OS,因此虽然芯片本身也可以裸机运行,但是基本没有人用这类芯片来跑裸机或者RTOS的。都会上操作系统。简单说,如果产品不需要华丽美观的人机界面就上linux(譬如路由器、网络摄像机),如果需要人机界面但是界面简单注重功能和稳定性,那就上linux+QT(譬如工控HMI、电动车充电桩、停车场显示),如果产品很注重人机交互的用户体验,那就上Android(譬如智能手机、智能电视机、游戏机等)。

总的来说,嵌入式系统的复杂性高、开发难度大、学习曲线长。因为软件上的复杂性,导致出bug的可能性大。一旦出bug查找起来也更加需要技巧和经验。所以很多公司用嵌入式linux或android做产品问题很多,这一方面和开发者的技术能力有关,另一方面和公司不能花时间和成本去潜心把产品做稳定做成熟有关。
以下课程可免费试听C语言、电子、PCB、STM32、Linux、FPGA、Python、安卓等。
想学习的你和我联系预约就可以免费听课了宋工QQ3524659088 Tel/V17317951908


您需要登录后才可以发表评论 登录 | 立即注册

回顶部
网站地图