




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章无操作系统的应用软件开发,嵌入式软件系统:无操作系统和有操作系统;无操作系统包含引导程序和应用程序。有操作系统在引导程序结束后,要运行操作系统,并将应用程序作为任务添加到操作系统中。嵌入式操作系统不管是否使用操作系统,都需要一段引导程序bootloader来初始化硬件,为操作系统或应用程序做准备。,引导程序是驻留在磁盘的第一个扇区的程序,例如硬盘的MBR(主引导记录)。在启动过程中,在检测过系统之后,如果系统被设置成为从MBR引导的话,BIOS(基本输入/输出系统)将控制权交给MBR,而驻留在MBR中的程序就是引导程序,它负责将控制权传递给操作系统,以完成启动过程。GRUB是功能强大的引导程序,可以引导多种不同类型的操作系统,例如Windows,DOS,Linux,GNUHurd,*BSD等。LILO是最流行的引导程序,用来引导多种不同的操作系统。,1.无操作系统的软件运行模式,应用程序,引导程序,SDRAM,flash,2MB,16MB,0 x0000000,0 x1000000,0 x1200000,IMPORTC_EntryBLC_Entry,无操作系统运行模式A,应用程序,引导程序,SDRAM,flash,2MB,16MB,0 x0000000,0 x1000000,0 x1200000,0 x0010000,LDRR1,=0 x10000MOVPC,R1,无操作系统的软件运行模式B,目前应用在手机上的操作系统主要有PalmOS、Symbian、WindowsCE和Linux四种。,PalmOS操作系统PalmOS操作系统由Palm公司自行开发的,并授权给Handspring、索尼和高通等设备厂家,这种操作系统更倾向于PDA的操作系统。PalmOS在PDA市场占有主导地位。Palm的产品线本身就包括智能手机,又宣布与最早的智能手机开发者Handspring购并,同时将软件部门独立。,Symbian是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS、蓝芽、SyncML、以及3G技术。最重要的是它是一个标准化的开放式平台,任何人都可以为支持Symbian的设备开发软件。,Symbian系统,第一款基于Symabian系统的手机是2000年上市的某款爱立信手机。而真正较为成熟的同时引起人们注意的则是2001年上市的诺基亚9210,它采用了Crystal分支的系统。而2002年推出的诺基亚7650与3650则是SymbianPearl分系的机型,其中7650是第一款基于2.5G网的智能手机产品,他们都属于Symbian的6.0版本。,WindowsCE系统,WindowsCE系统包括PocketPC和Smartphone,前者针对无线PDA,后者专为手机,已有多个来自IT业的新手机厂商使用,增长率较快。PocketPC2002推出了应用在手机上的PhoneEdition(电话版本),国内贴牌机多普达686就使用了这个系统。不过它在移动通讯方面的功能并不是很全面。针对这种情况,微软于2002年底发布了专门为手机开发的操作系统SmartPhone2002,像symbianPearl一样,是专为移动通讯设备开发的系统。虽然从众多手机厂商的反应来看,全球手机五大厂商中只有三星购买了微软的软件许可,所以其在手机市场上占有率还很低。,Linux系统Linux系统件是一个源代码开放的操作系统,目前已经有很多版本流行。但尚未得到较广泛的支持。,操作系统:SymbianS40,诺基亚6600S,诺基亚5230XM,SymbianOS9.3版,S60第三版,诺基亚6700s,PalmWebOS,palmPixiPlus,夏新WinCE手机E8,WindowsCE操作系统,摩托罗拉V8,系统:Linux,摩托罗拉A1600黄金版,软件系统开发概述,嵌入式系统的Bootloader,类似于PC上的BIOS,系统上电复位后,首先执行的一段程序,用以完成整个系统的启动加载任务。,1.Bootloader的基本任务,Bootloader一般是被烧录或者下载到bootrom的0 x0地址处,作为上电后执行的第一部分指令,bootloader需要完成两个任务:(1).memoryremap,(2).把kernel装载到SDRAM里合适的位置上去。在完成这两个任务后,bootloader就“功成身退”了。,24510B开发板上的存储介质,一块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:ReadOnlyRW:ReadWriteZI:ZeroInit,RO段是只读的,在运行的时候不可以改变,所以,在运行的时候,RO段可以驻留在Flash里(当然也可以在SDRAM或者SRAM里了)。而RW段是可以读写的,所以,在运行的时候必须被装载到SDRAM或者SRAM里。,在ADS里,有一些预先定义了的变量可以用(linkerdefinedsymbol)。在下面的实现里,用到了几个预定义的变量:Image$RO$Base该变量指定了RO段的BASEImage$RO$Limit该变量指定了RO段的LimitImage$RW$Base该变量指定了RW段的BASEImage$RW$Limit该变量指定了RW段的LimitImage$ZI$Base该变量指定了ZI段的BASEImage$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工作模式,并且禁止所有的中断,异常向量表,当异常发生时,处理器PC指针会强制性跳转到固定的地址处,根据异常的类型不同,各地址也各部相同。,CODE32AREAInit,CODE,READONLYENTRYBReset_Handler;启动后跳转到标号;Reset_Handler处NOP;未定义指令中断NOP;软件中断NOP;预取指令终止NOP;数据终止NOP;保留NOP;IRQ中断NOP;FIQ中断,没有使用中断时,在中断向量表处可存放NOP指令,需要使用中断向量时,如IRQ中断时,在相应的中断向量地址处存放一条跳转到中断服务程序的跳转指令即可。,NOP;未定义指令中断NOP;软件中断NOP;预取指令终止NOP;数据终止NOP;保留BIRQHandler;IRQ中断NOP;FIQ中断,(2)初始化系统配置寄存器,系统配置寄存器SYSCFG决定了编址空间中特殊功能寄存器组的起始地址,以及片内SRAM的使用方式和起始地址,应首先对其初始化。(基址为0 x3FF0000),因为试验板在硬件上只连接了一片Flash芯片,Bootloader只需要对寄存器ROMCON0进行初始化,另外5个寄存器的值设置为0.,ROMCON0EQU0 x3FF3014;Flash配置寄存器地址,rfROMCON0EQU0 x02000060,rROMCON1EQU0 x0rROMCON2EQU0 x0rROMCON3EQU0 x0rROMCON4EQU0 x0rROMCON5EQU0 x0,【19:10】;该设置值左移16位即为ROM/SRAM/Flash组的起始地址,【29:20】;该设置值左移16位减去1即为ROM/SRAM/Flash组的结束地址,0 x02000060,10位,19位,第一次映射设置为:0000000000,起始地址为0 x0,第一次映射设置为:0000100000,结束地址为0 x200000,第二次映射设置为:0100000000,起始地址为0 x1000000,第二次映射设置为:0100100000,结束地址为0 x1200000,DRAM/SDRAM控制寄存器DRAMCONn,试验板在硬件上只连接了一组3位SDRAM存储器,Bootloader只需要对寄存器DRAMCON0进行初始化,另外3个寄存器的值设置为0.,SDRAMCON0EQU0 x3FF302C;SDRAM配置寄存器地址,rfSDRAMCON0EQU0 x14010380,rSDRAMCON1EQU0 x0rSDRAMCON2EQU0 x0rSDRAMCON3EQU0 x0,【19:10】;该设置值左移16位即为SDRAM组的起始地址,【29:20】;该设置值左移16位减去1即为SDRAM组的结束地址,系统配置寄存器SYSCFG,该寄存器决定系统管理器中特殊功能寄存器组的起始地址,以及片内SRAM的使用方式和起始地址。,【15:6】;该设置值左移16位即为片内SRAM组的起始地址,【25:16】;该设置值左移16位即特殊功能寄存器的起始物理地址,SYSCFGEQU0 x3FF0000;系统配置寄存器地址,rSYSCFGEQU0 xE7FFFF90;系统配置寄存器赋值,LDRR1,=SYSCFG;初始化syscfg寄存器LDRR0,=rSYSCFGSTRR0,R1,数据总线宽度寄存器EXTDBWTH,S3C4510B可以以8,16,32位的数据宽度访问外部ROM,SRAM,Flash存储器,通过设置数据宽度寄存器可以设定与特定外部存储器和外部I/O组相对应的数据宽度。,【1:0】;该设置ROM/SRAM/Flash组0的数据总线宽度00不允许01字节(8)10半字(16)11字(32),EXTDBWTHEQU0 x3FF3010;数据宽度寄存器地址,rEXTDBWTHEQU0 x00003002;数据宽度寄存器的赋值,【13:12】;该设置DRAM组0的数据总线宽度,rEXTDBWTHEQU0 x00003002;数据宽度寄存器的赋值,说明:ROM/SRAM/Flash组0中连接了16位的Flash芯片,DRAM组0中连接了32位的SDRAM其余没有使用的组均设置为00,表示没有连接物理设备。,LDRR1,=EXTDBWTH;初始化EXTDBWTH寄存器LDRR0,=rEXTDBWTHSTRR0,R1,EXTDBWTHEQU0 x3FF3010;数据宽度寄存器地址,rEXTDBWTHEQU0 x00003002;数据宽度寄存器的赋值,DRAM刷新与外部I/O控制寄存器REFEXTCON,REFEXTCONEQU0 x3FF303C,rREFEXTCONEQU0 xCE338360,初始化系统配置寄存器,数据宽度寄存器的程序为:,Reset_HandlerLDRR1,=SYSCFG;初始化syscfg寄存器LDRR0,=rSYSCFGSTRR0,R1LDRR1,=EXTDBWTH;初始化EXTDBWTH寄存器LDRR0,=rEXTDBWTHSTRR0,R1,(3)进行第一次存储器映射,板子刚上电后,只有Flash是可用的(在这里我们不考虑片内SRAM)。SDRAM没有被初始化,是不可用的。,LDRr0,=ROMCON0;把flash映射到0 x0-0 x20,把sdram映射到0 x40-0 x140LDRr1,=rfROMCON0LDRr2,=rROMCON1LDRr3,=rROMCON2LDRr4,=rROMCON3LDRr5,=rROMCON4LDRr6,=rROMCON5LDRr7,=rfSDRAMCON0LDRr8,=rSDRAMCON1LDRr9,=rSDRAMCON2LDRr10,=rSDRAMCON3LDRr11,=rREFEXTCONSTMIAr0,r1-r11,将地址从r0处开始的数据内容传送至r1-r11,将各寄存器的赋值一次性写入相应的特殊功能寄存器。,(4)从Flash复制程序到SDRAM,第一次映射中SDRAM0 x4000000 x1400000处,由于SDRAM具有更快的读、写速度,所以将程序从Flash中复制到SDRAM中执行。,ldrr0,=0 x0;初始化复制数据的源地址ldrr1,=0 x200000;初始化循环次数ldrr2,=0 x400000;初始化复制数据的目的地址,flash_copy;把程序从flash拷贝到sdramldrr3,r0,#4strr3,r2,#4subsr1,r1,#4bneflash_copy,(5)进行第二次存储器映射,将SDRAM存储器地址映射成0 x00 x1000000,将Flash存储器地址映射到0 x12000000 x1400000.,由于Flash存储器比SDRAM容量小,读写速度慢,而ARM芯片的硬件构成决定了异常向量必须存放在0 x0处,如果将Flash映射到0 x0,将明显减少系统对异常的处理时间,在Flash中不方便对异常向量表的修改通常将异常向量表存放到SDRAM中,因此要进行第二次映射。,实现第二次映射的程序:,LDRr0,=ROMCON0;把flash映射到0 x0-0 x20,;把sdram映射到0 x40-0 x140LDRr1,=rsROMCON0LDRr2,=rROMCON1LDRr3,=rROMCON2LDRr4,=rROMCON3LDRr5,=rROMCON4LDRr6,=rROMCON5LDRr7,=rsSDRAMCON0LDRr8,=rSDRAMCON1LDRr9,=rSDRAMCON2LDRr10,=rSDRAMCON3LDRr11,=rREFEXTCONSTMIAr0,r1-r11,SDRAM在016M的位置,而flash被映射到到了1618M的位置。由于在SDRAM有一份bootloader的拷贝,所以在重新后bootloader可以继续执行。,(6)初始化堆栈指针,使用mov,msr指令,movr0,#0 x12MSRcpsr_c,r0movsp,#0 x700000;设置IRQ堆栈指针;movr0,#0 x11MSRcpsr_c,r0movsp,#0 x7f0000;设置FIQ堆栈指针movr0,#0 x13MSRcpsr_c,r0movsp,#0 x800000;设置SVC堆栈指针,运行模式为M【4:0】的具体含义,movr0,#0 x12MSRcpsr_c,r0movsp,#0 x700000;设置IRQ堆栈指针,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【教案版】小学四班级下册 跳跃2
- 中国舞蹈音乐教学课件
- 2025年船舶驾驶员适任考试模拟题与答案解析
- 2025年行政主管招聘面试预测题及实战演练指南
- 2025年制造业招聘面试模拟题及答案详解手册
- 2025年护士执业资格考试实操技能部分要点梳理及模拟题
- 初中数学教学设计及课件
- 2025年钎焊工艺考试重点及应试技巧
- 会演戏的玩具教学课件
- 申通快递安全知识培训课件
- 人教版数学六年级下册核心素养教案全册
- 新时代劳动教育教程(中职版劳动教育)全套教学课件
- 白银公司考试题2024
- 轧光机安全操作规程范本
- 眼耳鼻咽喉口腔科护理学(高职)全套教学课件
- 中国华能:风电机组数字化感知与运行状态评估
- 海洋岩土工程的挑战与机遇
- 《高中生物学习方法》课件
- 锐器伤管理制度
- 患者隐私保护培训课件1
- 《长生生物科技股份有限公司内部控制问题分析》
评论
0/150
提交评论