我非常同意沙发中 @chunyang 大神的说法。
这个问题和表述完全有问题。
我用比较直接和简单的方式来说明,或者说直接给你梳理清楚问题。
首先,所谓嵌入式系统,这是个很含糊的说法。
但具体地说,这里就不说什么 狭义广义了,我直接就说,一般而言,“嵌入式”通常指的是跑 Linux Wince这一类较为复杂操作系统的系统,你可以简单类比为 树莓派。
但是,稍微扩展一点,一般把单片机,也就是MCU,SoC也包括进来。
所谓嵌入式究竟是什么。
我以前在知乎写过一个我自认为很生动形象的解释:
所谓嵌入式、嵌入式,人如其名,就是一个嵌在一个更复杂的机电系统里的软硬件系统——实物上表现为硬件电路板,软件指的是里面跑的程序。(当然,操作系统可以视为一个更大的程序,一个底层背景程序)
综上所述,嵌入式系统,这个提法,它的核心,我个人认为其实在于它处在一个综合性的系统里,究竟是一种什么集成方式,当然,如今,嵌入式这个词已经变成一个独有的专用术语,和最初这个生动形象的说法已经越来越遥远。
目前,简单来说,除了个人PC,服务器不能称为嵌入式,其实基本上任何你见到的电子控制系统,都可以叫做嵌入式系统。
然后,才是你的第二个问题
所谓嵌入式开发,在你的问题语境里,我认为你说的是软件开发。
这个相对好解释,前面说了。
嵌入式分两种,一种是跑Linux或者Wince,或者现在的Android吧,这类的高端复杂,性能强悍的软硬件系统。
另一种是我们常见的MCU。单片机。
对于前者来说,那肯定是带系统的,这个时候,你的开发工作,其实也可以分成三部分。
第一种,最常见,应用级开发,类似于你在ubuntu或者,说树莓派吧,更好理解。
你在树莓派上用QT开发一个简单的图形界面,它可能涉及了USB,WIFI或者串口,然后在上面显示出数据。
第二种,也常见,驱动开发。
比如你要给你的树莓派新增一个i2c接口的心率传感器模块,那你得写一个底层的i2c驱动——有了这个,你才能进一步开发上面提到的应用级开发。
第三种,是最高级的,也是非常少见的。
通常除了Linux圈里的一些爱好者以外,一般只有大型公司,会针对他们自己使用的Linux发行版进行系统级的改善。
比方说,Google 华为 小米 这样的公司里,肯定会有一群对Android,甚至是对Android背后的Linux进行系统层面的改进的系统开发人员。
但对于MCU,情况就很不一样。
相对于Linux而言,MCU程序的复杂度和代码量级通常小了几个数量级。
通常,在MCU上,最基础的开发是裸机开发,而裸机开发和你用汇编语言还是C/C++这种相对高级的中级开发语言没有任何关系。
你的问题和描述里,这是第二个最大的误解。
当然,MCU和MCU之间,在性能和配置方面的差别,也是非常巨大的,加上针对MCU的简易操作系统,主要是实时系统,即RTOS,如最著名的 FreeRTOS uCos,以及近年来国内非常出名的RTT。
实际上,这种操作系统相对来说是非常简单的,其代码规模并不会比一般的裸机程序复杂太多。
但实际上,在这种简单的小RTOS和巨大的linux wince Android之间,还有许多大小不一的操作系统,比如在复杂机电控制系统上非常常用也非常著名的 Vxworks。
它的代码规模相对于FreeRTOS,uCos(我是指它的内核)要大得多,但比起linux而言,又相对小很多。
MCU和在上面运行的OS一样,它们的规模量级范围非常大。
因此,MCU和MCU是很不一样的。
所以,不能简单认为,嵌入式的软件开发只有 在OS上二次开发 和 使用最原始的汇编语言 两种。
这里面的东西复杂得很。
|