为什么碰到几个做嵌入式开发的人都说做MCU开发没什么意思,要做基于Linux系统的嵌入式开发?
还有。这里其实有一种很狗屎的迷恋。
就是迷恋做上游,比如原厂。比如编译器。
就好像做游戏的人,好像不去做一下游戏引擎就跟不好意思很low一样。
我不是干这行的,但我看过一些相关的东西——因为那时候我很关注游戏类股票。
有一个说法是,国内很多游戏公司都很喜欢自己做游戏引擎,但这东西就像汽车发动机,哪那么好做,哪能这么快有用。
有人(我忘了是不是云风)就说,做游戏的都该好好去做好游戏本身,一个游戏不会因为你用了自制的引擎就牛逼。
其实单片机也是,你别看这东西图里吧唧,好像不值钱一样。
但是你好好做,做好它,让它用起来别让我们这么生气。不至于想砸了它。这比你做什么编译器做什么原厂固件都牛逼。
所以,这种鄙视链。说实话一开始看到评论我都懒得回复。
但想想,既然没事刷知乎,我还是一吐为快。
还原厂是吧?
比如st,坦白说,我觉得它地底层寄存器映射做的很不错,至少比ti曾经总得一套需要各种计算乘除映射的好的多
——违背了对指针不应该施行乘除运算这种目的不明确的操作。当然其实在这里,我认为也不算目的不明。
只是,明明可以不这么做的,为啥非要这么做?
另外,包括我自己在内,最早那几年必须说,是st的常式启蒙了我们如何组织代码。
但是,st库,稍稍写代码的年头长久一些,稍稍对c标准库有更多一些的了解。
你的内心会各种吐槽st库。
说实在话,不开玩笑。
这就是你们的原厂?
还有另一种极端。我曾经开发过da14580,对,就是小米手环用过的那款u,我当时也是在做手环。
那个代码复杂的不像话,理解起来相当困难,厂商的fae自己也承认,并且不是一家这么说,市面上很多用这款u的都这么说。
当然这种复杂是有好处的,是为了更灵活。
简单地说就是,他们的东西很通用很方便设置,配置。
但说实在的,一款mcu而已,而且还是flash ram那么小的一款u——蓝牙soc很多都那样,直到后来m4成了它的新内核。
这种灵活带来的复杂是否有必要,其实是很值得商榷的。
所以所谓原厂,有时候其实真的挺狗屎不如的。
只不过你以为他们很牛逼而已。
补充:
致所有认为2000行python一定比2000行c好写而且更不烧脑筋的人。
你们是根本就不会写东西,实际上我怀疑你们有没有写过2000行python的东西。
因为c的语句,单句本身都很简单。
困难出在2000行组合出来的复杂度。
致所有认为只有写编译器或者什么牛逼库才牛逼的人。
那是因为你们从来就重视过业务逻辑。
只是迷恋名头和权威。
恕我直言——我都懒得和你们说。
补充
有个评论说我怒了是的。我的确怒了!
因为写一个2000行的模块,其所需的脑力和辛苦,并不亚于用python写一个2000行的代码。
但前者很可能只是一个琐碎的逻辑机制实现,后者却极有可能已经是一个可以用的股票数据自动获取并且完成自定义指标运算的半成品。
任谁都会说后者更牛逼,也更实用。
但前者是否就没价值呢?并不是,只是它可能体现在在一个电机控制里,它可以让电机更平稳,更长寿。
所以这里有一个事实
就是通常情况下,用c写的东西通常比较多出现在大多数人都不会太注意的底层,远不如python java那样在人前招摇,所以论社会地位,c完败。
然后显然一个马达驱动的价值,当然,除非他是发动机上用的,否则通常它也肯定比不上一个股票软体。
所以注定我们拿的工资是肯定没有他们多。
所以综上所述,除非你是真爱,或者如我,深陷其中多年,又没有人带我脱离的机会,那么,如果你想有钱又有面子……
妈的,滚出去!不要来我们这瞎鸡巴显摆!
淡定,淡定。
——————不淡定的下划线————
其实是这样的。
首先,搞mcu的通常要对硬体有相当程度的了解。
以至于他们经常和搞硬体的混到了一起。
本人不幸就是这样,所以我改了,以前别人问我你干啥的,以前我都说我写软体的,但后来我都说我搞电子设备的。
当然其实我从头到尾是写c的。
那我为什么要说我是搞电子而不是搞设备的呢?
因为我想避免接下来那你一定工资很高吧?或者那你会不会写个外挂或者手机app之类的问题。
因为以上的问题我都是
不会,或者并没有。
他们信不信其实我是不在意的,反正信了又不是就会给我钱。
但是我个人觉得以我这种实际天天调板子写应用逻辑的男人,实在不好意思说自己是做it的。
It者,information techonology
也许假以时日,物联网真正落地,我等也加入了3c大军,我还活著的话,我会骄傲的说我自己是搞it的,到时还请各位高薪大佬不要嫌弃。
最后我要补充一点。
很多时候搞linux搞windows甚至更牛逼的搞集群搞大数据的,往往会很鄙视我们这种只会写写电子表啊什么的之类的 单片机老。
但我想引用一个大神说的话。
大神为了衡量软体的复杂度,它以三大基本结构中的条件为例,他说,它会以if while等带条件的语句数量为计量单位,作为复杂度的值。
当然,更通常的做法是,以代码有效行数来衡量。
当然,类似linux号称三百万行代码,然则大部分为驱动不算,我想,linux kernel就算了。
所以通常来说,一个10万到20万行的c代码项目,其复杂度已经可以称之为中等规模。
至于一个75万行的c代码,据说,其价值可以与一栋写字楼相比。
而我自己的个人经验,我写过的一个游戏面板,且包括了所有游戏逻辑,其规模是1到2万行——因为我认为还有很多细节要处理,当时的规模是1.5万行。
另外说一下,我自己写的一个带有事件驱动的简单图形界面,因为单片机所以不搞什么酷炫的效果,仅仅是一个交互逻辑,已经相当完备,其代码规模不过2000行上下。
再以我用过的一个专业的图形库,软解的,agg,cpp写的,不过五万行左右……
所以——
如果你们这些搞什么高大上linux的王八蛋,自己写的代码行数不过2000行就足以构建一个项目的就都给我闭嘴,鄙视个鸡蛋啊!
当然你们会羡慕少写代码多干活很牛逼。
但现在我们是码农,比的是写代码的本事好嘛?!
当然,请让我冷静下来,如今,搞java的赚钱比c多的多的已经是事实,搞python又比搞java有钱也是不争的事实。
但那是建立在具有对具体业务逻辑的深入了解和优势,否则,鬼才信你很牛逼哦。
不是 mcu 开发没意思,而是他们没有考虑到有意思的点子,很多有意思的项目都是 mcu 开发实现的,mcu 开发中也能找到乐趣
先不说钱,单从功能及兴趣角度说,一步一步引导你向更高级的系统开发。
MCU处理能力弱,代码结构主要是外设驱动,核心业务逻辑不大,也不会作运算量大的处理,通常只是完成一些简单的任务。有时候在系统资源紧缺的时候,甚至会牺牲代码结构,把逻辑揉在一起,完全不考虑代码的可重用性。当然现在MCU也越来越强,各种库,协议栈都能跑,也慢慢规范起来了。这里分享一个MCU跑简单神经网路的例子,相信能激起很多人的兴趣。
https://blog.hackster.io/simple-neural-network-on-mcus-a7cbd3dc108c?blog.hackster.io当随著你碰到的应用越来越复杂,比如MCU能处理一维的音频信号,但是到了二维的图像处理,单片机这个小系统似乎就很吃力了。这个时候你就需要更强大的处理器。应用级别的处理器,带丰富外设介面,信号吞吐能力更强,功能复杂。
为构造一个强大的系统,需要规范的代码结构,统一的驱动介面,通用的操作系统介面,由操作系统去调动外设,用户只需要在用户层实现自己的业务逻辑即可。让众多开发者可以分工合作,很快的把这个系统搭建起来,并且在不同的处理器上可以很快的移植。这应该是当精通完MCU开发之后,你所期望的需要这样一个规范而强大的系统来拯救这个世界。而嵌入式Linux 正是这样的一个阵营。因为处理器能力足够强,它把原来MCU上不规范的驱动规范化,让操作系统可以调用,而应用开发者只需在操作系统的应用层实现它的APP即可。
随著需求的进一步加深,你的应用需要做大量的运算,而这些运算光由CPU算起来要消耗很长时间,比如图像处理、编解码、挖矿、跑深度神经网路等等。这时候怎么办,你需要专用的处理单元来做这种运算,于是这各硬体加速器就出现了,像GPU、挖矿ASIC,神经网路加速棒之类的。随之而来的是OpenCL这种面向异构平台的并行化的编程语言的出现,编程范围将不仅限于CPU。而且Linux 将不再是关注的焦点,只做为解决方案中的一个component存在。
下面这个参考设计可以很好的诠释一个软硬体结合的系统各个单元是怎么分工的。
https://www.xilinx.com/support/documentation/boards_and_kits/zcu102/2018_2/ug1221-zcu102-base-trd.pdf?www.xilinx.com我要表达意思就是工程师本来就是在不断解决问题的道路上越走越远的人。
当然这一切离不开钱的驱使,如果开发MCU能拿到很高工资的话,也就不会有人说MCU开发没意思了!
我就是这么认为的,我感觉mcu做了2-3年后,就会发现不过是uart spi各种外设,其他各种外接晶元。就算给一个新的晶元,熟悉最多也就几个礼拜,RTOS之类的其实也没什么神秘的,无非是任务事件之类的。
想要走的更深入,似乎只有走演算法一路。很迷茫。
这是一种食物链鄙视相关的东西~
做MCU开发的工资可以自行到招聘网站上看看,绝对没有Linux系统开发工资高,
主要是做Linux需要的知识更多,系统复杂度更大,这话中的没什么意思也说明了工资低和难度小的意思。
不过反过来说,MCU开发厉害的拿到高薪的也是非常多的,但是整体上还是比不上Linux系统开发的。
推荐阅读: