单片机和嵌入式,其实并没有标准的定义来区分它们。对于做过单片机和嵌入式开发的开发者来说,都有自己的定义。接下来,我们来谈谈这两个概念。深入了解。什么是单片机?首先明确一下概念,什么是单片机,单片机就是集成电路芯片。它是具有数据处理能力的中央处理器CPU、随机存取存储器RAM、只读存储器O口和中断系统、定时器/计数器等功能(还可能包括显示驱动电路、脉宽调制电路、模拟多路复用器、A/D转换器等电路)集成在一块硅片上,构成一个小巧而完善的微机系统,广泛应用于工业控制领域。从1980年代,从当时的4位、8位单片机,到现在的300M高速单片机。比如最经典的51系列单片机,外观只是一个拇指大小的长方体芯片,共有40个引脚,里面包含了一个逻辑运算单元。其实就是一个cpu。刚开始接触单片机的时候,曾经有个疑问,为什么单片机是黑色的,不是其他颜色,后来才知道是单片机材料的限制。对于单片机来说,其实一颗芯片就够了。其他如单片机的最小系统,为单片机的正常工作添加其他元器件,如晶振、5v电源、电感和电阻等。当然最小系统只能保证单片机的正常运行,几乎不能实现任何基于单片机的应用。为实现单片机的应用,还必须增加其他外围硬件。如按键、LED灯、LED屏、蜂鸣器、各种传感器等。这是市面上很多公司都在做的MCU开发板。综上所述,单片机就是一个单一的模块,完成计算、逻辑控制、通讯等功能。也就是说,MCU真的姓“单”了。DSP芯片也可以认为是单片机。当然它们的性能很强大,但是功能还是很单一,简单来说就是处理数据和逻辑。什么是嵌入式?那么什么是嵌入式?一般来说,嵌入式是指嵌入式系统。IEEE(InsTItuteofElectricalandElectronicsEngineers,电气和电子工程师协会)对嵌入式系统的定义是:“用于控制、监视或辅助机械设备运行的装置”。嵌入式系统是一种专用计算机系统,是设备或设备的一部分。通常,嵌入式系统是一个嵌入式处理器控制板,控制程序存储在ROM中。嵌入式系统是结合了应用程序、操作系统和计算机硬件的系统。它是指基于计算机技术的以应用程序为中心的系统。软件和硬件都可以定制。对体积、功耗和使用环境有特殊要求的专用计算机系统。事实上,所有具有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用了嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统完全由单一的程序逻辑控制。这是因为嵌入式系统一般用于工业控制,也就是说对外围设备的控制是硬编码的,不需要人工干预,也是为了保证系统的稳定性和可靠性。我们经常可以听到企业招聘的要求是嵌入式软件工程师或者嵌入式硬件工程师,也就是说嵌入式系统包括软件和硬件。其实仔细想一想就可以明白,他们已经跑了系统。当然还有软件和bspHardware。也就是说,嵌入式系统是软件和硬件的结合。国内普遍认可的嵌入式系统定义是:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积等方面的要求。、功耗等严格要求的专用计算机系统。嵌入式硬件层硬件层包括嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。嵌入式核心控制模块是在嵌入式处理器的基础上增加电源电路、时钟电路和存储电路构成的。操作系统和应用程序都可以固化在ROM中。其中的核心是微处理器。嵌入式处理器和一般电脑cpu是有区别的。大多数嵌入式微处理器在特定设计的系统中工作。例如,TI或Atmel有许多不同定位的处理器。Atmel的SAM系列专为物联网设计,AVR以其卓越的性能被广泛应用于工业领域。嵌入式微处理器有各种各样的系统,即使在同一个系统中,它们也可能有不同的时钟频率和数据总线宽度,或者集成不同的外设和接口。据不完全统计,全球嵌入式微处理器有1000多种,架构有30多个系列,其中主流系统有ARM、MIPS、PowerPC、X86和SH。但与全球PC市场不同的是,目前还没有嵌入式微处理器可以称霸市场。就32位产品而言,嵌入式微处理器有100多种。嵌入式微处理器的选择是根据具体的应用来确定的。在嵌入式领域,可以说基于arm的处理器占据了半壁江山,arm也成为了知名的科技公司,但它不生产任何处理器,只提供IP。可见,一流的企业制定标准。其他使用较多的架构还有sparc、powerpc等,比如arm有多种处理器架构,最经典的cortex系列,属于ARMv7架构,是ARM到2010年最新的指令集架构。ARMv7架构定义了三个不同的系列:“A”系列用于尖端的基于虚拟内存的操作系统和用户应用程序;用于实时系统的“R”系列;和微控制器的“M”系列。嵌入式系统与外界的交互需要一定形式的通用设备接口,如A/D、D/A、I/O等,外设通过与微处理器连接实现输入/输出其他片外设备或传感器的功能。每个外设通常只有一个功能,可以在片上也可以在片外。外围设备有多种类型,从简单的串行通信设备到非常复杂的802.11无线设备。嵌入式系统中常用的通用设备接口有A/D(模拟/数字转换接口)、D/A(数字/模拟转换接口),I/O接口有RS-232接口(串行通信接口)、以太网(以太网接口)、USB(通用串行总线接口)、音频接口、VGA视频输出接口、I2C(现场总线)、SPI(串行外围设备接口)和IrDA(红外线接口)等。这个其实类似于单片机.嵌入式软件层是操作系统,包括内核和文件系统,以及顶层应用程序。嵌入式操作系统一般是Linux或其他类Unix,也有一些实时操作系统(RTOS)如VxWorks、RTEMS、ucOS等。其中Linux还包括不同的发行版,如Ubuntu、Redhat、Debian、centos等,它们都使用Linux内核,不同的是上面的软件和工具,当然不用太担心标准问题,这些Linux发行版选择的软件几乎都是比较通用的,例如用于Web服务器的Apache,用于电子邮件服务器的postfix和sendmail,以及用于文件服务器的Samba。此外,还有Linuxstandardbase等标准来规范开发者。Unix-like主要有FreeBSD和Solaris等。一些实时操作系统最常用于嵌入式领域。实时操作系统的核心是实时性能。本质是华为对任务处理时间的可预见性,即任务需要在规定的时限内完成。IEEE将实时系统定义为“其正确性不仅取决于计算的逻辑结果而且还取决于产生结果所花费的时间的那些系统”。实时操作系统可分为硬实时和软实时。硬实时要求操作必须在规定的时间内完成,这是操作系统设计时就保证的;软实时只需要根据任务的优先级尽快完成操作即可。就是这样。我们平时使用的操作系统经过一定的改动就可以成为实时操作系统。那么实时操作系统与Linux等分时操作系统的区别如下:(1)多路复用。实时信息处理系统与分时系统具有相同的复用性。系统按照分时原则为多个终端用户服务;而对于实时控制系统,其多通道性主要表现在多通道现场信息的采集和对多个对象或多个执行机构的控制。(2)独立性。实时信息处理系统与分时系统一样独立。每个终端用户向分时系统提出服务请求时,彼此独立运行,互不干扰;在实时控制系统中,信息的采集与对象的控制互不干扰。(三)时效性。实时信息系统的实时性要求与分时系统类似,由可接受的等待时间决定;而实时控制系统的时效性是根据控制对象要求的开始期限或完成期限,一般在秒级、数百毫秒到毫秒级确定,有的甚至低于100微秒。(4)交互性。实时信息处理系统是交互式的,但人与系统的交互仅限于访问系统中某些特定的专用服务程序。它不像分时系统那样向终端用户提供数据处理服务、资源共享等服务。(5)可靠性。分时系统要求系统是可靠的,而实时系统要求系统是高度可靠的。因为任何一个失误都可能带来巨大的经济损失,甚至是不可预知的灾难性后果。因此,在实时系统中,采取了多级容错措施来保证系统的安全和数据的安全。因为更可靠和及时。嵌入式实时操作系统在工业控制、航空航天、军事等领域的应用越来越广泛。例如,美国宇航局近年发射的火星探测器均采用RTEMS实时操作系统。嵌入式中间层所谓中间层,就是介于软件层和硬件层之间的接口层。其实严格来说也属于软件层。一般开发者称之为BSP。该层主要负责向下提供硬件驱动、硬件配置等操作,向上为软件开发者提供标准的API。开发中间层的开发人员通常被称为嵌入式驱动工程师。从这里也可以看出,嵌入式设计离不开软件和硬件。需要掌握底层硬件的特性以及如何驱动它工作,以及操作系统的相关知识,才能编写具有相应功能的应用程序。因此,要查看一个操作系统是否支持某个芯片或某个开发板,只需查看其源代码中是否包含对应芯片或开发板的板级支持包即可。嵌入式系统应该在什么样的硬件上运行?说到嵌入式硬件或者开发板,我想很多人的第一印象就是RaspberryPi,这是一个信用卡大小的微型计算机。别看它“娇小”的外表,更要看里面的“心”。“但它的功能非常强大,有视频、音频等功能,可以说是‘麻雀虽小,五脏俱全’。”树莓派推出后,众多厂商争相推出同类产品,比如BananaPi,还有TI的Beagleboneblack板子,跟RaspberryPi大小差不多,外设有USBhost,USBmini,网卡接口,背面还有SD卡槽和HDMI接口,BBB的处理器采用目前嵌入式系统中最流行的ARMv7指令集,使用当今广泛使用的指令集的处理器,可以得到更多软件的支持,比如有些操作系统不再支持运行在ARMv6指令集上,比如Ubuntu放弃了支持对于2012年4月的ARMv6指令集。ARMv7相对于ARMv6指令集的另一个优势是使用ARMv7的处理器的实际性能更强。ARMv7有很多优势相比ARMv6,例如一些重大改进:超标量架构的实现,包括SIMD操作指令,以及改进的分支预测算法以极大地提高某些性能。综上所述,以上就是一块基本的嵌入式核心板的性能参数。与上面提到的单片机的性能参数相比,单片机的处理能力较低,主频多在几十M左右,往往是几百M,几千M的处理速度是还是很不一样。另外,单片机不具备图形界面的处理能力,即没有GPU使得单片机几乎不可能驱动图形界面。单片机的存储空间和嵌入式处理器不是一个级别的。单片机的片上存储通常只有几千字节大小,受外围硬件的限制不可能大规模增加外围emmc,而嵌入式处理器通常只有几千字节。数百兆的RAM,如此巨大的差异,使得单片机几乎不可能运行嵌入式处理器那样的操作系统,甚至连TCP/IP协议栈和USB协议栈都无法运行。一些高端的单片机比如ST的STM32系列,可能可以运行一些轻量级的系统os和嵌入式网络协议栈,比如IwIP协议栈。嵌入式处理器丰富而强大的性能决定了它可以完成更多单片机无法完成的应用,如网络通信功能、视频传输处理功能等,而且当外围存储增加时,嵌入式处理器可以轻松完成运行各种Linux系统,以及图形GUI界面。单片机和嵌入式在开发方式上也有很大的区别,就是编译过程的区别。单片机主要是在Windows等图形界面下开发的。目前有很多成熟的IDE工具,如keil、IAR、ti的CCS等,这些工具集编译、汇编、链接、仿真于一体,由于是在Windows下开发,具有友好的用户界面。开发者只需编写c代码,然后点击编译链接按钮即可。也可以调试或模拟错误。非常快。嵌入式开发一般在Linux下进行。需要在自己的主机上编译c代码,然后通过系统镜像或者uboot引导将编译好的文件烧入开发板。由于宿主机处理器是x86架构,并且编写的代码运行在arm架构或者sparc架构的处理器上,所以存在交叉编译链安装。另外,Linux下没有Windows那样的IDE,即编译和链接源代码需要开发者自己完成。一般是使用GNUmake脚本编写Makefile和配置文件来完成。在Makefile中写了如何编译c或h文件,也就是编译规则和依赖文件是什么。这些都需要开发者自己来完成。而以上过程是在Linux下的终端即命令行中完成的,这也增加了嵌入式开发的难度。
