注意:开发环境不同,启动代码不同…

今天一直纠结于程序老是出问题,就是拿别人的源码直接编译还是出问题,现在终于明白,开发环境不同启动代码也不同,在网上下载个源码启动代码如下:

.globl _start
_start:

   
    ldr r0, =0x70000000
    orr r0, r0, #0x13
    mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)
    
ldr r0, =0x7E004000
mov r1, #0
str r1, [r0]

ldr sp, =8*1024
mov r0, #9
bl xxxxx
halt:
b halt
此源码我直接在RVDS开发环境下运行还是出错了,以前老是以为自己编写格式出错了,弄了好久都没弄明白,在群众和别人交流之中才了解到错误的原因,最终根源在于开发环境不同,在rvds下应该如下:
(PRESERVE8)
IMPORT main
AREA init,CODE,READONLY

ENTRY
CODE32
START
ldr r0,=0x70000000
orr r0,r0,#0x13
mcr p15,0,r0,c15,c2,4


ldr r0,=0x7E004000
mov r1,#0
str r1,[r0]

ldr sp,=8*1024
bl main
            END
这里需要注意如果你的rvds(ADS)是1.x版本括号里面的那条伪指令不要,如果是2.x高版本就必须要有PRESERVE8这条伪指令,否则会报错的。
原文地址:https://www.cnblogs.com/songfeixiang/p/3733845.html