导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→ARM的启动过程,高手强烈推荐学习[eduann]

 *第40901篇: ARM的启动过程,高手强烈推荐学习

  
楼 主:eduann 2012年11月14日17:53
 ARM的启动过程,高手强烈推荐学习
对于一般的嵌入式系统来讲,考虑到系统成本,运行速度等因素,往往联合使用好几种存储器件。在下面讲到的例子是开发中用到的一个 ARM9EJ 的处理器,系统中采用了SDRAM, ROM, Nand FLASH, ITCM ,DTCM 等。   
    SDRAM: 程序正常运行时所在的存储器, 物理地址 0x24000000 - 0x24800000 (以8M 为例);
    ROM:   复位后, ARM 从 ROM 启动, ROM 是只读的,出厂时就烧好了,不可更改,正常运行时,物理地址:
            0x2C000000 - 0x2C006000 (24KB);
    Nand FLASH: 外接存储器件,正常运行的程序会通过烧录工具先放在这里。也可以做为用户的数据存储区,通过文件系统来访问。
    ITCM, DTCM: 类似与 SDRAM ,但是速度比 SDRAM 快很多,当进行大量,繁琐,且实时性要求较高的运算时,使用该存储。
    从开机,即对处理器发送一个 RESET 信号后, ARM 处理器就进入中断模式,从中断向量 RESET 处理,即地址0x00000000 处开始执行。但是,我们看到,整个系统在物理地址 0 处是没有存储器件的。实际上是, 对与大多数的ARM处理器来讲,有一个硬件映射的机制。对与这个处理器来说,开始时,默认将 ROM (0x2C000000 - 0x2C006000) 映射到地址零处,注意,此动作是由硬件达成的,软件不用考虑。此时,送到地址总线的地址是 0x00000000, 但是对应的却是ROM 中offset 为0处的代码。 看看ROM 中代码是怎么考虑的:
    .section .boot                  #1
    __RESET_ADDR:
 /* Move PC to ROM address */
  LDR PC, =0x2C000024            #2
 /* Hardward init */
 BL  __HARDWARD_INIT          
 /* Detect SDRAM size */
 BL  __SDRAM_DETECT
 /* SDRAM init */
 BL  __SDRAM_INIT
 /* Data section init */
 BL  __DATA_INIT                #3

 /* BSS section init */
 BL  __BSS_INIT                 #4
 
 /* ARM mode stacks init */
 BL  __STACK_INIT               #5

 /* Enter C code */
 B __MMU_START_MAIN              #6
    
    需要注意的是上面标出来的6个地方,下面分别解释:
    #1
    GCC 会把以下的代码放到 .boot 段中,通过 ld 中对 .boot 的安排,可将该段放在指定的地址空间,参见后面的 ld 描述;
    
    #2
    此处将 PC 指针赋值为 0x2C000024, 通过对这个 .boot 段进行反汇编,可以看到该地址对应 
    BL  __HARDWARD_INIT, 就是该条指令的下一条。 此时,物理地址 0x00000024 和 0x2C000024 都对应这条指令,这是由于重映射机制造成的。通过,执行 
    LDR PC, =0x2C000024, 使得处理器的地址空间从原来的 0x0000000 变到 0x2C000000 ,这是必要的。其一: ROM 本身就对应在 0x2C000000 这个地址空间,恢复到此空间是很自然的。其二:为后面的重映射做准备。因为ROM 的运行速度没有 SDRAM 快,所以通常把程序加载到 SDRAM 中运行,由于中断向量的在 0x00000000 处,所以需要把 SDRAM 映射到 0 地址去,这也是硬件映射的。如果不做这种转换的话,当进行了硬件映射后,两条指令就接不上了,上一条指令是 0x0000xxxx, 位于 ROM 中,下一条指令 0x0000xxxy 为与SDRAM ,会接着从 SDRAM 中执行,很容易出问题。
    
    #3
    此处做数据段的初始化的,数据段是可读可写的。所以必须把数据段搬到 SDRAM 中去,方可使用。该数据段的 LMA 和  VMA 是不同的,通过在 ld 中加上标签,可以得知从哪儿搬数据,要搬到那儿去。
    #4
    做BSS 段初始话,一般清0。 值得注意的是,对于初始化为 0 的全局变量,可能会放在这里。
    #5
    初始化,各个模式下的堆栈。
    #6
    启动MMU,进入main 函数。      
    由于 ROM 中空间有限,上面在 ROM 中代码不可能做更多动作。 一般我们把自己编写程序生成 arm 代码放在 Nand Flash 中。在 ROM 中的程序进入main 后,就会通过nand driver 将存在nand 中的code 读到 SDRAM 中,然后做硬件重映射,将 SDRAM 映射到地址 0 处, 然后在 SDRAM 中跑。 对于 ARM 的 bootload 来将,做的就是这个工作。


  技术顾问:安老师。电话:15813882609 QQ:122330119

  
2楼:eduann 2013年1月8日14:36
 支持
去培训了 真的挺不错的 支持下罗。。
  
3楼:eduann 2013年3月6日10:56
 支持
是值得去学习一下啊  详情质询:安老师 电话13926586805  QQ 122330119
  
4楼:eduann 2013年3月19日17:00
 00......
赞个 学习了。。。。
  
5楼:eduann 2013年10月9日15:42
 支持个
果断支持个   学习向上 天天向上
  
6楼:eduann 2013年10月15日14:50
 果断支持
确实值得分享值得去学习啊
  
7楼:eduann 2013年11月13日10:57
 学习起
深圳/郑州信盈达嵌入式、单片机、ARM、MIPS、FPGA、Android培训!
免费试听,满意后给您量身定制课程(包学会),快速提高您的技能!
教学特色:名师督学+工程师指导;项目案列解析+实际解决方案!
详情质询:安老师 电话13926586805  QQ 122330119
  
8楼:eduann 2013年5月13日10:27
 加油学习
信盈达推出电子相关课程供大家学习参考:周末大送优惠,免费公开课,欢迎大家前来试听了解。
1.嵌入式arm+linux(arm9/11/A8/A9套餐供选)
2.安卓高级开发板(linux)
3.cortex系列(m3/arm9/stm32)
4.单片机项目班(c51、pic、avr)
5.单片机综合班(电子+pcb+51/pic)
6.fpga课程
7.嵌入式系统班(电子+嵌入式c+arm+linux+安卓)
8.企业培训、项目指导
详情质询:安老师 电话13926586805  QQ 122330119
  
9楼:eduann 2013年5月19日13:52
 支持
加油好好学习。。。
  
10楼:eduann 2013年6月6日10:30
 好好学习
每周末我们都会有免费的公开班 有需要提升技术的朋友们 可以加q122330119详聊哦
  
11楼:eduann 2013年7月4日16:16
 单片机的学习之道-信盈工程师达系统讲解
永久支持 学习ing。。
  
12楼:eduann 2013年7月15日17:08
 支持
学习在学习 支持在支持。。。
  
13楼:eduann 2013年8月5日13:46
 gogo
深圳/郑州信盈达嵌入式、单片机、ARM、MIPS、FPGA、Android培训!
免费试听,满意后给您量身定制课程(包学会),快速提高您的技能!
教学特色:名师督学+工程师指导;项目案列解析+实际解决方案!
详情质询:安老师 电话13926586805  QQ 122330119
  
14楼:eduann 2013年12月18日14:37
 学习学习哦

广州深圳/郑州信盈达嵌入式、单片机、ARM、MIPS、FPGA、Android培训!
免费试听,满意后给您量身定制课程(包学会),快速提高您的技能!
教学特色:名师督学+工程师指导;项目案列解析+实际解决方案!
详情质询:安老师 电话13926586805  QQ 122330119
  
15楼:eduann 2013年12月30日17:11
 学习学习哦
深圳,郑州,广州嵌入式,单片机,电子,FPGA,PCB画板,android,STM32等技术培训,优惠大酬宾 优惠一:所有报名单片机课程的客户,赠送一套单片机学习版,报名即可领走。 优惠二:所有报名嵌入式课程的客户,赠送一套ARM9/A8学习版,报名即可领走。综合咨询电话安老师13926586805 QQ 122330119

>>>>>>对该主题发表你的看法

本主题贴数15,分页: [第1页]


[上一篇主题]:不同种类传送带差别体现在哪? [原创]

[下一篇主题]:德信电子专业代理台湾LYONTEK 静态存储器