ARM7启动代码,文字池

来源:互联网 发布:淘宝合作协议书 编辑:程序博客网 时间:2024/05/21 05:24

ARM启动代码源文件:

从上面可以看出代码是下载到0x00000000的Flash出,把中断向量表放在首位,把MyStacks堆栈放在内部RAM为0x40000000的区域,紧接着放堆空间,栈空间,启动代码皆是千遍一律,很简单不在赘述,知道代码分配区域就可以了,主要讲解文字池,以及ADS编译器在如何分配地址和搬运变量


这上面的是启动代码的一部分,LTORG用于声明一个数据缓冲池,(也称为文字池)的开始。在使用伪指令LDR时,常常需要在适当的地方加入LTORG声明数据缓冲池,LDR加载的数据暂时放于数据缓冲池。

这段代码是反汇编代码,其中4294967292为-4,至于为什么是-4,这就是反码补码求得的结果,因为SvcStackSpace是个地址,至于为多少我们可以在ADS中查看反汇编,SVC_STACK_LEGTH=0,其他的另外也有三个可以看到也是为0,第二个为(72-1)*4=284。

下面让我们看下ADS编译器是如何根据启动代码源文件分配各个栈的空间地址的,我们知道MyStack,是从0x40000000中开始进行分配的,所以当我们查看反汇编的时候我们可以从此地址往下开始查找,看截图:

由于SvcStackSpace分配了0字节的空间,所以SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4=0x40000060+(0-1)*4=0x40000056,但在这个地址处没有分配空间,所以此句话根本没用到,或者说有误,但是如果不用到Svc空间也就无所谓了,irq也是分配了0的字节空间,所以IrqStackSpace和Svc地址是相同的,fiq就不一样分配了256*4字节的空间1024,那么Abt=Und=0x40000060+1024(0x400)=0x40000460,那么DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4=0x40000060+(256-1)*4=0x40000456



0 0
原创粉丝点击