期刊问答网 论文发表 期刊发表 期刊问答
  • 回答数

    3

  • 浏览数

    303

sdonkey
首页 > 期刊问答网 > 期刊问答 > 嵌入式技术应用论文

3个回答 默认排序1
  • 默认排序
  • 按时间排序

xiner214

已采纳
(框架是整个系统或系统的一部分的可重用性设计,由一组抽象出来的类及其实例间的相互作用方式组成。)框架把一个系统有机地分解成一组相对独立的构件,并定义了各个构件间的接口和作用关系,符合软件工程中设计的模块化、独立化和信息隐藏等特征。框架提供了一个大粒度的重用技术,即不仅支持源代码级的重用,而且支持分析和设计以及体系结构的重用,因而被认为是一种最有前途的面向对象技术。框架必须是健壮的、可扩展的、灵活的,它要求基于开放或共享标准。框架的设计要力求做到完备性、灵活性、可扩展性、可理解性,同时抽象能用于不同的场合;用户能轻松地添加和修改功能,定制框架;用户和框架的交互清晰,文档齐全。框架设计的一个核心问题就是发现可重用的设计和“热点”,以保证框架具备充分的灵活性,使用户能在已有构件的基础上生成应用程序,实现“零代码编写”的理想目标。 2如何设计框架目前框架的设计大都采用实践法。实践法是指从若干个具体的典型应用中,抽象出现似点来构建框架;框架反过来又应用于不同的问题,并在解决不同问题的过程中得到更新;在框架的设计和实现的两步中,不断反复,等到框架逐渐成熟时,需要修改和反复的内容就会越来越小。具体步骤为:分析问题域,确定所需框架,从一类应用而不是单个的程序去分析、比较各种不同的软件解决方案,寻求这些方案的共性和每个程度的唯一性特性。这些共性,尤其是那些经常被多个程序使用的部分将成为框架的基础。然后,定义框架体系结构并设计,包括设计用户与框架间的交互、给用户提供的最终工具等。框架的实现:包括框架核心类的实现、框架的测试、框架的试运行、框架的反复更新。框架的部署:包括文档的提供和分发过程、为用户提供技术支持、维护和更新框架。2嵌入式框架EFC框架技术在桌面软件的开发中得到了广泛的应用,但在嵌入式开发领域,由于嵌入式开发的多样性及嵌入式操作系统的多样性,目前还没有一套完整的开发框架可供使用。因此,在嵌入式软件开发中常常是从底层做起,应用程序和RTOS密不可分。这样的开发方式不但效率不高,也不利于软件的移植。EFC(EmbeddedFoundationClasses)即嵌入式基础类库,是笔者借鉴Microsoft公司的MFC(微软基础类库—桌面系统框架库的工业标准)构建的一套在ARM平台Nucleusplus操作系统下的嵌入式开发框架。由于框架全部采用C++开发,没有和处理器相关的汇编代码,所以在其它硬件平台可不加修改地使用。如果更换不同的操作系统,则需要修改操作系统抽象层的部分代码;但由于EFC提供给上层应用程序的接口不变,所以应用程序不需要修改代码。图2EFC静态结构图 就软件的层次来说,EFC是一个操作系统之上、应用程序之下的中间件,如图1所示。在EFC中有一个操作系统抽象层,对RTOS进行了抽象和封装,提供包括任务(task)、/O驱动(driver)、定时器(timer)、信号量(semaphore)、消息队列(quecue)、事件(eventgroup)、邮箱(mailBox)、管道(pipe)以及高级中断(HISR)等基本服务的封装。为上层应用程序提供更高级的统一编程接口,它样就使应用软件的开发与具体的软件平台无关,解决了嵌入式应用软件的移植问题。在图1中,各模块之间有交界表明模块之间有接口关系。EFC、应用程序以及RTOS都和硬件驱动有接口:EFC要使用一部分核心驱动(例如实时时钟的驱动、ARM串口和网口的驱动、I2C总线的驱动等);应用程序中调用的驱动是针对具体设备的;RTOS所需要的驱动就是系统的BSP部分。EFC的静态结构图(类图)如图2所示。类图是在UML(统一建模语言)中用类和它们之间的关系描述系统的一种图示。类用类名、类的属性以及操作来表示,在图中为简单起见,省略了属性和操作;类与类之间的关系使用不同的连线表示,图中带空心三角箭头的连线表示继承关系,两端带数字的连线表示关联关系。在类图中,类的属性/方法的可见性使用“+”、“-”及“#”表示:“+”表示公共的(public),“-”表示私有的(private),“#”表示受保护的(protected)。从图2中可以看出,CMessage、CRTApp、CDevice、Cboard及Cinterface都派生于公共的类CRTObject。CRTApp对象中有受保护的CMessage、CEventLog、Cuser及CDevice各一个。CDevice对象中有一个或多个CBoard对象,相应的每个CBorad对象中有0个到多个CxxxInterace对象。1基本数据类型构建一个框架,需要一些基本的元素,这些元素要在框架的构造以及应用程序开发中大量使用。这些基本数据类型包括字符串类CString、集合类CArray、Clist及Cmap。CString包括一个长度可变的字符序列,提供使用非常直观方便的运算符(例如+,+=,=,==,!=)和一些Todouble()、Tolong()、Tohex()等);CArray是具有内建索元素很快的检索速度;Clist为其所存储的每一个元素,都提供了两个指针,分别指向位于其前和其后的元素,形成一个双向链表,这使得插入和删除操作十分快捷;CMap为其存储的每个数据都附带一个关键字,并以关键字所组成的一个hash表作为索引,从而使得元素搜索、增加和删除操作都具有很高的效率。2RTOS的抽象和封装CRTObject是一个EFC中最基础的类,它不但是EFC中CRTApp、CDevice等类的基类,而且可以作为所有使用EFC的嵌入式开发人员定义新的类的超类。CRTObject类在EFC中主要承担RTOS抽象和封装任务。它提供了下面一些最基本的功能:*CRTObject对RTOS的常用对象进行了封装,提供包括Task、Driver、Timer、EventGroup、Semaphore、Queue、Pipe、Mailbox等的创建、删除、查找等功能的成员函数。这些函数提供了一个简单有效的方法来使用RTOS的对象。使用这些函数能够保证对象创建与销毁的安全性,而不会造成内存泄漏。*CRTObject提供了对RTTI(Run-TimeTypeInformation,运行时类型信息)的支持,在新的C++标准中,RTTI已经是C++的一个功能,但并不是所有的编译器都提供支持这些新特性,ADS2就不支持。所以在这里参考MFC,通过宏的方式为每个类定义一个CRuntimeClass类型的静态常量和相关的成员函数。CRuntimeClass结构保证了类型的静态常量和相关的成员函数。CRuntimeClass结构保存了类的名称、大小等信息,这样我们就能在程序运行时确定对象的具体类型。*CRTObject还提供了把类的成员函数作为任务及定时器的回调函数的功能。在Nucleus中,任务和定时器的回调函数只能是全局函数或者类的静态成员函数,这在面向对象的开发中很不方便。这里通过把成员函数指针和对象的this指针作为参数传递给RTOS,在RTOS调用公共回调函数时再取出来。通过函数指针的方式去调用类的成员函数,这样把有派生于CRTObject的类就可方便地使用成员函数作为任务、定时器等对象的回调函数。3应用程序类CRTAppCRTApp类用来定义整个应用程序对象,提供系统初始化、管理其它对象以及运行应用程序的功能。任何使用EFC框架的应用程序有且只能有一个派生于此类的对象。CRTApp对象中包含了动态创建的CMessage、CEventLog、CDevice及Cuser对象。通过在Nucleus的入口函数Application_Initialize中创建系统初始化任务(回调函数为CRTApp类的成员函数InitTask),来把系统控制权交给CRTApp对象,在其中完成其它对象的创建、系统的配置以及初始化任务。4文件系统在嵌入式设备中通常使用Flash存储器来保存程序代码和数据,每片Flash一般由一定数量大小不等的扇区组成。它在读取方面与普通RAM存储器类似,可以实现随机的读取,但在写入操作上却有很大的不同。Flash中只有空白的单元才可以进行写入操作,要向非空的单元写入数据,需要先擦除整个扇区。所以程序中如果直接对Flash进行操作会很不方便。最好的办法就是在其上构造一个文件系统,文件系统提供简便、可靠的接口供上层使用,而把复杂的操作屏蔽在文件系统内部。这里文件系统包括内存文件系统和Flash文件系统。CFile是一个抽象类,只是定义文件系统的接口函数(例如Open、Read、Write、Seek、GetLength、Close等),具体的实现在CMemFile(内存文件)及CFlashFile(Flash文件)类中完成。5设备管理在EFC中,设备管理由CDevice、CBoard、CInterface及其派生类完成。CDevice类代表整个设备,1个设备中包含1到多个CBoard对象,而每个CBoard对象中又包含0个到多个接口对象(CInterface类的派生类对象)。这样以来,嵌入式设备(仅限通信领域)都可由这几个类组合而成,大大简化了软件的设计。6命令处理CMessage类是系统的命令处理模块,它直接派生于CRTObject类。它的功能主要是接收网管软件通过串口或网口发送未来的各种命令,完成对设备的配置管理、性能管理、告警管理、安全管理和维护管理等管理功能。CMessage类主要有表1所列的任务。表1CMessage类中的任务任务名称任务处理函数说 明TCP服务器监听任务TCPServerTask用于监听客户端的连接请求TCP响应任务TCPEchoTask对每客户端的连接都创建一响应任务串口任务UartTask通过串口对系统进行管理TFTP备分份任务TFTPClientPutTask备份应用程序和系统配置文件TFTP升级任务TFTPClientGetTask用于升级应用程序及修改用户配置文件7其它模块CFlash类封装对Flash芯片的操作,主要包括读、写、擦除等操作。从图2可以看出,CEventLog和CFlashFile类中都包含CFlash对象;CEventLog类记录系统中的发生的事件以及系统运行过程中产生的告警信息。为了实现掉电保存功能,这些事件都保存在Flash芯片中;Cuser类用来对系统的用户进行管理,防止对系统非授权的访问。3使用EFC的设计方案举例这里以在通信和工业自动化领域使用较多的串口服务器为例,来说明使用FEC嵌入式开发框架的设计方案。串口服务器是一种可把多路异步RS232/RS485串行数据与通过以太网口传送的TCP/IP数据包进行相互转换,使传统的异步串行数据信息能通过Internet或Intranet传送或共享的设备。设每个串口对应TCP/IP的一个端口,则可画出图3所示的静态结构图(图中SerSvr是Server的简写)。从图3可以看出,共对五个类进行了派生。CSerSvrMessage类派生于CMessage类,用于通过网管对串口服务器进行管理(这里具体命令略);CserSvrDevice类派生于CDevice类,代表串口服务器设备;CserSvrDevice类对象中有一个或多个派生于CBoard类的CserSvrBoard类对象,而每个CserSvrBoard类对象拥有一个或多个派生于CasyInterface类的CSerSvrInterface类对象;ScerSvrApp类派生于CRTApp类,代表整个应用程序,并重载了虚函数OnCreateMessage()及OnCreateDevice(),用来在其中创建系统的CSerSvrMessage和CserSvrDevice类的实例来代替系统默认的CMessage和CDevice实例。串口服务器系统软件静态结构图 串口类CSerSvrInterface的设计是整个设计的关键,在每个串口类中都有一个TCP监听任务TCPServerTask用来作为服务器去监听客户端的连接;一个TCP客户端任务TCPClientTask用来连接其它服务器。无论是通过TCPServerTask还是TCPClientTask建立连接后,就挂起这两个任务而启动另外两个任务TCPSendTask和TCPRecvTask,它们分别用来通过网口发送数据和接收数据。TCPSendTask每隔10ms(对波特率为2K的情况,10ms最多收到的字节数为115200/(8+2)/1000*10=2字节,所以串口的FIFO应大于116字节)把从串口读到的数据打包从网口发送出去;而TCPTecvTask使用阻塞方式读取网口数据。在读到数据后,根据串口发送缓冲区的情况慢慢通过串口往外发送,没发送完之前就不进行下一次从网口的数据读取。这样把串口类设计成一个完备的处理类,设备中每块板有多少串口就在CSerSvrBoard类的实例中有多少CSerSvrInterface类的实例。硬件模块化的结构简单地对应软件模块化的结构。结语本文讲述了在嵌入式软件开发中使用C++构建系统开发框架的方法,并给出了框架的模型和应用实例。可以看出,使用面向对象的框架技术对于提高开发效率、降低开发难度、规范开发模式、便于软件的移植和维护方面,具有传统面向过程的开发方法不可比拟的优势。

嵌入式技术应用论文

164 评论(8)

niubihh

我写的《基于嵌入式机器视觉的信息采集与处理技术研究》。别着急,之前我找莫文'网做的文章,高手就是专业,两三下就通过了  研制了Linux与Android系统的嵌入式机器视觉设备。该设备使用核心为嵌入式计算机的手机开发模块代替计算机视觉系统中的计算机和摄像头部分,实现图像采集和数据处理;利用倾角测量技术控制摄像头与研究对象之间的角度;采用距离测量技术控制摄像头与研究对象之间的距离;采用Java语言为该设备和市场上流行的Android系统智能手机I9300开发了图像处理软件。  还有些资料的
164 评论(11)

szqlzxl

对系统的移植和裁剪,以达到所需的系统要求以PowerPC8xx系列处理器为例,通过对此类处理器的引导模式。引导代码的编写和调试,以及如何引导操作系统执行等问题的研究,探索嵌入式系统引导过程的一种解决方案。关键词:MPC860嵌入式操作系统存储映射引导嵌入式系统应用开发不同于PC机,其开发过程同时涉及软硬件,需要将硬件平台的设计。操作系统以及上层应用开发综合考虑;而PC机应用开发建立在已经定制好的硬件和操作系统平台上,开发者只需调用系统提供的接口和服务完成相应的功能。由于应用和成本约束,嵌入式系统的硬件平台需根据应用量身定制,通常所用的MPU存储器。外围设备等有多种选择余地,而且软件调试技术特殊,使平台的引导设计变得十分复杂。因此,对于嵌入式系统开发者而言,有必要深入分析系统引导过程,将软硬件开发有效地综合,即针对不同的硬件平台和软件运行模式,正确地进行底层上电初始化,进而引导操作系统执行。这个问题的核心在于对系统的引导模式的研究。嵌入式系统的启动代码一般由两部分构成:引导代码和操作系统执行环境的初始化代码。其中引导代码一般也由两部分构成:第一部分是板级。片级初始化代码,主要功能是通过设置寄存器初始化硬件的工作方式,如设置时钟。中断控制寄存器等,完成内存映射。初始化MMU等;第二部分是装载程序,其功能是将操作系统和应用程序的映像从只读存储器装载或者拷贝到系统的RAM中,并跳转到相应的代码处继续执行。操作系统执行环境的初始化代码主要由硬件抽象层HAL代码。设备驱动程序初始化代码和操作系统执行体初始代码三部分构成。本文以摩托罗拉MPC860处理器和具有自主知识产权的操作系统CRTOSII为例,研究嵌入式系统引导程序的设计和实现技术。嵌入式软件的开发涉及调试模式和固化模式两种运行状态。调试模式主要解决如何在目标板上调试正确性未经验证的程序的问题;而固化模式主要解决如何引导已调试成功的程序的问题。相应地,引导代码的设计应针对两种模式分别进行。1调试模式的系统引导1.1调试模式引导代码的作用1调试模式的系统引导1.1调试模式引导代码的作用一个完整的嵌入式软件的解决方案大致包括四方面:①硬件平台配置初始化和系统引导代码;②操作系统软件执行环境的初始化代码;③操作系统;④应用程序。在上述四方面中,引导代码是本研究中力求解决的问题。事实上,板级初始化。操作系统硬件抽象层。设备驱动程序三者整合到一起,就构成了嵌入式系统中BSP(板级支持包)的主体。BSP的代码与具体的目标板硬件设计相关,同时也与应用程序的设计要求相关,针对应用程序提出的不同要求,例如不同设备驱动程序。不同的中断源个数。不同的中断优先级安排。是否启用MMU机制等,BSP部分应作出相应的安排。上述第四部分的应用程序是建立在前三部分正确运行的基础上,并需反复调试。由上述分析可知,BSP和应用程序代码的正确性通过一次的编写不能得到保证,需要经历“调试——修改——调试”反复的过程,因此需要建立一个可靠的调试环境。该环境建立的基础正是调模式下的引导代码。1.2引导代码的调试方法本研究实验采用一种称作BDM(Background Debug Mode)的OCD(On Chip Debuging)调试技术。BMD是由Motorola公司提供的一种硬件调试方法,类似于JTAG调试。它利用处理器提供的调试端口调试。MPC860采用一种特殊的BDM——EPBDM,其运作相当于用处理器内嵌的调试模块接管中断及异常处理,用户通过设置调试许可寄存器(debug enable register)指定哪些中断或异常发生后处理器直接进入调试状态,而不是操作系统的处理程序。进入调试状态后,内嵌调试模块向外部调试通信接口发出信号,通知一直在通信接口监听的主机调试器,然后调试器便可通过调试模块使处理器执行系统指令(相当于特权态)。由于专用的片级调试接口装置(BDI2000)的支持,不需要目标端配备相应的调试代理(Monitor)软件。1.3调试模式引导代码实现调试模式引导代码的核心在于使用BDM协议解析微指令,通过调试接口向MPC860发送信号,初始化调试环境。由于MPC860采用RISC结构,所以初始化部分主要是设置处理器内部寄存器,这个过程包括三方面内容:(1)对处理器相关寄存器进行初始化:主要是关于处理器状态的寄存器(MSRSRRSIUMCR等),中断。时钟相关模块(SYPCRSCCRPLPRCRTBSCR等)。(2)对BDM调试端口的初始化:包括调试使能寄存器DER支持指令断点的寄存器ICTRL等。(3)对片级。板级内存映射的初始化:包括内部内存映射寄存器IMMR,内存控制相关寄存器OR0~0RBR0~BR7等。它们主要功能是地址映射。片选信号选择。内存控制器选择(UMPAUMPBGPCM)。如果选择UPM,由于UPM控制采用微指令方式,而这些微指令根据内存的不同(SRAMSDRAMDRAM等),需要设计人员自行编写代码写入MPC860内部存储区相应位置。对于需要实时刷新的存储体(如SDRAM),还需设置刷新控制微指令。上述初始化代码得以执行,一方面依赖于目标机MPC860提供的调试接口支持,另一方面也需要宿主机GDB的支持。对于宿主机系统,可能选择Linux,在其下配置GBD;也可以选择Windows2000,使用可视化的调试工具LambdaTools GDB(Coretek公司产品,不支持硬件断点),或者使用BDI2000(支持硬件断点的仿真器)。不管使用哪种调试工具,都可以使用该调试器能够识别的脚本文伯存放初始化指令。这些脚本在功能上是等效的,指令的描述一般都采用如下格式:操作码寄存器数值如在嵌入式Linux下SDRAM初始化的代码片断为:mpcbdm spr MDR=0x1FF77C35mpcbdm spr MDR=0xEFEABC34mpcbdm spr MDR=0x1FB57C35……而在Windows2000下使用BDI2000代码为:WUPM 0x00000005 0x1FF77C35WUPM 0x00000006 0xEFEABC34WUPM 0x00000007 0x1FB57C35……脚本描述的指令执行后,MPC860按照预先的设想进入一个可以正常工作的状态,可以用装载器将程序下载到SDRAM中调试执行。这个程序主要包含中断表。操作系统和应用程序映象两部分,其格式可以为ff等。图1给出了下载完毕后的内存映象。当程序下载完成后,PC指针指向Image代码段(text段)的首条指令,可以利用调试器提供的命令开始调试。2固化模式的系统引导2.1概述经过调试后,OS和上层应用程序构成的Image的正确性得到了保证,但是这个Image不能自主运行。因为调试模式下,是通过BDM接口初始化处理器,并且通过BDM接口将程序下载到RAM中去运行。实际应用环境中,Image必须被存储在非易失性存储器中,如FEPROM等,本文选择Flash。系统启动时,处理器执行一段引导程序替代调试模式下的调试脚本和装载程序的功能。启动代码主要考虑以下几个问题:(1)系统上电和复位时程序如何执行,需要初始化哪些寄存器,重点仍然是内存映射相关部分;(2)启动代码为几部分,每部分代码应该全部还是部分放到Flash或者RAM中执行;(3)在时间效率和空间效率的折衷。2.2上电初始化在两种引导模式下,上电初始化总是必要步骤。它涉及各种核心寄存器初始化。地址映射等问题的处理。2.2.1地址映射MPC860的复位是通过一种异常中断来处理的(可理解为CPU自己产生的中断),向量号为0x100。异常向量表的基地址加上复位向量号即为复位向量,也就是CPU开始执行指令的地方。异常向量表在内存空间的可能位置有两个:0x0000000和0xFFF00000。所以PowerPC的复位向量为0x100或0xFFF00100。假设复位向量为0xFFF00100,系统有128K字节的Flash,并准备把它映射到CPU内存空间0xFE000000开始的地址。MPC860内部的CS0片选信号是默认的系统启动片选信号,已被连接到Flash的片选线上。上电时,内存控制器会忽略所有参与征选逻辑的地址线的高17位,CS0总是有效。这样,Flash总会被选中,CPU从Flash偏移0x100的地方取指令,此时CPU的4GB内存空间的每个128KB的块都被映射到Flash。2.2.2寄存器初始化固化方式下的大致相同,但是不再采用脚本文件编写,而是直接将一段MPC860汇编程序存放在一个s文件中。与调试模式初始化程序一样,主要完成以下处理:(1)初始化CPU核心寄存器;(2)设置机器状态寄存器;(3)禁止ceche;(4)初始化IMMR;(5)初始化系统接口单元(SIU);(6)初始化时钟和中断控制寄存器;(7)初始化通信处理机(CPM);(8)初始化内存控制器(UPM);(9)初始化C语言堆栈。2.2.3地址空间重映射上电时,由于只有一个片选信号有效,它选通了Flash,而RAM和其它存储设备地址无效,需要经过地址空间重映射才能访问。MPC860的地址空间重映射是通过设置0R0~ORBR0~BR7这十六个寄存器完成的。由于上电时4GB的地址空间均被Flash占用,所以0xFFF00100这个地址仍在Flash的偏移0x100处。在寄存器初始化过程中,需要把SDRAMMPC860内部寄存器空间以及外设等也映射进来。在进行这些操作前,需要把Flash的位置固定下来,例如映射到0xFE000000,这个操作是通过设置OR0和BR0寄存器实现的。但在写OR0时,CPU仍然在0xFFF00000的那一块取指令,而Flash即将被映射到0xFE000000块,所以程序必定出现“跑飞”的现象,必须对程序计数器(PC)进行调整,然而PC指针对程序员是不可见的,必须用跳转指令修改它。在Flash地址映射完成后,通过设置OR1~ORBR1~BR7可以完成对所有存储器空间的映射,各种存储设备可映射在CPU地址空间中的任意位置,但相互之间不能冲突。2.3引导代码的构成和运行系统启动所涉及的代码由寄存器初始化汇编文件一个Load程序以及操作系统与应用程序的Image三部分构成,引导代码则只包含s和Load程序。Load程序的作用是将操作系统与应用程序的构成的Image从Flash拷贝到SDRAM中,并跳转到Image的首条指令。调试完成后的Image有两种运行模式:Flash-resident image:Load程序仅仅把Image中的数据段(data+bss)复制到RAM中,代码段(text)在Flash中直接运行。Flash-based image:Load程序把Image完全搬到RAM中执行,包括image中的代码段(text)和数据段(data+bss)。图2和图3分别描述了两种Image的存贮映象,以及从Flash到SDRAM的装载过程。2.4时间效率和空间效率上的折衷在嵌入式系统的应用过程中,针对不同的应用环境,对时间效率和空间效率有不同的要求,基于MPC860的启动代码对此有比较充分的解决方案。2.4.1时间限制时间限制主要包括两种情况:系统要求快速启动和系统启动后要求程序高速执行。对于要求快速启动的系统,应该使在Flash中执行的初始化程序尽量简短,诸如循环语句之类的语法应该尽量减少,尽快将程序装载到RAM中执行,这样做的原因在于Flash的访存时间与RAM的访存时间存在数量级上的差距。但是必须根据代码量以及存储器的特片进行权衡。因为,虽然RAM中捃速度快,但是将Flash中的代码复制到RAM中的操作会带来一定的开销。由于可见,启动时间由Flash中引导代码的运行时间。代码从Flash拷贝到RAM的时间以及RAM中后续启动代码的运行时间三部分组成。启动时间的最小值是这三者和的最小值。对于启动后要求程序高速执行的系统,主要受处理器。存储器特性以及I/O速度等的影响。在软件方面,应该采用了上述Flash-based image方式,使得代码段在RAM中运行,提高运行速度。2.4.2空间限制空间限制主要包括两种情况:Flash等非易失性存储空间有限和RAM等易失性空间有限两种系统。对于采用高性能非易失性存储器的系统,出于成本因素,Flash等存储设备不能太大,然而它又是系统存放启动代码和操作系统Image的地方。在存放Image时,可以先使用gzip等压缩工具进行压缩,在将Image加载到RAM时采用逆向的解压缩算法解压。同时,出于实时性考虑,压缩算法不能过于复杂,否则压缩解压过程消耗大量时间将与启动时间限制发生严重冲突。采用压缩策略并不一定会增加系统启动时间,因为压缩解压过程虽然消息了一定的时间,但是由于Image体积减小,由Flash复制到RAM中的时间相应减少,有可能反而减少了时间消耗。对于采用高性能RAM的系统,同样出于成本因素,RAM空间有一定限制,此时一般采用前文描述的Flashresident image方式:Load程序把Image中的数据段复制到RAM中,代码段在Flash中运行。折衷同样存在,因为code段在低速的Flash中运行,在节省空间的同时,却牺牲了时间。本文介绍了基于嵌入式处理器的操作系统引导方法,重点研究嵌入式系统的引导模式以及不同类别的引导方法。以在MPC860C处理器上引导CRTOSII操作系统为例,阐述了调试模式和固化模式下引导代码的构成。作用以及执行方式,并对不同引导模式下的时空效率的折衷进行了分析。最终,借助BDI2000仿真器对编写的引导代码进行调试,成功实现了调试模式和固化模式下操作系统的引导。后续工作包括:继续研究在不同硬件平台上的操作系统引导方法,例如最流行的ARMX86系列;在同一平台上,可以研究不同操作系统的启动方法,例如嵌入式LVWinCE等。
245 评论(15)

相关问答