LPC2220启动编程的一些感想

 
LPC2220启动编程的一些感想
ARM搞了差不多有半年了,但是对启动编程仍然很不清楚,大部分的启动代码都是利用周立功的现成的程序。
正好现在有个项目,也抽空好好研究了一下arm的启动。
因为LPC2220内部没有FLASH(这一点,值得怀疑,估计里面是有存放BOOTLOADER的FLASH),所以要外扩FLASH,用的是39VF160,程序写完后放在外部FLASH里面,这个时候就有疑问了,程序放在外部FLASH里面,是怎样启动的呢?
查阅了很多的资料,这里尤其要感谢杜云海老先生写的一些东西,对这样的好前辈我表示致敬。原来LPC2000系列的ARM里面好像都有出厂时固化好的BOOTLOADER,一上电,其实执行的并不是你的程序,而是内部固化好的BOOTLOADER程序,它先进行一下Memerroy map ,就是初始化地址,也就是说,本来没有电的时候,不是没有地址0吗,但是上电后要知道那个数字对应那个地址啊,比如0就是FLASH 的第一个地址,一次类推,就是这个作用,给内存附上相应的值,然后马上就来一次remap,这里是把bootloader映射到0X7FFFE000~0X7FFFEFFF;然后执行bootloader,这些都是硬件完成的。
好了,那我的程序什么时候执行呢,是怎样执行的啊,我知道有那么几个管脚是来选择外部FLASH启动的,可是我不清楚我的二进制文件是怎样组成的,查了很多的资料,在杜云海的《arm学习报告001》中得到很好的答案。这里就不多说了,可以在网上找到的。
原来二进制文件中各个区域是连续的,也就是说在加载时域中,RO段,RW段在物理上是连接的,也就是说在,在FLASH 中RO段后面紧跟的就是RW段,可是他们又是怎样从加载是域到运行时域的呢,查了很多才明白原来这个工作是ADS帮你做了,如果你调用__main;则它会自动生成一些代码帮你把数据拷贝到你在Scatter File指定的地址,那个时候我还是不明白,比如你把0x80000000映射成了0x00000000,RW段的运行时域是0x40000000,那怎么找到这个地址的,如果是相对地址的话那RW段运行的地址应该是0XC00000000了啊,后来明白了ADS帮你生成的很多标号都是绝对地址,所以不会错误的。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值