资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,4,章 无操作系统的应用软件开发,嵌入式软件系统:无操作系统和有操作系统;,无操作系统包含,引导程序,和应用程序。,有操作系统在引导程序结束后,要运行操作系统,并将应用程序作为任务添加到操作系统中。,嵌入式操作系统不管是否使用操作系统,都需要一段引导程序,bootloader,来初始化硬件,为操作系统或应用程序做准备。,引导程序是驻留在磁盘的第一个扇区的程序,例如硬盘的,MBR,(主引导记录)。在启动过程中,在检测过系统之后,如果系统被设置成为从,MBR,引导的话,,BIOS,(基本输入,/,输出系统)将控制权交给,MBR,,而驻留在,MBR,中的程序就是引导程序,它负责将控制权传递给操作系统,以完成启动过程。,GRUB,是功能强大的引导程序,可以引导多种不同类型的操作系统,例如,Windows,DOS,Linux,GNU,Hurd,*BSD,等。,LILO,是最流行的引导程序,用来引导多种不同的操作系统。,1.,无操作系统的软件运行模式,A,应用程序和引导程序在一个工程中一起被编译成,.bin,文件,烧写到,Flash,的,0 x0,地址,B,应用程序和引导程序分别被编译为两个,.bin,引导程序烧写到存储器地址,0 x0,,应用程序烧写到某个地址,C,扩展引导程序,使其初始化功能结束后可以跳转到一个函数入口,也可以跳转到指定地址,D,应用程序编译为,.,axf,文件,下载到,SDRAM,存储器中运行。,应用程序,引导程序,SDRAM,flash,2MB,16MB,0 x000 0000,0 x100 0000,0 x120 0000,IMPORT,C_Entry,BL,C_Entry,无操作系统运行模式,A,应用程序,引导程序,SDRAM,flash,2MB,16MB,0 x000 0000,0 x100 0000,0 x120 0000,0 x001 0000,LDR R1,=0 x10000,MOV PC,,,R1,无操作系统的软件运行模式,B,目前应用在手机上的操作系统主要,有,PalmOS,、,Symbian,、,Windows CE,和,Linux,四种。,Palm OS,操作系统,Palm OS,操作系统由,Palm,公司自行开发的,并授权给,Handspring,、索尼和高通等设备厂家,这种操作系统更倾向于,PDA,的操作系统。,Palm OS,在,PDA,市场占有主导地位。,Palm,的产品线本身就包括智能手机,又宣布与最早的智能手机开发者,Handspring,购并,同时将软件部门独立。,Symbian,是一个实时性、多任务的纯,32,位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持,GPRS,、蓝芽、,SyncML,、以及,3G,技术。最重要的是它是一个标准化的开放式平台,任何人都可以为支持,Symbian,的设备开发软件。,Symbian,系统,第一款基于,Symabian,系统的手机是,2000,年上市的某款爱立信手机。而真正较为成熟的同时引起人们注意的则是,2001,年上市的诺基亚,9210,,它采用了,Crystal,分支的系统。而,2002,年推出的诺基亚,7650,与,3650,则是,Symbian,Pearl,分系的机型,其中,7650,是第一款基于,2.5G,网的智能手机产品,他们都属于,Symbian,的,6.0,版本。,Windows CE,系统,Windows CE,系统包括,Pocket PC,和,Smartphone,,前者针对无线,PDA,,后者专为手机,已有多个来自,IT,业的新手机厂商使用,增长率较快。,Pocket PC 2002,推出了应用在手机上的,Phone Edition,(电话版本),国内贴牌机多普达,686,就使用了这个系统。不过它在移动通讯方面的功能并不是很全面。针对这种情况,微软于,2002,年底发布了专门为手机开发的操作系统,SmartPhone2002,,像,symbian,Pearl,一样,是专为移动通讯设备开发的系统。,虽然从众多手机厂商的反应来看,全球手机五大厂商中只有三星购买了微软的软件许可,所以其在手机市场上占有率还很低。,Linux,系统,Linux,系统件是一个源代码开放的操作系统,目前已经有很多版本流行。但尚未得到较广泛的支持。,操作系统:,Symbian,S40,诺基亚,6600S,诺基亚,5230XM,Symbian,OS 9.3,版,S60,第三版,诺,基亚,6700s,Palm Web OS,palm,Pixi,Plus,夏新,WinCE,手机,E8,Windows CE,操作系统,摩托罗拉,V8,系统:,Linux,摩托罗拉,A1600,黄金版,软件系统开发概述,嵌入式系统的,Bootloader,,类似于,PC,上的,BIOS,,,系统上电复位后,首先执行的一段程序,用以完成,整个系统的启动加载任务。,1.Bootloader,的基本任务,Bootloader,一般是被烧录或者下载到,bootrom,的,0 x0,地址处,作为上电后执行的第一部分指令,,bootloader,需要完成两个任务:,(1).memory remap,(2).,把,kernel,装载到,SDRAM,里合适的位置上去。在完成这两个任务后,,bootloader,就“功成身退”了。,2,4510B,开发板上的存储介质,一块,4510B,开发板上,一般有三种存储介质:,FLASH,,,SDRAM,和,4510,片内的,SRAM,。,FLASH,一般是只读的(只在运行的时候),而且一般都作为,bootrom,使用,因为,FLASH,里存储的内容在掉电的时候也不会,丢失,所以,flash,很适合作为,bootrom,,用来保存,bootloader,。,SDRAM,,是可读写的存储介质,速度比,FLASH,快的多,在,系统运行的时候,,SDRAM,是主要的存储介质。但,SDRAM,里,的数据在掉电后即消失,无法用来保存数据。所以每次启动,的时候都需要,bootloader,将内核装重新装载到,SDRAM,里去。,在,4510,的片内还集成了,8k,的,SRAM,,,SRAM,也是可读写的,,一般作为系统的,cache,使用。,3,一般程序结构,一般的可执行程序都包括代码段、数据段和,BSS,段。也可以简单的看作由两部分组成:,RO,段和,RW,段。,RO,段一般包括代码段和一些常量,在运行的时候是只读的。,RW,段包括一些全局变量和静态变量,在运行的时候是可以改变的(读写)。如果有部分全局变量被初始化为零,则,RW,段里还包括了,ZI,段。,RO:Read Only,RW,:,Read Write,ZI:Zero Init,RO,段是只读的,在运行的时候不可以改变,所以,在运行的时候,,RO,段可以驻留在,Flash,里(当然也可以在,SDRAM,或者,SRAM,里了)。而,RW,段是可以读写的,所以,在运行的时候必须被装载到,SDRAM,或者,SRAM,里。,在,ADS,里,有一些预先定义了的变量可以用(,linker defined symbol,)。在下面的实现里,用到了几个预定义的变量:,Image$RO$Base,该变量指定了,RO,段的,BASE,Image$RO$Limit,该变量指定了,RO,段的,Limit,Image$RW$Base,该变量指定了,RW,段的,BASE,Image$RW$Limit,该变量指定了,RW,段的,Limit,Image$ZI$Base,该变量指定了,ZI,段的,BASE,Image$ZI$Limit,该变量指定了,ZI,段的,Limit,Image$RO$Limit,减,Image$RO$Base,等于,RO,段的大小,Image$RW$Limit,减,Image$RW$Base,等于,RW,段的大小,Image$ZI$Limit,减,Image$ZI$Base,等于,ZI,段的大小,4.,程序的实现与分析:,(,1,)进入,SVC32,工作模式,并且禁止所有的中断,地址,异常,进入模式,0 x0000 0000,复位,管理模式,0 x0000 0004,未定义指令,未定义模式,0 x0000 000,8,软件中断,管理模式,0 x0000 000,C,中止(预取指令),中止模式,0 x0000 00,10,中止(,数据,),中止模式,0 x0000 00,1,4,保留,保留,0 x0000 0018,IRQ,IRQ,0 x0000 001,C,FIQ,FIQ,异常向量表,当异常发生时,处理器,PC,指针会强制性跳转到固定的地址处,,根据异常的类型不同,各地址也各部相同。,CODE32,AREA,Init,CODE,READONLY,ENTRY,B,Reset_Handler,;,启动后跳转到标号,;,Reset_Handler,处,NOP ;,未定义指令中断,NOP ;,软件中断,NOP ;,预取指令终止,NOP ;,数据终止,NOP ;,保留,NOP ;IRQ,中断,NOP ;FIQ,中断,没有使用中断时,在中断向量表处可存放,NOP,指令,需要使用,中断向量时,如,IRQ,中断时,在相应的中断向量地址处存放一,条跳转到中断服务程序的跳转指令即可。,NOP ;,未定义指令中断,NOP ;,软件中断,NOP ;,预取指令终止,NOP ;,数据终止,NOP ;,保留,B,IRQHandler,;IRQ,中断,NOP ;FIQ,中断,(,2,)初始化系统配置寄存器,系统配置寄存器,SYSCFG,决定了编址空间中特殊功能寄存器组,的起始地址,以及片内,SRAM,的使用方式和起始地址,应首先,对其初始化。(基址为,0 x3FF 0000,),寄存器,偏移地址,描述,复位值,ROMCON0,0 x3014,ROM/SRAM/Flash,组,0,控制寄存器,0 x2000 0060,ROMCON1,0 x3018,ROM/SRAM/Flash,组,1,控制寄存器,0 x0000 0060,ROMCON2,0 x301C,ROM/SRAM/Flash,组,2,控制寄存器,0 x0000 0060,ROMCON3,0 x3020,ROM/SRAM/Flash,组,3,控制寄存器,0 x0000 0060,ROMCON4,0 x3024,ROM/SRAM/Flash,组,4,控制寄存器,0 x0000 0060,ROMCON5,0 x3028,ROM/SRAM/Flash,组,5,控制寄存器,0 x0000 0060,因为试验板在硬件上只连接了一片,Flash,芯片,,Bootloader,只需要对寄存器,ROMCON0,进行初始化,另外,5,个寄存器的,值设置为,0.,ROMCON0 EQU 0 x3FF3014 ;Flash,配置寄存器地址,rfROMCON0 EQU 0 x0200 0060,rROMCON1 EQU 0 x0,rROMCON2 EQU 0 x0,rROMCON3 EQU 0 x0,rROMCON4 EQU 0 x0,rROMCON5 EQU 0 x0,【19,:,10】,;该设置值左移,16,位即为,ROM/SRAM/Flash,组,的起始地址,【29,:,20】,;该设置值左移,16,位减去,1,即为,ROM/SRAM/,Flash,组的结束地址,0 x0200 0060,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,10,位,19,位,第一次映射设置为:,00 0000,0000,,起始地址为,0 x0,第一次映射设置为:,00 0010 0000,,结束地址为,0 x20 0000,第二次映射设置为:,01 0000,0000,,起始地址为,0 x100 0000,第二次映射设置为:,01 0
展开阅读全文