复习提纲:(C语言翻译汇编) 一、概述
1. 嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置 国内普遍认同的嵌入式系统定义为:
以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
2.嵌入式系统的几个重要特征(简述5特征)
(1) 嵌入式系统工业是不可垄断的高度分散的工业 从某种意义上来说,通用计算机行业的技术是垄断的。
嵌入式系统则不同,它是一个分散的工业,充满了竞争、机遇与创新,没有哪一个系列的处理器和操作系统能够垄断全部市场。 (2)操作系统内核小
由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。
比如ENEA公司的OSE分布式系统,内核只有5K,而Windows的内核则要大得多。
(3)专用性强
嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植。
即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。
同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全不同的概念。 (4)系统精简
嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。 (5)高实时性OS
这是嵌入式软件的基本要求,而且软件要求固态存储,以提高速度。软件代码要求高质量和高可靠性、实时性。 6)嵌入式软件开发走向标准化
嵌入式系统的应用程序可以没有操作系统直接在芯片上运行。
为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS(Real-Time Operating System)开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。 (7)嵌入式系统开发需要开发工具和环境
由于其本身不具备自主开发能力,即使设计完成以后,用户通常也是不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。
这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。
开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。
(8)嵌入式系统运行环境差异很大:
(9)嵌入式系统比通用PC系统资源少得多:
(10)一般的嵌入式系统具有低功耗、体积小、集成度高、成本低等特点: (11)建立完整的嵌入式系统的系统测试和可靠性评估体系,保证嵌入式系统高效、可靠、稳定工作: (12)具有较长的生命周期
3.嵌入式系统的组成(最后的图,有印象) 嵌入式硬件系统 嵌入式处理器 各种类型存储器 模拟电路及电源 接口控制器及接插件 嵌入式软件系统
实时操作系统(RTOS) 板级支持包(BSP)
设备驱动(Device Driver) 协议栈(Protocol Stack) 应用程序(Application)
4.嵌入式系统的实时性
二、嵌入式系统设计方法、过程(2.3ppt) 1.交叉开发环境、
先在通用PC机上编程,然后通过交叉编译链接,将程序做成目标平台上可以运行的二进制代码格式。最后将程序下载到目标平台上的特定位置由目标板上启动代码运行这段二进制代码。 交叉开发:在一台通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中运行调试的开发方式。
开发计算机一般称宿 主机,嵌入式设备称为目标机,在宿主机上编译好的程序,下载到目标机上运行。
交叉开发环境一般由运行于宿主机上的交叉开发软件、宿主机到目标机的调试通道组成。
如基于ARM9、μCOS的嵌入式系统开发,需要安装交叉编译工具ADS 。 基于VxWorks的开发环境:Tornado 2.几种常用的调试方法、 指令集模拟器
一种利用PC机端的仿真开发软件模拟调试的方法。
如:Skyeye 清华大学陈渝主持的自由软件项目,http://www.skyeye.org ARM公司的ARMulator模拟器 驻留监控软件
驻留监控程序运行在目标板上,PC机端调试软件可通过并口、串口、 网口与之交互,以完成程序执行、存储器及寄存器读写、断点设置等任务 ARM公司的Angel是长驻在目标机Flash中的监控程序
JTAG仿真器(基于JTAG的ICD(In-Circuit Debugger))
通过ARM芯片的JTAG边界扫描口与ARM核进行通信,不占用目 标板的资源,是目前使用最广泛的调试手段 在线仿真器ICE(In-Circuit Emulator)
使用仿真头代替目标板上的CPU,可以完全仿真ARM芯片的行为。但结构较复杂,价格昂贵,通常用于ARM硬件开发中
(ARM-LINUX开发一般过程不要求)
三、Bootloader(3个常用) 1、什么是bootloader
Bootloader,为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。
Bootloader的位置:通常固化在硬件上的某个固态存储设备上,加电后自启动。 Bootloader功能:初始化硬件设备、建立内存空间的映射图(有的CPU没有内存映射功能如 S3C44B0x) ,将系统的软、硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。
Bootloader的地址:在嵌入式系统中,系统加电复位后,几乎所有的 CPU都从由复位地址上取指令。
2、Bootloader操作模式
两种不同的操作模式:“启动加载”模式和“下载”模式。其区别对于开发人员才有意义。从最终用户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载模式的区别。 启动加载(Bootloading)模式 启动加载模式称为“自举”(Autonomous)模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。 启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。 下载(Downloading)模式 下载方式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件。 下载内容及存储:主要是下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH 类固态存储设备中。 下载模式应用场合:Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用到这种工作模式。 用户应用接口:工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。 如在RedBoot下,将出现“RedBoot>”提示符;在vivi Bootloader 下出现“vivi>”提示符。
3、Bootloader启动过程
Bootloader的启动可以分为两个阶段 1、第一阶段 阶段1主要包含依赖于CPU体系结构及硬件设备的初始化等。通常都用汇编语言来实现。这个阶段的任务有5: (1)、基本的硬件设备初始化 这是 Bootloader 一开始就执行的操作,其目的是为阶段2 的执行、以及随后kernel 的执行准备好一些基本的硬件环境。 它通常包括以下工作:
关闭处理器内部指令/数据cache等 关闭中断 关闭看门狗 配置PLL 配置内存
初始化各工作模式的堆栈 配置中断
拷贝RW段,初始化ZI段
(2)、为阶段2代码准备RAM空间 为了获得更快的执行速度,通常把 阶段2 的代码加载到 RAM 空间中来执行。 准备RAM空间考虑的因素:阶段2代码大小、堆栈、页大小(4KB的倍数)、安排位置等。 (3)、拷贝阶段2代码到RAM空间 (4)、设置好堆栈 堆栈指针sp设置在1MB 的 RAM 空间的最顶端(堆栈向下生长)。 (5)、跳转到阶段2的C程序入口点 在上述一切都就绪后,就可以跳转到 Bootloader 的 stage2 去执行了。 2、第二阶段 阶段2通常用C语言来实现,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。这个阶段的主要任务有5: (1)、初始化本阶段要使用到的硬件 至少初始化一个串口,以便和终端用户进行 I/O 输出信息等。 (2)、检测系统内存映射(memory map) 所谓内存映射,就是指在整个物理地址空间中有哪些地址范围被分配用来作为系统的 RAM 单元。为后面使用RAM、运行程序做好准备。 (3)、将kernel和根文件系统映像从flash读到RAM空间 (4)、为kernel设置启动参数 这是在调用内核之前应该做的准备工作。Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。 启动参数标记列表方法:以ATAG_CORE标记开始,以ATAG_NONE标记结束。 在嵌入式 Linux 系统中,通常需要由 Boot Loader 设置的启动参数有:ATAG_CORE、ATAG_MEM(内存映射)、ATAG_NONE等。 (5)、调用内核 Bootloader调用Linux kernel的方法是直接跳转到内核的第一条指令处。在跳
转时必须满足下列条件: 1)、CPU寄存器的设置:R0为0;R1为机器类型ID;R2为启动参数,标记列表在RAM中的起始基地址。 (机器类型参见 linux/arch/arm/tools/mach-types目录) 2)、CPU模式: CPU必须设置为SVC模式,必须禁止中断(IRQs和FIQs)。 3)、 MMU 和 Cache的设置:MMU 必须关闭;指令 Cache 可以打开也可以关闭; 数据 Cache 必须关闭。
4、有哪些常用的Bootloader
Bootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootloader。
1、vivi vivi是韩国Mizi公司开发的Bootloader,适用于ARM9处理器。
2、RedBoot RedBoot即红帽(Red Hat)嵌入式调试引导程序,是一种用于嵌入式系统的独立开放源代码引导/装载器。
3、U-Boot U-Boot(Universal Bootloader)由德国DENX小组开发,是一款目前功能较为强大的开源Bootloader程序,它支持多种处理器平台,包括ARM、PowerPC、MIPS等。
四、嵌入式微处理器
1、嵌入式系统硬件基础知识(体系结构,指令集) 1)冯·诺依曼体系结构和哈佛体系结构 冯·诺依曼体系结构
地址存储器CPU数据PC
数据和指令都存储在一个存储器中的计算机被称为冯·诺依曼机 指令的执行周期T
1)取指令(Instruction Fetch):TF
2)指令译码(Instruction Decode):TD 3)执行指令(Instruction Execute):TE 4)存储(Storage):TS
每条指令的执行周期:T= TF+TD+TE+TS 冯·诺依曼体系结构特点:
1)数据与指令都存储在存储器中 2)被大多数计算机所采用
3)冯诺依曼体系: 英特尔公司的8086,英特尔公司的其他中央处理器、ARM的ARM7、MIPS公司的MIPS处理器。