七、堆栈及应用环境初始化.ppt_第1页
七、堆栈及应用环境初始化.ppt_第2页
七、堆栈及应用环境初始化.ppt_第3页
七、堆栈及应用环境初始化.ppt_第4页
七、堆栈及应用环境初始化.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章堆栈,初始化应用程序环境,本章的目标,设置2440存储控制器编写主引导代码编写ARM堆栈初始化代码了解MDK加载原理,初始化堆栈,初始化堆栈,初始化堆栈主要是在单个处理器模式下分配堆栈空间。堆栈是中断或程序跳转服务,发生中断或程序跳转时,必须将当前处理器的状态和某些参数保留在堆栈中,处理中断后恢复存储在堆栈中的现场数据,以确保原始程序正确运行。注意事项,堆栈大小。要分配堆栈空间,必须合理计划堆栈大小。太小会导致堆栈泄漏,浪费内存。初始化顺序。如果堆栈初始化后在非管理模式下运行,请注意函数的返回。由于系统在通电或重置后在管理模式下运行,如果初始化后不在管理模式下,MOVPC、LR、无法返回,则必须在首次进入堆栈时将存储值放入PC。请注意:2440存储控制器、其馀2个内存bank(共8个存储bank 6个存储bank ROM、SRAM等)7个固定内存bank起始地址1个可变内存bank起始地址和bank大小可编程所有内存bank的访问周期可编程地址空间:每个bank的128M字节,共包括13个寄存器:BWSCON、BANKCONn、可编程访问周期、REFRESH、BANKSIZE、MRSRBn、BANK初始化;操作代码InitBankSetmemorycontrollregisterldrr 0,=l _ bank _ confldrr 1,=rbw sconBWSCONAddressADDR2、R0、# 52;Endaddressofsmrdata 0 ldrr3,r0,# 4 strr3,R1,# 4c mpr2,# 4c MPR 2,r0 bner,bank初始化,ltorgl _ bank _48000000DCDBANKCON0 _ VAL48000004DCDBANKCON1 _ VAL48000008DCDBANKCON2 _ VAL4800000 cdbankcon 3 _ val48000010DCDBANKCON4 _ VAL48000014DCDBANKCON5 _ VAL48000018DCDBANKCON6 _ VAL4800001 cdbankcon 7 _ val48000020DCDREFRESH _ VAL48000024DCDBANKSIZE _ VAL48000028DCDMRSRB6 _ VAL4800002CDCDMRSRB7 _ VAL48000030,伪命令说明,“360”引用用于在程序集语言中显示数据或指令位置的本地标志“0”本地标志,本地标志是范围从0到99的小数,本地标志在循环或条件执行代码中提高程序的执行效率。本地标志的引用格式如下:%F|BA|T标志F:向前搜索本地标志B:向后搜索本地标志A:在所有宏中搜索标签T:在当前宏中检索标签,伪命令说明,LTORG伪命令:声明字符池的开始,字符池通常位于一段的开头或一个文件的END之前。字符池通过为代码分配存储空间来存储变量。L_BANK_CONF:文本池的标签。Dcd使用单个数据定义伪操作“DCD”,并使用指定的表达式(可以是程序标签或数字表达式)对其进行初始化。初始化应用程序环境、初始化应用程序环境和项目的源文件(.c和。s)通过ARM编译器编译,并使用ELF格式的目标文件(.o),目标文件通过ARM链接器链接,然后链接到ELF格式的图像文件(.axf)。图像文件还包含需要通过fromelf工具转换为适合在rom或ram中运行的二进制代码的调试信息。这可以将生成的二进制图像文件写入硬件系统。由一个或多个域组成的可执行映像文件;域是加载域,即映像文件存储在存储中的地址。执行域:映像文件运行时的地址。初始化应用程序环境,每个环境包含一个或三个输出段,每个段包含一个或多个输入段。输入段包含代码程序、初始化的数据、未初始化的存储和初始化为零的存储。因此,输入段分为三个属性:RO:只读、代码和常量。RW:(包括已初始化的全局变量和静态变量ZI:未初始化的变量)是可读/写的,默认值为0。链接器根据属性对输入段进行分组以构成不同的输出段,一个输出段由具有相同属性的输入段组成,输出段的属性与输入段的属性相同。域由不同属性的输出段组成,输出段在域中按RO、RW顺序排列。RO和RW可以不连续。ZI后接RW .(仅限负载域中的RO、rw),初始化应用程序环境,可执行映像通常存储在ROM或FLASH中,RO段是只读的,RO段可以在运行时从FLASH复制到更快的RAM中,因为在运行时不能对其进行更改。RW段必须在运行之前复制到RAM。ZI段在运行之前设置,并且所有区域都为零,因此加载字段不需要包含ZI输出段。但是,运行时域必须包含ZI,ZI必须是RAM。程序的正确运行需要进行必要的数据复制和整理。初始化应用程序运行环境、启动NORFLASH、初始化应用程序环境、启动NANDFLASH、初始化应用程序环境、加载ROBASE:图像文件中的RO属性的输出段时,需要起始地址和运行时起始地址。RO属性的输出段在加载时和运行时位置没有变化,因此在此处一次性设置。RW输出段位于RO输出段之后,因此|Image$RO$Limit|是加载域中RW输出段的起始地址。也可以不设置RWBASE。RW段存储在域的RO段之后。ZI段位于RW段之后,因此|Image$ZI$Base|等于|Image$RW$Limit|,代码分析,LD RPC,=initrwziinirorwzildrr0等于,说明RO和RW是连续的,不需要复制,转到ZI段0代码,代码示例,代码分析,LOOP0不等于,需要RW段CMPR1、R3复制;RW段目标指针与ZI段基本地址进行比较,以确定复制是否完成,LDRCCR2,R0,# 4;如果小于ZI段主地址,则将域RW段数据加载到R2,调整RW段源指针strccr2,R1,4;如果小于ZI段主地址,则将域RW段数据加载到R2中,并调整RW段目标指针BCCLOOP0。如果小于ZI部分的默认地址,请重复副本。LOOP10 ZI段ldr R1,=| i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论