1 第二版教材2.4嵌入式内容补充
嵌入式系统是以应用为中心、以计算机技术为基础,并将可配置与可裁减的软、硬件集成于一体的专用计算机系统,需要满足应用对功能、可靠性、成本、体积和功耗等方面的严格要求。
一般嵌入式系统由嵌入式处理器、相关支撑硬件、嵌入式操作系统、支撑软件以及应用软件组成。
其实就是硬件和软件组成;硬件是处理器和其他相关支撑硬件;软件是操作系统、支撑软件、应用软件
(1)嵌入式处理器。由于嵌入式系统一般是在恶劣的环境条件下工作,与一般处理器相比,嵌入式处理器应可抵抗恶劣环境的影响,比如高温、寒冷、电磁、加速度等环境因素。为适应恶劣环境,嵌入式处理器芯片除满足低功耗、体积小等需求外,根据不同环境需求,其工艺可分为民用、工业和军用等三个档次。
(2)相关支撑硬件。相关支撑硬件是指除嵌入式处理器以外的构成系统的其他硬件,包括存储器、定时器、总线、I/O接口以及相关专用硬件。
(3)嵌入式操作系统。嵌入式操作系统是指运行在嵌入式系统中的基础软件,主要用于管理计算机资源和应用软件。与通用操作系统不同,嵌入式操作系统应具备实时性、可剪裁性和安全性等特征。
(4)支撑软件。支撑软件是指为应用软件开发与运行提供公共服务、软件开发、调试能力的软件,支撑软件的公共服务通常运行在操作系统之上,以库的方式被应用软件所引用。
(5)应用软件。应用软件是指为完成嵌入式系统的某一特定目标所开发的软件。
嵌入式系统应具备以下特性:
(1)专用性强。嵌入式系统面向特定应用需求,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统的小型化。
(2)技术融合。嵌入式系统将先进的计算机技术、通信技术、半导体技术和电子技术与各个行业的具体应用相结合,是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
(3)软硬一体软件为主。软件是嵌入式系统的主体,有IP核。嵌入式系统的硬件和软件都可以高效地设计,量体裁衣,去除冗余,可以在同样的硅片面积上实现更高的性能。
(4)比通用计算机资源少。由于嵌入式系统通常只完成少数几个任务。设计时考虑到其经济性,不能使用通用CPU,这就意味着管理的资源少,成本低,结构更简单。
(5)程序代码固化在非易失存储器中。为了提高执行速度和系统可靠性,嵌入式系统中的软件
一般都固化在存储器芯片或单片机本身中,而不是存在磁盘中。
(6)需专门开发工具和环境。嵌入式系统本身不具备开发能力,即使设计完成以后,用户通常也不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。
(7)体积小、价格低、工艺先进、性能价格比高、系统配置要求低、实时性强。
(8)对安全性和可靠性的要求高。
总结关键字:专用,技术融合,软硬一体,资源少,代码固化,专门环境和工具,体小、价低、工艺先进、性价比、配置低、实时强,安全可靠
嵌入式系统分类
根据不同用途可将嵌入式系统划分为嵌入式实时系统和嵌入式非实时系统两种,而实时系统又可分为强实时系统和弱实时系统。如果从安全性要求看,嵌入式系统还可分为安全攸关系统和非安全攸关系统。
嵌入式系统分为硬件层、抽象层、操作系统层、中间件层和应用层等5层。
(1)硬件层。硬件层主要是为嵌入式系统提供运行支撑的硬件环境,其核心是微处理器、存储器(ROM、SDRAM、Flash等)、I/0接口(A/D、D/A、I/0等)和通用设备以及总线、电源、时钟等。
(2)抽象层。在硬件层和软件层之间为抽象层,主要实现对硬件层的硬件进行抽象,为上层应用(操作系统〉提供虚拟的硬件资源:板级支持包(BSP)是一种硬件驱动软件,它是面向硬件层的硬件芯片或电路进行驱动,为上层操作系统提供对硬件进行管理的支持。
(3)操作系统层。操作系统层主要由嵌入式操作系统、文件系统、图形用户接口、网络系统和通用组件等可配置模块组成。
(4)中间件层。中间件层一般位于操作系统之上,管理计算机资源和网络通信,中间件层是连接两个独立应用的桥梁。
(5)应用层。应用层是指嵌入式系统的具体应用,主要包括不同的应用软件。
应用层:具体应用
中间件:管理计算机资源和网络通信,两个应用的桥梁。
OS层:OS、文件管理、图形用户接口、网络系统、通用组件等。
抽象层:软件层和硬件层之间,对硬件进行抽象,为上层提供虚拟的硬件资源,HAL和BSP。BSP是面向硬件芯片和电路驱动,为上层提供对硬件的管理功能。
硬件层:运行支撑的硬件环境,包括微处、存储器、I/O接口、人机交互接口、通用设备、总线、电源、时钟等。
硬件抽象层:在概念上属于抽象层一部分,它是作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,它隐藏了特定平台的硬件接口细节。
硬件抽象层特征:
- *硬件抽象层具有与硬件的密切相关性
- *硬件抽象层具有与操作系统无关性
- *接口定义的功能应包含硬件或系统所需硬件支持的所有功能
- *接口定义简单明了,太多接口函数会增加软件模拟的复杂性
- *具有可测性的接口设计有利于系统的软硬件测试和集成
BSP:是硬件抽象层的一种具体实现,它可以归为抽象层,有时候也归为操作系统的一部分;隔离了所支持的嵌入式操作系统与底层硬件平台之间的相关性,它完全是为了现有通用或商业嵌入式操作系统在不同硬件平台间的移植而设计的,因此BSP形式的硬件抽象层与BSP所向上支持的嵌入式操作系统是紧密相关的(它与操作系统相关性,当然也与硬件有相关性),虽然硬件抽象层设计的目的是与操作系统的无关性,但是BSP的实现方式与操作系统是有关的。
嵌入式软件的主要特点如下。
(1)可剪裁性。嵌入式软件能够根据系统功能需求,通过工具进行适应性功能的加或减,删除掉系统不需要的软件模块,使得系统更加紧凑。
(2)可配置性。嵌入式软件需要具备根据系统运行功能或性能需要而被配置的能力,使得嵌入式软件能够根据系统的不同状态、不同容量和不同流程,对软件工作状况进行能力的扩展、变更和增量服务。
(3)强实时性。嵌入式系统中的大多数都属于强实时性系统,要求任务必须在规定的时限内处理完成,因此,嵌入式软件采用的算法优劣是影响实时性的主要原因。
(4)安全性。安全性是指系统在规定的条件下和规定的时间内不发生事故的能力。
(5)可靠性。可靠性是指系统在规定的条件下和规定的时间周期内程序执行所要求的功能的能力。
(6)高确定性。嵌入式系统运行的时间、状态和行为是预先设计规划好的,其行为不能随时间、状态的变迁而变化
总结关键字:裁剪--配置--强实--安全--可靠--高确定
2 嵌入式微处理器
2.1 嵌入式微处理器体系结构
冯诺依曼结构
哈佛结构
2.2 嵌入式微处理器分类
嵌入式微处理器的分类
- MCU芯片内部集成ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、看门狗、I/O、串行口、脉宽调制输出、A/D、D/A、Flash RAM、EEPROM 等各种必要功能和外设。
- 和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高,其片上外设资源一般较丰富,适合于控制,是嵌入式系统工业的主流。
- 但与计算机处理器不同的是,在实际嵌入式应用中,只保 留和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,这样就以最低的功耗和资源实现嵌入式应用的特殊要求。
- 与工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。目前常见的有 ARM、MIPS、POWER PC等。
- 采用哈佛结构,流水线处理,其处理速度 比最快的 CPU还快10-50倍。
- 在数字滤波、FFT、谱分析等各种仪器上 DSP 获得了大规模的应用
- 多总线结构,允许CPU 同时进行指令和数据的访问,因而可以实现流水线操作。
- 哈佛体系结构,程序和数据空间分开,可以同时访问指令和数据。
- 数字信号处理的运算特点:乘/加,及反复相乘求和(乘积累加)。
- DSP设置了硬件乘法/累加器,能在单个指令周期内完成乘法/加法运算。
- SoC最大的特点是成功实现了软硬件无缝结合,直接在处理器片内嵌入操作系统的代码模块。是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。
补充SoC:
SoC的定义多种多样,由于其内涵丰富、应用范围广,很难给出准确定义。一般说来, SoC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功能开始,到软/硬件划分,并完成设计的整个过程。 [1]System on Chips,完整集成了 CPU、GPU、通信等模块的手机主芯片。
它是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上。如果说中央处理器(CPU)是大脑,那么SoC就是包括大脑、心脏、眼睛和手的系统。
国内外学术界一般倾向将SoC定义为将微处理器、模拟IP(Intellectual Property)核、数字IP核和存储器(或片外存储控制接口)集成在单一芯片上,它通常是客户定制的,或是面向特定用途的标准产品
SoC设计的关键技术
SoC关键技术主要包括总线架构技术、IP核可复用技术、软硬件协同设计技术、SoC验证技术、可测性设计技术、低功耗设计技术、超深亚微米电路实现技术,并且包含做嵌入式软件移植、开发研究,是一门跨学科的新兴研究领域。SoC有两个显著的特点:
- 一是硬件规模庞大,通常基于IP设计模式;
- 二是软件比重大,需要进行软硬件协同设计。
可以类比为城市相比农村的优势很明显:配套齐全、交通便利、效率高。
- SoC也有类似特点:在单个芯片上集成了更多配套的电路,节省了集成电路的面积,也就节省了成本,相当于城市的能源利用率提高了;
- 片上互联相当于城市的快速道路,高速、低耗,原来分布在电路板上的各器件之间的信息传输,集中到同一个芯片中,相当于本来要坐长途汽车才能到达的地方,已经挪到城里来了,坐一趟地铁或BRT就到了,这样明显速度快了很多;
- 城市的第三产业发达,更具有竞争力,而SoC上的软件则相当于城市的服务业务,不单硬件好,软件也要好;同样一套硬件,今天可以用来做某件事,明天又可以用来做另一件事,类似于城市中整个社会的资源配置和调度、利用率方面的提高。
系统功能集成是SoC的核心技术。
固件集成是SoC的基础设计思想。
IP是SoC的设计基础。
2.3 多核处理器结构
- 对称多处理技术:将2颗完全一样的处理器封装在一个芯片内,达到双倍或接近双倍的处理性能,节省运算资源。
- 非对称处理技术:2个处理内核彼此不同,各自处理和执行特定的功能,在软件的协调下分担不同的计算任务。
- 全局队列调度是指操作系统维护一个全局的任务等待队列,当系统中有一个 CPU 空闲时,操作系统就从全局任务等待队列中选取就绪任务开始执行,CPU核心利用率高。
- 局部队列调度是操作系统为每个 CPU 内核维护一个局部的任务等待队列,当系统中有一个 CPU内核空闲时,就从该核心的任务等待队列中选取适当的任务执行,优点是无需在多个CPU之间切换。
多核系统具有一个带有多个处理单元的处理器;这些处理单元称为核心。
多处理器系统具有两个或更多处理器;多处理器系统比多核系统可靠的多,但多处理器系统与多核系统相比具有更复杂的配置。
什么是多核?
众所周知,处理器/CPU是计算机的大脑,它负责计算机的所有功能;CPU的执行单元称为核心,核心的主要功能是读取和执行指令,这些指令可以有多种形式,包括计算、数据传输、分支等;具有单核的处理器称为Unicore处理器,但具有两个或更多核心的处理器称为多核处理器;多核处理器的核心可以同时单独读取和执行程序指令,这提高了程序的执行速度并支持并行计算。例如:四核处理器、八核处理器等。
什么是多处理器?
多处理器有两个或更多处理器,多处理器系统的处理器共享相同的内存、系统总线(连接计算机系统主要组件以传输数据和信息的路径)和 I/O 设备; 多处理器可以同时执行多条指令。一个处理器的故障不会影响其他处理器的功能;因此,多处理器更加可靠。多处理器系统可以使用共享内存或分布式内存;在共享内存多处理器中,每个处理器共享主内存和I/O设备;处理器可以使用相同的系统总线访问主存储器,使用共享内存的多处理器也称为对称多处理器。
分布式内存多处理器中的每个处理器都有自己的私有内存,用于进行计算,系统总线允许处理器相互通信并访问主存储器。
逻辑核一般是共享物理核的ALU,类似于进程中的线程共享进程的资源;当然如果你给逻辑核配上ALU等资源也不是不可以,只不过一般不这么设计。
一台机器有一个cpu,这个cpu只有一个物理核,这个物理核里只有一个逻辑核,那么它叫单核处理器(单核CPU);这种情况通常不会使用专门的术语来描述,可以简单地描述为单核处理器或者单核CPU-----甭管几个逻辑核,只有一个物理核的都是单核处理器。
一台机器有一个cpu,这个cpu只有一个物理核,这个物理核里只有多个逻辑核,那么叫超线程处理器。---开启了超线程技术
一台机器有一个cpu,这个cpu只有一个物理核,单核处理器或者单核CPU。
一台机器有一个cpu,这个cpu有多个物理核,那么这个CPU叫多核处理器(多核CPU)。
一台机器有多个cpu,那么这台机器叫多处理器系统/多核处理器系统(也可称多CPU系统)
这里面名字有重叠,广义上讲,单核多核是针对物理核来说的,而不是针对逻辑核的,在讨论逻辑核的时候也是可以用单核多核的。
如图,多个cpu,每个cpu多个物理核,每个物理核下多个逻辑核,所以总核数= cpu个数 * 每个cpu的物理核个数 * 每个物理核中逻辑核个数 = 2 * 4 * 2 =16
参考:CPU/物理核/逻辑核_cpu的核为什么是alu-CSDN博客
多核的优点
- 与单核处理器相比,多核处理器可以完成更多的工作;
- 多核处理器的核心位于单个集成芯片上,导致系统时钟速度增加;
- 与单核处理器相比,多核处理器可以更大程度地容忍故障;
- 这些程序被分配了不同的核心,但他们仍然能够相互交互;
- 多核处理器以更低的能耗提供更高的性能,因此它们是节能的;
- 多核处理器的流量较少
多核的缺点
- 尽管多核处理器中存在多个核心,但与简单处理器相比,速度并没有显著提高;
- 增加核心数量会增加,由于资源共享而导致的软件干扰;
- 处理器在执行多任务时会产生大量热量;
- 多核处理器的功耗较高;
多处理器的优点
- 由于多个处理器同时工作,系统的吞吐量增加;
- 多处理器系统更加可靠,因为一个处理器的故障不会影响其他处理器;
- 由于多个进程在不同的处理器上并行执行,因此实现了并行处理;
处理器的缺点
- 多处理器系统的处理器之间的协调是相当复杂的;
- 所有处理器都使用公共I/O设备;因此,如果一个进程正在使用I/O,那么其他进程必须等待轮到它,结果导致系统的吞吐量可能会降低;
- 由于所有处理器都使用相同的内存,因此需要大量主内存来进行高效计算;
- 与多核系统相比,多处理器系统昂贵;
多核和多处理器的关系
多核处理器和多处理器都用于通过多任务和并行计算来提高计算机的性能,现代计算机具有多个处理器,每个处理器中都有多个内核;这些内核可以一次读取和执行多条指令。
多核和多处理器的区别
1、可靠性不同
多核(multi-core):多核处理器不像多处理器那样可靠。
多处理机(multiprocessor):更可靠,因为一个CPU的故障不会影响其他CPU。
2、不同项目的处理速度不同
多核(multi-core):多核处理器执行单个程序的速度更快。
多处理机(multiprocessor):多处理器执行多个程序的速度更快。
3、CPU数量不同
多核(multi-core):一个CPU或处理器有两个或多个独立的处理单元,称为核心,能够读取和执行程序指令。
多处理机(multiprocessor):一个有两个或更多CPU的系统,可以同时处理程序。
4、流量不同
多核(multi-core):多核处理器的流量较少。
多处理机(multiprocessor):多处理器有更多的流量。
5、配置不同
多核(multi-core):多核处理器不需要配置。
多处理机(multiprocessor):多处理器需要很少的复杂配置。
6、价格不同
多核(multi-core):多核处理器非常便宜(单个CPU,不需要多CPU支持系统)。
多处理机(multiprocessor):与多核心相比,多处理器很昂贵(多个独立的CPU,需要支持多个处理器的系统)。
7、概念不同
多核(multi-core):多核处理器系统指系统中只有一个多核心的处理器,也就是说电脑只有一个处理器,但是这个处理器是多核的。
多处理机(multiprocessor):多处理器系统中包含多个单核处理器,就是说电脑和处理器有多个,但电脑的处理器是单核的。
8、资源利用率不同
对于多处理器系统而言,它们在执行命令的时候多个处理器之间的通信手段是电脑主板上的总线。而对于多核系统而言,多个核心处理器之间通信时通过CPU内部总线进行信息的交互的。对于执行效率而言,多核处理器要优于多个处理器。
9、线程控制不同
计算机在启动之后,一个进程最少包含一个主线程,如果这个主线程结束了,那么这个进程也就终止执行了,主线程是以函数的形式提供给操作系统的。对于并行计算是在多处理器的情况下,操作系统把多个线程分配给响应的处理器,然后各自执行任务。
3 嵌入式软件与操作系统
3.1 嵌入式软件基础
嵌入式软件分类
设备驱动层
- 单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底层硬件支持
- 为操作系统提供设备驱动程序和系统中断服务程序
- 定制操作系统的功能,为软件系统提供一个实时多任务的运行环境
- 初始化操作系统,为操作系统的正常运行做好准备。
- ①硬件相关性,因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软件与硬件平台之间的接口,BSP需为操作系统提供操作和控制具体硬件的方法。
- ②操作系统相关性,不同的操作系统具有各自的软件层次结构,因此不同操作系统具有特定的硬件 接口形式。
一般来说,BSP主要包括两个方面的内容:引导加载程序 BootLoader 和设备驱动程序。
引导加载程序
一般包括以下功能:
- 片级初始化:主要完成微处理器的初始化,包括设置微处理器的核心寄存器和控制寄存器、微处理器的核心工作模式及其局部总线模式等。片级初始化把微处理器从上电时的默认状态逐步设置成系统所要求的工作状态。这是一个纯硬件的初始化过程。
- 板级初始化:通过正确地设置各种寄存器的内容来完成微处理器以外的其他硬件设备的初始化。例如,初始化 LED显示设备、初始化定时器、设置中断控制寄存器、初始化串口通信、初始化内存控制器、建立内存空间的地址映射等。在此过程中,除了要设置各种硬件寄存器以外,还要设置某些软件的数据结构和参数。因此,这是一个同时包含有软件和硬件在内的初始化过程。
- 加载内核(系统级初始化):将操作系统和应用程序的映像从 Flash 存储器复制到系统的内存当中,然后跳转到系统内核的第一条指令处继续执行。
设备驱动程序
对于不同的硬件设备来说,它们的功能是不一样的,所以它们的设备驱动程序也是不一样的。
但是一般来说,大多数的设备驱动程序都会具备以下的一些基本功能。
3.2 嵌入式操作系统
嵌入式操作系统的特点
3.3 嵌入式实时操作系统
实时操作系统(RTOS)的特点
实时操作系统的特征
4 嵌入式软件设计
4.1 开发流程
宿主机和目标机
交叉编译
交叉调试
4.2 开发工具
编辑器
编译器 gcc
调试器 gdb
- 调试器运行在宿主机上,被调试程序运行在目标机上。
- 调试器通过某种通信方式与目标机建立联系,如串口、并口、网络、JTAG 等。
- 在目标机上一般有调试器的某种代理,能配合调试器一起完成对目标机上运行程序的调试,可以是软件或支持调试的硬件。
gdb是GNU开源组织发布的一个强大的程序调试工具。
本人对嵌入式不是很懂,这些知识都是书上整理和百度并结合自己的理解总结,如有错误核疏漏,请技术大牛们评论指正,非常感谢!