关于全局量的.data存放地址的说明

使用裸机开发时,会用到全局量.在使用ld时,发现全局量起始地址与当前的代码段起始地址+代码段自身的长度+ 0x8000.

       使用命令:arm-none-linux-gnueabi-ld -Ttext 0xD0020010 start.o buzzer.o main.o led.o clock.o int.o timer.o -o e.elf

得到全局量起始地址为0xd0028d84. 代码自身的长度为0xd74. 起始代段地址0xd0020010. ld 会自动增加0x8000.开始直接写成 arm-none-linux-gnueabi-ld -Ttext 0xD0020010 start.o buzzer.o main.o led.o clock.o int.o timer.o -Tdata 0xD0020d84 -o e.elf问题解决了. 但又修改代码后 全局量地址肯定也要变化的. 查了一下帮助,是ld自动使用了页对齐产生的问题.可以使用-N参数解决问题如下:

arm-none-linux-gnueabi-ld -Ttext 0xD0020010 start.o buzzer.o main.o led.o clock.o int.o timer.o -N -o e.elf

这样全局量就可以紧挨着代码段的最后了.

参数说明 -N, --omagic                Do not page align data, do not make text readonly

你可能感兴趣的:(嵌入式开发)