嵌入式系统初始化与操作系统的移植.ppt
《嵌入式系统初始化与操作系统的移植.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统初始化与操作系统的移植.ppt(130页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1嵌入式系统设计与实例开发嵌入式系统设计与实例开发基于基于3232位微处理器与实时操作系统位微处理器与实时操作系统第六讲系统初始化分析与第六讲系统初始化分析与 C/OS-C/OS-移植移植2本节提要本节提要1 1嵌入式系统的初始化嵌入式系统的初始化2 2 C/OS-的移植的移植3初始化程序的下载执行目标机目标机宿主机宿主机1 1)通过编程器将可执行目标文件烧写到)通过编程器将可执行目标文件烧写到BootROMBootROM(ROMROM、EPROMEPROM、FLASHFLASH)等;)等;2 2)通过串行口和网口下载执行目标文件,)通过串行口和网口下载执行目标文件,要求宿主机系统上有数据传输
2、工具程序、目要求宿主机系统上有数据传输工具程序、目标机装载器、嵌入式监视器或目标机系统上标机装载器、嵌入式监视器或目标机系统上的调试代理。的调试代理。3 3)通过)通过JTAGJTAG或或BDMBDM接口下载;接口下载;MPUBOOT ROMRAM下载工具串口JTAG网口4嵌入式系统的初始化过程5嵌入式系统的初始化过程(1)硬件初始化阶段硬件初始化阶段1、复位向量、复位向量 ENTRY b ResetHandler ;for debug b HandlerUndef ;handlerUndef b HandlerSWI ;SWI interrupt handler b HandlerPabor
3、t;handlerPAbort b HandlerDabort;handlerDAbort b.;handlerReserved b HandlerIRQ b HandlerFIQ6嵌入式系统的初始化过程(2)硬件初始化阶段硬件初始化阶段2 2、最小硬件初始化、最小硬件初始化1 1)设置适当的寄存器,使嵌入式处理)设置适当的寄存器,使嵌入式处理器处于一个已知的状态:器处于一个已知的状态:l获得获得CPUCPU的类型;的类型;l获得或设置获得或设置CPUCPU的时钟频率。的时钟频率。2 2)禁止中断和高速缓存)禁止中断和高速缓存3 3)初始化内存控制器、内存芯片和高)初始化内存控制器、内存芯片和
4、高速缓存单元,包括:速缓存单元,包括:l得到内存的开始地址;得到内存的开始地址;l得到内存的大小;得到内存的大小;l如果有要求,则还需要进行主存如果有要求,则还需要进行主存测试;测试;7嵌入式系统的初始化过程(3)硬件初始化阶段硬件初始化阶段3 3、其余硬件初始化、其余硬件初始化1 1)引导代码调用合适的函数对目标机)引导代码调用合适的函数对目标机系统上的全部硬件部件进行初始化,包系统上的全部硬件部件进行初始化,包括:括:l建立执行处理程序建立执行处理程序l初始化中断处理程序初始化中断处理程序l初始化总线接口初始化总线接口l初始化板级外设得到内存的开始初始化板级外设得到内存的开始地址;地址;8
5、嵌入式系统的初始化过程(4)RTOS初始化阶段初始化阶段4 4、RTOSRTOS初始化初始化1 1)RTOSRTOS初始化初始化2 2)RTOSRTOS对象和服务初始化对象和服务初始化l任务任务l信号量信号量l定时器定时器l中断中断l内存管理内存管理3 3)RTOSRTOS任务堆栈初始化任务堆栈初始化4 4)RTOSRTOS扩展部件初始化扩展部件初始化5 5)启动)启动RTOSRTOS9嵌入式系统的初始化过程(5)应用程序初始化阶段应用程序初始化阶段5 5、应用程序初始化、应用程序初始化10ARM系统初始化的一般过程启动(系统上电启动(系统上电/复位)复位)从程序入口点从程序入口点初始化时钟等
6、硬件相关寄存器初始化时钟等硬件相关寄存器1 1、设定、设定PLLPLL2 2、关中断、关中断3 3、设置其它寄存器、设置其它寄存器初始化存储器系统初始化存储器系统FlashFlash及及SDRAMSDRAM参数设置参数设置初始化初始化C C所需要的存储器空间所需要的存储器空间调用调用C C入口函数入口函数堆栈初始化堆栈初始化11一、设置程序入口指针l上电复位后直接到程序入口点执行,入口点一般为一个上电复位后直接到程序入口点执行,入口点一般为一个跳转表,跳转到复位处理程序处开始执行跳转表,跳转到复位处理程序处开始执行ARMARM系统的初始系统的初始化;化;l启动程序首先必须定义入口指针,而且整个
7、应用程序只启动程序首先必须定义入口指针,而且整个应用程序只有一个入口指针有一个入口指针例:例:AREA Boot,CODE,READONLYAREA Boot,CODE,READONLY ENTRY /*ENTRY /*设置程序入口指针设置程序入口指针*/*/12二、设置中断向量lARMARM要求中断向量必须设置在从要求中断向量必须设置在从OX00000000OX00000000地址开始,连地址开始,连续续8*48*4字节的地址空间;字节的地址空间;l向量表包含一系列跳转指令,跳转到相应的中断服务程向量表包含一系列跳转指令,跳转到相应的中断服务程序;序;l对各未用中断,使其指向一个含返回指令的
8、哑函数,以对各未用中断,使其指向一个含返回指令的哑函数,以防止错误中断引起系统的混乱;防止错误中断引起系统的混乱;13中断向量表FIQ0 x1C外部快速中断IRQ0 x18一般外部中断(Reserved)0 x14保留Data Abort0 x10数据异常Frefetch Abort0 x0C预取指异常Software int0 x08软件中断Undef0 x04未定义指令中断Reset0 x00复位中断14中断向量表的程序AREA Boot,CODE,READONLYAREA Boot,CODE,READONLYENTRYENTRYB Reset_handlerB Reset_handler
9、B Undef_HandlerB Undef_HandlerB SWI_HandlerB SWI_HandlerB PreAbort_HandlerB PreAbort_HandlerB .;for reserved interrupt,stop hereB .;for reserved interrupt,stop hereB IRQ_handlerB IRQ_handlerB FIQ_handlerB FIQ_handler15三、初始化时钟和设置相关的寄存器l通过设置时钟控制器来确定通过设置时钟控制器来确定CPUCPU的工作频率,设置中断控的工作频率,设置中断控制寄存器屏蔽中断制寄存器屏
10、蔽中断l设置设置”看门狗看门狗”控制寄存器控制寄存器,关闭关闭”看门狗看门狗”l关闭关闭CacheCache16四、初始化存储器系统存储器类型和时序配置存储器类型和时序配置(参考芯片手册,设置与内存映射相参考芯片手册,设置与内存映射相关的寄存器关的寄存器)l一个复杂的系统可能存在多种存储器类型的接口,需要根据实际的一个复杂的系统可能存在多种存储器类型的接口,需要根据实际的系统设计对此加以正确配置。对同一种存储器类型来说,也因为访系统设计对此加以正确配置。对同一种存储器类型来说,也因为访问速度的差异,需要不同的时序设置。问速度的差异,需要不同的时序设置。l通常通常Flash Flash 和和SR
11、AM SRAM 同属于静态存储器类型,可以合用同一个存储器同属于静态存储器类型,可以合用同一个存储器端口;端口;l而而DRAM DRAM 因为动态刷新和地址线复用等特性,通常配有专用的存储器因为动态刷新和地址线复用等特性,通常配有专用的存储器端口。端口。l存储器端口的接口时序优化是非常重要的,影响到整个系统的性能。存储器端口的接口时序优化是非常重要的,影响到整个系统的性能。因为一般系统运行的速度瓶颈都存在于存储器访问,所以存储器访因为一般系统运行的速度瓶颈都存在于存储器访问,所以存储器访问时序应尽可能地快;但同时又要考虑由此带来的稳定性问题。只问时序应尽可能地快;但同时又要考虑由此带来的稳定性
12、问题。只有根据具体选定的芯片,进行多次的测试之后,才能确定最佳的时有根据具体选定的芯片,进行多次的测试之后,才能确定最佳的时序配置。序配置。17存储器地址分布l有些系统具有非常灵活的存储器地址分配特性,进行存有些系统具有非常灵活的存储器地址分配特性,进行存储器初始化设计的时候一定要根据应用程序的具体要求储器初始化设计的时候一定要根据应用程序的具体要求来完成地址分配。来完成地址分配。l一种典型的情况是启动一种典型的情况是启动ROM ROM 的地址重映射(的地址重映射(remapremap)。当)。当一个系统上电后程序将自动从一个系统上电后程序将自动从0 0 地址处开始执行,因此地址处开始执行,因
13、此在系统的初始状态,必须保证在在系统的初始状态,必须保证在0 0 地址处存在正确的代地址处存在正确的代码,即要求码,即要求0 0 地址开始处的存储器是非易性的地址开始处的存储器是非易性的ROM ROM 或或Flash Flash 等。但是因为等。但是因为ROM ROM 或或Flash Flash 的访问速度相对较慢,的访问速度相对较慢,每次中断发生后都要从读取每次中断发生后都要从读取ROM ROM 或或Flash Flash 上面的向量表上面的向量表开始,影响了中断响应速度。因此有的系统便提供一种开始,影响了中断响应速度。因此有的系统便提供一种灵活的地址重映射方法,可以把灵活的地址重映射方法,
14、可以把0 0 地址重新指向到地址重新指向到RAM RAM 中去。在这种地址映射的变化过程当中,程序员需要仔中去。在这种地址映射的变化过程当中,程序员需要仔细考虑的是程序的执行流程不能被这种变化所打断。细考虑的是程序的执行流程不能被这种变化所打断。18ROM地址的重映射(remap)0 x0200(boot code)0 x0100(Reset_handler)B Reset_Handler0 x0000Flash(remap)0 x0204(boot code)0 x0200(Reset_handler)B Reset_Handler0 x0000RAM19ROM地址重映射的实现地址重映射的实
15、现mov r8,#RAM_BASE_BOOT/RAM_BASE_BOOT是重映射是重映射前内部前内部RAM区地址区地址 add r9,pc#VectorTale /VectorTale是异常向量表入口是异常向量表入口ldmia r9!,r0-r7 /读读8个异常向量个异常向量 stmia r8!,r0-r7 /保存保存8个异常向量到个异常向量到RAM区区ldmia r9!,r0-r4 /读读5个异常处理程序绝对地址个异常处理程序绝对地址stmia r8!,r0-r4 /保存保存5个异常处理程序绝对地址到个异常处理程序绝对地址到RAM区区 为保证重映射之后提供正确的中断入口地址,在重映射之前就必
16、为保证重映射之后提供正确的中断入口地址,在重映射之前就必须把中断和异常向量表拷贝到内部须把中断和异常向量表拷贝到内部RAMRAM中。其程序实现如下:中。其程序实现如下:20五、初始化堆栈lARMARM处理器有好几种运行状态(模式),各种状态都需要处理器有好几种运行状态(模式),各种状态都需要有自己的堆栈,所以需要分别为这些堆栈分配空间并设有自己的堆栈,所以需要分别为这些堆栈分配空间并设置好各自的堆栈指针置好各自的堆栈指针l每一种状态的堆栈指针寄存器(每一种状态的堆栈指针寄存器(SPSP)都是独立的)都是独立的(System System 和和User User 模式使用相同的模式使用相同的SP
17、 SP 寄存器)。因此对寄存器)。因此对程序中需要用到的每一种模式都要给程序中需要用到的每一种模式都要给SP SP 寄存器定义一个寄存器定义一个堆栈地址。方法是改变状态寄存器堆栈地址。方法是改变状态寄存器CPSRCPSR内的状态位,使内的状态位,使处理器切换到不同的状态,然后给处理器切换到不同的状态,然后给SP SP 赋值。(注意不要赋值。(注意不要切换到切换到UserUser模式进行模式进行User User 模式的堆栈设置,因为进入模式的堆栈设置,因为进入User User 模式后就不能再操作模式后就不能再操作CPSR CPSR 回到别的模式了。可能回到别的模式了。可能会对接下去的程序执行
18、造成影响。)会对接下去的程序执行造成影响。)l一般堆栈的大小要根据需要而定,但是要尽可能给堆栈一般堆栈的大小要根据需要而定,但是要尽可能给堆栈分配快速和高带宽的存储器。堆栈性能的提高对系统整分配快速和高带宽的存储器。堆栈性能的提高对系统整体性能的影响是非常明显的。体性能的影响是非常明显的。21堆栈初始化代码示例MRS R0,CPSR ;CPSR-R0BIC R0,R0,#MODEMASK ;安全起见,屏蔽模式位以外的其它位安全起见,屏蔽模式位以外的其它位ORR R1,R0,#IRQMODE ;把设置模式位设置成需要的模式(把设置模式位设置成需要的模式(IRQ)MSR CPSR_cxsf,R1
19、;转到转到IRQ 模式模式LDR SP,=UndefStack ;设置设置SP_irqORR R1,R0,#FIQMODEMSR CPSR_cxsf,R1 ;FIQModeLDR SP,=FIQStackORR R1,R0,#SVCMODEMSR CPSR_cxsf,R1 ;SVCModeLDR SP,=SVCStack22六、初始化C环境l在目标文件中,代码、数据放在不同的段中。源文件编在目标文件中,代码、数据放在不同的段中。源文件编译链接生成含译链接生成含.data.data、.text.text段的目标文件,且链接器生段的目标文件,且链接器生成的成的.data.data段是以系统段是以系
20、统RAMRAM为参考地址为参考地址l故在系统启动时需要拷贝故在系统启动时需要拷贝ROMROM或或FLASHFLASH中的中的.data.data段到段到RAMRAM,以完成对,以完成对RAMRAM的初始化。在初始化期间应将系统需要读的初始化。在初始化期间应将系统需要读写的数据和变量从写的数据和变量从ROMROM拷贝到拷贝到RAMRAM里运行里运行23了解连接器的功能l将许多放在不同文件中的目标码,连接成一个可执行文将许多放在不同文件中的目标码,连接成一个可执行文件;件;l计算及分配位于不同节区(计算及分配位于不同节区(Session)Session)的程序或数据。一的程序或数据。一个程序可分为
21、程序段(个程序可分为程序段(Read-Only,RO)Read-Only,RO)、数据段(、数据段(Read-Read-Write,RW)Write,RW)、零初始化段(、零初始化段(Zero-Initialized,ZI)Zero-Initialized,ZI);l编译器仅将程序转成机器码,不会处理与内存地址有关编译器仅将程序转成机器码,不会处理与内存地址有关的部分,这部分工作由连接器完成;的部分,这部分工作由连接器完成;l连接器可以产生除二进制外的其它文件的格式。连接器可以产生除二进制外的其它文件的格式。连接器主要用于处理内存分配问题连接器主要用于处理内存分配问题24链接器产生的符号表l符
22、号由链接器自动产生,只读段(符号由链接器自动产生,只读段(read-only ROread-only RO)就是)就是代码段,读写段(代码段,读写段(read-write RWread-write RW)是已经初始化的全局)是已经初始化的全局变量,而零初始化段(变量,而零初始化段(zero-initialized section ZIzero-initialized section ZI)中存放未初始化的全局变量;中存放未初始化的全局变量;25初始化应用程序执行环境l映像一开始总是存储在映像一开始总是存储在ROM/Flash ROM/Flash 里面的,其里面的,其RO RO 部分既可部分既可
23、以在以在ROM/FlashROM/Flash里面执行,也可以转移到速度更快的里面执行,也可以转移到速度更快的RAM RAM 中中去;而去;而RW RW 和和ZI ZI 这两部分必须是需要转移到可写的这两部分必须是需要转移到可写的RAM RAM 里里去的。去的。l所谓应用程序执行环境的初始化,就是完成必要的从所谓应用程序执行环境的初始化,就是完成必要的从ROM ROM 到到RAM RAM 的数据传输和内容清零。的数据传输和内容清零。26初始化C环境(2)lC C环境初始化,就是利用上述符号初始化环境初始化,就是利用上述符号初始化RWRW和和ZIZI段,以使段,以使后面使用的全局变量的后面使用的全
24、局变量的C C程序正常运行;程序正常运行;l这里有两个循环,第一个循环把预初始化的数据段这里有两个循环,第一个循环把预初始化的数据段RWRW(位于代码段的后面)复制到(位于代码段的后面)复制到RAMRAM中;另一个循环把未初中;另一个循环把未初始化的数据段始化的数据段ZIZI初始化为初始化为0 0,也就是实现把从,也就是实现把从ROMROM中的中的.data.data段拷贝到段拷贝到RAMRAM,对,对ZIZI段内的数据初始化为段内的数据初始化为0 0,以完成,以完成对对C C环境的实始化;环境的实始化;27初始化C环境(3)28改变处理器模式l除用户模式以外,其他除用户模式以外,其他6 6
25、种模式都是特权模式。因为在种模式都是特权模式。因为在初始化过程中许多操作需要在特权模式下才能进行(比初始化过程中许多操作需要在特权模式下才能进行(比如如CPSR CPSR 的修改),所以要特别注意不能过早地进入用的修改),所以要特别注意不能过早地进入用户模式。一般地,在初始化过程中会经历以下一些模式户模式。一般地,在初始化过程中会经历以下一些模式变化:变化:29七、呼叫C程序l对对mainmain函数的调用进入函数的调用进入uc/OSuc/OS的入口,通过这个入口就进的入口,通过这个入口就进入入uC/OSuC/OS的主函数,启动对的主函数,启动对uC/OSuC/OS的初始化的初始化l例例 IM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 初始化 操作系统 移植
限制150内