链接地址

来源:互联网 发布:淘宝店铺装修包含哪些 编辑:程序博客网 时间:2024/05/16 07:31

链接地址

参考链接:http://blog.csdn.net/luomuxiaoxiao98/article/details/8504044
代码:
/********************Makefile**************************************/
led.bin: start.o led.o
arm-linux-ld -T leds.lds -o led.elf start.o led.o   /*led.lds为链接脚本*/
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
start.o : start.S
arm-linux-gcc -o start.o start.S -c
led.o : led.c
arm-linux-gcc -o led.o led.c -c
clean:
rm *.o led.elf led.bin led.dis -f
/***************************************start.S***************************************/
.globl _start
_start:
/* 硬件相关的设置 */
    /* Peri port setup */
    ldr r0, =0x70000000
    orr r0, r0, #0x13
    mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)
/* 关看门狗 */
/* 往WTCON(0x7E004000)写0 */
bl test
ldr pc, =test

ldr r0, =0x7E004000
mov r1, #0
str r1, [r0]
/* 设置栈 */
ldr sp, =8*1024
bl main
halt:
b halt
test:
mov pc, lr

/***************************************led.lds***************************************/
void delay()
{
volatile int i = 0x10000;
while (i--);
}
volatile int i = 0;
volatile int j = 0x12345678;
volatile int k = 0;
volatile int g;

int main()
{
volatile unsigned long *gpmcon = (volatile unsigned long *)0x7F008820;
volatile unsigned long *gpmdat = (volatile unsigned long *)0x7F008824;
/* gpm0,1,2,3设为输出引脚 */
*gpmcon = 0x1111;
while (1)
{
*gpmdat = i;
i++;
if (i == 16)
i = 0;
delay();
}
return 0;
}
/***************************************led.lds***************************************/
SECTIONS
{
. = 0x50000000;
.text : {
start.o
* (.text)
}
.data : {
* (.data)
}
bss_start = .;
.bss : {
* (.bss)
}
bss_end  = .;
}

重定向部分代码:
/* 重定位 */
adr r0, _start  /* 伪指令,取_start的当前地址 */
ldr r1, =_start /* 链接地址 */
ldr r2, =bss_start
cmp r0, r1
beq clean_bss
copy_loop:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, r2
bne copy_loop
/* 清bss段 */
clean_bss:
ldr r0, =bss_start
ldr r1, =bss_end
mov r2, #0
clean_loop:
str r2, [r0], #4
cmp r0, r1
bne clean_loop


原创粉丝点击