加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

mini2440启动代码分析之第三篇(IMPORT)

发布时间:2020-12-15 18:43:01 所属栏目:百科 来源:网络整理
导读:接上篇,代码如下: IMPORT??|Image$$RO$$Base|? ?? ? ;?Base?of?ROM?code;?ROM?code( 也就是代码 ) 的开始地址? IMPORT??|Image$$RO$$Limit|? ? ?;?ROM?code 的结束地址 (=ROM?data 的开始地址 )? IMPORT??|Image$$RW$$Base|? ? ?;?Base?of?RAM?to?initiali

接上篇,代码如下:

IMPORT??|Image$$RO$$Base|????;?Base?of?ROM?code;?ROM?code(也就是代码)的开始地址?

IMPORT??|Image$$RO$$Limit|? ? ?;?ROM?code的结束地址(=ROM?data的开始地址)?

IMPORT??|Image$$RW$$Base|? ? ?;?Base?of?RAM?to?initialise;?RAM?的起始地址?

IMPORT??|Image$$ZI$$Base|?????? ;?Base?and?limit?of?area????? ?0初始化的起始地址?

IMPORT??|Image$$ZI$$Limit|?????? ;?to?zero?initialise????????????? ?0初始化的结束地址?

;?在这里用IMPORT伪指令(c语言的extren关键字一样)引入|Image$$RO$$Base|,?

Image$$RO$$Limit|,|Image$$RW$$Base|,?|Image$$ZI$$Base|,|Image$$ZI$$Limit|等比较古怪的变量编译器生成的。?

;其中RO,?RW,?ZI这三个段都保存在Flash(加载时),但RWZIFlash中的地址肯定不是程序运行时变量所存储的位置,因此我们的程序在初始化时应该把Flash中的RWZI拷贝到RAM的对应位置。这些变量是通过ADS的工程设置里面设定的RO?BaseRW?Base设定的,?最终由编译脚本和连接程序导入程序.?实际上RWZIFlash中的位置就紧接着RO存储。我们知道Image$$RO$$BaseImage$$RO$$Limit,那么Image$$RO$$Limit就是RW?ROM?data)的开始。?

IMPORT???MMU_SetAsyncBusMode?

IMPORT???MMU_SetFastBusMode?

;在这里用IMPORT伪指令(c语言的extren一样)引入外部变量MMU的快速总线模式和异步总线模式两个变量.?

IMPORT??Main?????;?The?main?entry?of?mon?program?

;在这里引入一些在其它文件中实现在函数,包括为我们所熟知的main函数

?IMPORT? RdNF2SDRAM?? ; Copy Image from Nand Flash to SDRAM

;在这里引入一些在其他文件中实现的函数,包括复制代码到SDRAM

注意最后一句我想强调的是:

NAND启动时当里面程序小于4K时,不用写什么搬移程序,启动后S3C2440会通过硬件机制将NAND的小于4K的内容,拷贝到其零地址处自带的BootSRAM,然后再运行里面的程序(从0地址处)???

????????????????????????当里面程序大于4K时,此时系统只将NAND的前4K内容硬件机制方式的搬移到BootSRAM

中,还有部分程序保存在NAND中,而NAND是无法运行程序的,需要将所有程序搬移到SDRAM并在其中运行,所以程序的启动代码要包含这块有关程序拷贝的代码,并在所有程序完成拷贝后在SDRAM中运行。更简单的说,在大于4K条件下,NAND有两个过程,一过程是将NAND前4K内容搬移到BootSRAM中,目的是使系统能够启动(硬件机制,无须程序员干预);二过程是使得程序所有程序搬运到SDRAM中,目的是使程序在SDRAM中运行(需要程序员编程实现)。

NOR启动时,没有额外要考虑的问题,因为NOR特点是芯片内执行,系统上电或复位,0地址处的启动代码就会被执行

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读