搜索

时间飞逝!老嵌入式er聊聊开发心得和行业体会

[复制链接]
730|4
 楼主 | 2020-3-30 17:24 | 显示全部楼层 |阅读模式
Hi,同学们
熊猫老师来啦~
今天给大家分享一些老司机的经验
171965e81baac933c8.png

01
嵌入式工作会越老越吃香吗?

事实上电子技术更新换代非常快,5年前如果你是一名电子设计高手,如果5年中你再没有接触过电子设计,那5年后你就成为一个菜鸟了。做嵌入式一样,并不是越老越吃香,而是看你是否能不断学习新的知识,接受新的技术和设计理念。

虽然如此,我们也可以从老嵌入式开发者学习一些经验。废话不多说,进入正题吧。


我是97年毕业的,做了两年的电子设计与开发,做过电路原理图和PCB板设计。2000年进入软件行业,六年多的时间里,差不多做过整个操作系统的组件。一开始用的是uC/OS RTOS,第一次做的这个产品是一个DVR,CPU用的是AMD的SC520,是一块x86的处理器。因为公司小,所以整个DVR的嵌入式软件就我一个人做,对于我来说是一个 难得的机会和挑战。我所做的包括:

1) 熟悉CPU。x86中存在实模式和保护模式,CPU一上电后进入的是实模式,要进入保护模式则需要做一定的设置,最后做一个长跳转,就能进入保护模式。对 于这一处理器的熟悉和了解,使得我对于处理器有一个很好的认识。此外,明白什么是芯片组、PCI的原理和配置方法、SDRAM如何配置、IDE的 PIO模式是如何工作的,等等。

2) 熟悉uC/OS 。RTOS并对其进行扩展。理解任务是如何实现的、任务是如何被调度的、Mutex和Semaphore是如何实现的、对处理器进行开关中断的目的是什么且 要注意什么,等等。对于RTOS的扩展则包括实现了一个采用malloc/free进行内存分配的堆管理模块,这一管理模块是参照XINU操作系统来实现 的;对任务调度部分进行修改以方便中断服务程序的管理。

3) 将MINUX操作系统的文件系统移植到我们的DVR上。MINUX中采用的就是UNIX中的i-node的方式来管理文件的,这种方式在现在的Linux 中也能看到。由于MINUX的文件系统是针对小型存储设备的,所以对其代码要进行修改,以适应当时所采用的上G的硬盘。

4) 将XINU中的TCP协议栈移植到DVR上。我记得很清楚的是,当时对于TCP的滑动窗口的调试以及校验和的调试花了不少时间。

可以说这一时期的工作,使得我对于操作系统的原理和实现非常的熟悉。还有,我在这一公司使用过了逻辑分析仪去分析总线信号以解决问题,这些都是非常好的经历,都有助于提升对计算机系统的理解。

2003年我加入了UTStarcom,因为前一个项目的经历,当时进这一公司时觉得自己很牛。但很快我发现,嵌入式系统中还有很多是我要学的,我还嫩呢。比如:

1) 第一个挑战是处理器,当时用的是PowerPC8250。对于处理器,我花了不少时间去读相关的资料。总的加起来,其手册超过两千页,而且还是英文的。为了使得自己更加的熟悉这块处理器,我前前后后对这些资料完整的读了三四遍。

2) 当时采用的是RTEMS操作系统,这一系统就是一个类UNIX的操作系统,早期是美国军方使用的,后来变成了开源项目。在这一操作系统上的工作经历让我一 下子意识到了自己的一个问题,那就是:以前的工作只是技术性的不具备系统性。比如,如何将一个操作系统作为一个系统将其设计得更好、驱动程序如何方便增加 以及扩展,等等。这一切说到底是自己的设计能力还是不足。我花了很长的时间来研究RTEMS操作系统的实现,这对于提升自己的设计能力有很大的帮助。

3) 对于编译器和C语言的理解不深。比如什么是ABI(Application Binary Interface)?后来知道Stack Frame和程序的调用栈的管理都与ABI有关系。

在UTStarcom工作的初期,所有与操作系统相关的问题都是由我来解决的。此外,在我的经理的支持下,我还做过了一个更新版本RTEMS操作系统的移 植,当时,UTStarcom的RTEMS操作系统的移植是在新泽西完成的,我不知我是不是UTStarcom在中国第一个做这个操作系统移植的。当时, 我在做移植时还碰到了一个与编译器相关的问题,还找过WindRiver做支持。因为我们用的是WindRiver的调试器,当时怀疑是调试器有问题,最 后发现是RTEMS的Tool Chain有Bug。UTStarcom的中期,我们将我们的应用程序移植到了VxWorks上,所以后来我对于VxWorks也很熟悉。后来还做过了一 个ADSL接入的项目,采用的还是VxWorks以及PNE(Platform for Network Equipment),处理器用的是Intel的XScale IXP425。2006年5月我离开了UTStarcom。

应当说,前面两个公司工作经历是我很宝贵的财富。一方面完成了从小公司到大公司的转变,说实在的在进UTStarcom时,还是很有压力的。什么都是新的,新的行业、 新的产品,当然对于我来说是直接工作内容的变化,新的处理器、新的操作系统、等。前两个公司有一个工作情景我一直很怀念,那就是:我是一手拿示波器,一手 拿电路原理图进行软件调试的。

好了说了这么多,现在我想说说我对于嵌入式系统开发的感受和看法。在此,我想先说说什么是嵌入式开发,这一 点我看过不少对其的定义。先抛开别人的定义,我想说说我的观点。

有不少工程师的工作是写运行在RTOS之上的应用程序的,但他(她)其实根本不用接触硬件 相关的知识、不用接触什么是中断、也不用考虑任务的优先级,对于这些工作我不认为是嵌入式开发,其实,说到底只是采用了新的一套API(即RTOS的相关 函数)进行编程。嵌入式开发我认为至少要与硬件和RTOS打交道,对一操作系统的原理和实现很清楚。从我的角度来看,如果一个写驱动的人只知道驱动相关的 内容,而对于操作系统的机理并不是很清楚,那也不能算是嵌入式系统开发,就是驱动开发。下面是我对于嵌入式系统开发的一些看法。

1) 嵌入式开发对于提升我们的系统知识有很大的帮助,尤其是操作系统的知识。嵌入式系统开发对于我们的知识面要求非常的广,且要有一定的深度。在做嵌入式开发之前,我是做Visual C++开发的,当我做过嵌入式开发后,我就能明白在Windows桌面上双击鼠标时,后台有什么事情发生了。比如,我能想到后面有一个Loader将文件加载到内存,并最终运行程序。虽然,没有做过嵌入式开发也能想到这一点,但能看到的深度是不同的。

2) 当我们对于操作系统的原理和实现非常熟悉后,嵌入式系统开发的工作相对简单。因为,操作系统的概念已经很成熟了,而现在的嵌入式系统就是将现代操作系统的 技术运用到嵌入式系统。这里说的简单,主要是强调其需求相对的稳定、功能相对的单一。软件设计真正复杂是做应用,应用开发是我们真正能发挥设计能力的地方。

3) 嵌入式系统开发经验对于提升我们解决问题的能力有及大的帮助。因为我们系统性的知道了软件是如何被组织在CPU上运行的,这对于我们分析和解决问题很有意义,对于自己解决复杂问题的信心也很有帮助。

4) 具备一定的硬件知识对于嵌入式开发大有裨益。比如,我们要明白什么是片选,什么是3态,什么是I/O,如何看时序图等等。最好还得会使用相关仪器,比如示波器、逻辑分析仪。

02
30+岁入行嵌入式软件开发晚不晚啊?


“对一般人来说太晚了,就取决于LZ是不是一般人了。如果真想学,我建议从最新的技术上入手,比如蓝牙5.0、NB-IOT。”

“你的ID已经告诉你答案了,不是吗?”

“是有点晚,若做个熟练的工程师,努力了没有问题,若涉及深点的东西,有点累。”

“33,不晚,薪酬上,要求不高,性价比高,一样有卖点。大公司,去不了,就去小公司混呗。”

“这年龄,不建议转入嵌入式了,除非特别爱好。如果为了生活,不如考虑其他挣钱的门道”

“应该会比较困难,现在招人的很多都有年龄要求了,我身边就有一个和你差不多的同事,努力是很努力,但是他没接触过这行,转行过来的,现在他跟我说做项目感觉力不从心,他也是出于自己的兴趣想做这行的,反正就是很辛苦。”

“楼主,我离开行业13年,还是把技术捡起来了。看你恒心和方法啦!”

“晚,别乱转,自己本行都没玩精通,随便换行业,年级这么大了,建议本行继续往精通了搞”

“33岁了什么赚钱就去搞什么,搞什么不好非得搞这个”

“觉得软件这块,真是拼不过年轻人啊,比如公司平时的加班,比如轨道行业的出差加班调试到半夜等等~~~~坑慎入~~”

“如果楼主硕士毕业不建议做这种简单的嵌入式设计,可以上一点有算法的软件设计。当然也是嵌入式,只有这样才能发挥你硕士的数学功底扬长避短。做单片机嵌入式开发里面我“感觉”80%的就是做点简单的蝶代码,没有意义,稍微好一点的可能也就是在单片机上面跑一个ROS系统。但是我知道玩单片机想要上一个台阶的话最好是能玩一点算法在里面的。至少能熟练地调用很多数学函数,简单来说比如软件的二阶滤波,FFT、带通等一些基本的函数。现在嵌入式的图像识别是一个很不错的发展趋势,这方面对数学功底也相对起点比较高,楼主如果单纯只是不想自己报废了想玩点东西可以考虑这方面,在ARM里面玩玩感觉会其乐无穷。当然我也是纸上谈兵,我自己是什么都不懂。”



“个人认为,搞嵌入式太费钱,各种模块板子要买,不然没现象,程序没问题,实际却不能用,要各种优化。还是去干管理吧。”

“个人觉得,33岁学习linux确实比较晚
(1)如果是特别特别感兴趣,可以学习,
(2)如果回二线觉得找工作难,可以学习,提高筹码和机会!”

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

03
如何不被历史洪流冲走....


单片机
单片机是中文名,对应的英文名称是“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叫单片机(典型如STM32、NXP 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做产品问题很多,这一方面和开发者的技术能力有关,另一方面和公司不能花时间和成本去潜心把产品做稳定做成熟有关。


嵌入式和单片机的真正区别

其实分析到这里,大家也知道了嵌入式和单片机的真正区别,那就是有没有linux或android这类复杂操作系统。

单片机不是裸奔就是RTOS,其实玩过RTOS和linux的同学都知道,RTOS虽然也叫操作系统,但是和linux这种根本不是一个级别。差远了,更不用说android了,android里随便拿出来一个模块代码量都比一个完整的RTOS都庞大,都要复杂。所以有没有linux/android这类复杂OS对开发来说真的很不一样。

譬如从C语言角度来讲,我的《嵌入式linux核心课程》第4部分《4.C语言深度解析》这个课程,就是专门针对嵌入式linux开发中C语言功力不足的人推出的。很多做了多年单片机的同学看了后都感慨,真的是不做linux不知道C语言水深。结构体和指针这些元素在单片机编程中完全体现不出来魅力,但是在linux内核中却得到了完美的发挥和释放。不去真正研究,实在很难体会出那种美感和震撼。


嵌入式和单片机的交集

嵌入式和单片机有没有交集呢?这里说的交集意思是:某些产品既可以用嵌入式来解决,也可以用单片机来解决。

以前是没有的。你想想一般单片机几块钱十几块钱,而嵌入式系统SoC加上DDR和Flash至少几十块,怎么可能有交集。就算单片机能做的事你嵌入式也能做,但是我十几块钱能搞定的工作凭什么要花几十块上嵌入式呢?所以以前这2者没交集。根本不是一个档次范围内的事儿。

但是近两年情况发生了变化。首先是很多高端单片机的配置和价格越来越高。譬如2017年10月发布的NXP imxRT1052系列单片机,号称跨界处理器。为什么叫跨界?跨的是哪两界?

我们知道单片机嘛,就要单芯片提供整个system,简单说至少cpu、sram、flash这三大件不能少,要不然根本无法独立运行嘛。所以你看不管是51单片机还是STM32都是内部有CPU,有SRAM,有Flash的,这就是典型的单片机。而嵌入式SoC不同,譬如S5PV210内部只有CPU和少量SRAM,它要正常工作需要外部集成DDR SDRAM和Flash(EMMC)。所以嵌入式的system不能在一个chip上,一般典型的嵌入式系统的system由一块核心板构成,这块核心板上集成了SoC、DDR SDRAM、Flash、电源模块等,这叫嵌入式系统。而所谓跨界处理器,跨的就是单片机和嵌入式这两界。这个imxRT1052内部集成了CPU和SRAM,但是没有Flash,它需要外部提供独立的Flash芯片才能组成一个system。所以这东西既不是典型的单片机也不是典型的嵌入式,但是既像单片机,又像嵌入式,所以NXP说这个是跨界处理器。甭管好不好用,名字听起来酷酷的。

顺便多说一句,NXP为什么这么设计?其实是因为单片机内置Flash都很贵,imxRT1052为什么能比同样性能的STM32便宜那么多,主要原因就是因为他没有内置Flash。所以很多人都说ST落后于NXP了,其实没有。只能说NXP这个设计在单片机界是一种创新,对比来看显得STM32F7、STM32H7性价比太差了。不过实话实说,STM32的F7和H7确实性价比很垃圾,我都不知道就一个单片机卖一百多是准备上天?谁给ST的勇气这么定价的,梁静茹吗?

算了,懒得吐槽F7和H7了。就说这个跨界处理器imxRT1052吧,这东西主频有600MHz,有消费级和工业级,带各种外设(反正你能用到的基本都有了),可以带最大分辨率1024*768的TFT LCD(当然了需要外接SDRAM作为显存)。这东西相对于普通单片机来说就是神一般的存在啊,一般玩单片机的看到这个数据吓得直接就跪下叫爸爸了。再说价格,这东西官方公布的批量价格是*币30元左右。想一想感觉性价比爆棚啊。其实STM32也没那么弱,F7和H7的主频虽然没有600MHz那么变态,但是H7的性能整体比RT1052并没有太大劣势。就算不叫爸爸一声大哥总逃不了。之所以F7和H7没掀起大浪关键还是价格太吓人了,一般人听说100多直接心里骂娘转身走人了,根本不想了解你的性能。而imxRT1052的30元确实很诱人,听起来似乎真的是高性能低价格了,很多人甚至据此判断NXP要“干死”ST了。


跨界处理器的尴尬

高性能跨界处理器初看似乎很不错,实际上并没有那么容易成功。原因就在于这种高性能单片机实际上和低性能高性价比的嵌入式linux解决方案比并没有优势。

是的,很多人觉得600M主频的单片机才30块很便宜很厉害。那是因为你不熟悉嵌入式的解决方案。实际上imxRT1052单芯片是不能很好工作的,他要实现高性能至少需要外置Flash和SDRAM,就算只是1Gbit的SLC Nand和32MB 的SDRAM,再加上RT1052BOM成本也在50元左右了。再加上RT1052虽然号称批量30元,但是实际上小批量拿货价都在40-50元,所以目前市场上RT1052的核心板售价都在120-150元之间了。这个价格其实并不便宜,有很多嵌入式linux的解决方案都比这个性价比高。

譬如NXP的imx6ul,内置Cortex-A7单核心,最高主频1.2GHz,也是工业级,各种你能想到的外设都有了。标配256MB SLC Nand和256MB DDR的核心板,市场最低售价119元,比RT1052还低一些。

实际上还有性价比更高的方案,譬如我们深创客推出的NUC972牛顿板中使用的新唐NUC972方案,内置64MB DDR,外部配置1Gbit SLC Nand。主板批量可以做到100元内。性价比完胜RT1052这类高性能单片机。

很多人可能会说,我不会嵌入式linux开发,我只会单片机开发啊。所以你linux的方案性价比再高跟我没关系,单片机的才跟我有关系。我想说这绝对是一种误解,百分百的误解。为什么?

单片机就三个字,你别觉得叫单片机的都是一种东西。单片机和单片机是不一样的,你觉得主频600MHz的单片机带1024*768分辨率的TFT LCD,它的开发方式和难度会和10块钱不到的STM32F103一样?软件开发是跟着硬件走的,什么样性能的硬件就应该配套什么样的软件开发方式和相应资源,也会要求开发者具备某种相应素质。所以不要觉得都是单片机就亲切,就能玩。实际上要把高端单片机完全发挥性能做出好看的GUI并且用到项目中解决掉所有的BUG并不是一件容易的事情。


最后

今天谈的东西都比较浅,主要是讲了下单片机和嵌入式系统的由来和差异。引出了高端单片机(STM32H7、imxRT1052等)和高性价比嵌入式linux解决方案的的一个对比。主要是希望抛给大家一个思考点,引导大家去思考如何分析和评价一款芯片方案,从而在做项目时能够更好的选型适合自己的芯片方案。总的来说,我的观点是:能用几块十几块的单片机就用单片机,如果这些高性价比的单片机不能满足要求非要上几十块的高性能单片机,那你确实应该考虑下是否应该一步到位上高性价比的嵌入式linux解决方案。很多人担心linux不会开发,其实不应该这么考虑。真正沉下去做项目,你会发现用嵌入式linux并没有那么难,而且高端单片机加上RTOS和一堆框架、协议栈之后也不简单。出了问题也不好找。而且嵌入式linux经过多年积累,其方案稳定性大多都不错。而高端单片机的配套RTOS和框架协议栈等中间件往往处在发展初期,往往bug很多。因此,建议大家值得投入时间去学习嵌入式linux软件开发的技能。

04
迷茫期该怎么办?


很多人跟我一样,或者比我还差点呢

即使在工作稳定期的人,也会迷茫,因为Ta总会想,我就这样了吗?难道我要在这一直不变?太可怕了,但是也有很多人可以就这样混混而过,因为选择跨出任何一步具有不确定因素的行动,都需要勇气和冲动,这些很多人就提不起劲,即使是刚刚大学毕业的94后,他们坚持着下班玩游戏、看剧,周末吃吃喝喝。

其实我也觉得,如果没有跟一个优秀的人,或者接触一批优秀的公众号,我也不会改变太大。但是因为我遇上了,一个一直很努力的男朋友,他在学习上和工作上甚至做事上,都成为我的老师和榜样,我害怕自己跟不上他的步伐,所以也只能努力了。

因此,距离会慢慢拉开。

错开负面圈,远离负面人,拒绝负面语

因为近期对在职公司失望,我们员工内部已经是负面情绪高涨。也因为近期在听《高效能认识的7个习惯》,无意间留意其中说到的影响圈和关注圈。他说:我们人的注意力基本在这两个圈内,我们受影响还是影响他人,关注自己还是关注了别人?!这样自问一下,发现近期自己也被潜移默化负能量增多,在工作中也逐渐影响了心情。这是我觉得很有必要改善的。

而且,对于离职这个行为,我这样定义:如果你在一个既不能提高你的生活品质和对未来的展望,那就走吧。

学会总结,记得反思

怎么说,我逐渐觉得,这属于刻意练习的一种,就是对于当下在做的事,会下意识的想有没有意义?能花在这里的时间是多少?比如这些天,我居然喜欢上《火影忍者》,这对于90后,在他们眼里这是90后的童年吧,我居然现在才喜欢看?!但是因为现在在学习测试和C,兼顾还看看其他知识的时候,我不能花太多时间用在追剧,所以,当我打来播放器时,我会下意识的提醒自己:能几节,什么时间必须关掉,做正常的学习或者日常事务。

请相信自己,坚持下去

最近一段时间在大量投简历时,还是石沉大海般毫无动静,离职时间也快到了。不过,目前状态还很好,依然坚定自己的选择,更艰难的时刻还没来,自己暂时不具备开启好运的时刻啊!

最后,我想说的是嵌入式系统开发一旦我们达到了一定的水平后,其实很简单,就是如何去看CPU和相关芯片的Datasheet!

免责声明:整理本文出于传播相关技术知识,版权归原作者所有。

给我们的公众号来个关注呗~

以上内容来源于公众号「嵌入式ARM」
每天教你一个小知识
扫码关注更多


使用特权

评论回复
| 2020-3-31 11:46 | 显示全部楼层
单片机玩的好 一样六  

使用特权

评论回复
 楼主 | 2020-3-31 15:09 | 显示全部楼层
hobbye501 发表于 2020-3-31 11:46
单片机玩的好 一样六

深入研究,都能有所成就~

使用特权

评论回复
| 2020-4-1 09:26 | 显示全部楼层
赞,从头看到尾。感悟很深。

使用特权

评论回复
 楼主 | 2020-4-1 10:04 | 显示全部楼层
光轮TreeOS 发表于 2020-4-1 09:26
赞,从头看到尾。感悟很深。

喜欢听大家的故事

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表