关于全局量的.data存放地址的说明
2013-01-01 19:39
330 查看
使用裸机开发时,会用到全局量.在使用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
使用命令: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
相关文章推荐
- 关于datagird 分页的说明
- U-Boot中关于TEXT_BASE,代码重定位,链接地址相关说明
- 关于字符串,字符数组 ,局部和全局地址分配问题
- 求出data为首地址的100D字数组中的最小偶数,并把它存放在AX中,目前只能做出无符号数,有待修改
- 关于datagird 分页的说明
- U-Boot中关于TEXT_BASE,代码重定位,链接地址相关说明
- 关于call及jcc指令地址的说明
- 关于OpenCV中IplImage的char类型的ImageData需要进行强制类型转换为uchar的说明
- 关于全局ID,雪花(snowflake)算法的说明
- 关于datagird 分页的说明
- 关于两个域内的EXCHANEG 2007间同步默认全局地址列表
- 关于DMA传输外设地址的说明
- 关于Juniper ScreenOS MIP/VIP地址说明
- 关于datagird 分页的说明
- Thinkphp3.2 关于快捷函数 模板引擎换为smarty时 地址跳转函数U()的使用修改及说明
- 关于gridView格式化数据的说明 DataFormatString
- U-Boot中关于TEXT_BASE,代码重定位,链接地址相关说明
- 关于两个域内的EXCHANEG 2007间同步默认全局地址列表
- 关于S3C2440NAND操作中s3c2440_write_addr_lp函数地址变换说明
- 关于2.6 的 platform_data,以spi驱动说明之