我想搞清楚連接地址的概念,把鏈接地址改為0xffff fffc,目的就是想看它溢位后的影響。這樣編譯后再燒寫,發現led還是能點亮,好像毫無影響。然后我看了下反匯編代碼,發現反匯編代碼只有兩行,第一行地址是0xffff fffc,第二行地址是0x0,Address 0x0 is out of bounds。這樣怎么還會正常運行呢?盼指點迷津。
源程式如下(簡單的點燈程式,arm是2440):
int main()
{
unsigned int *pGPFCON = (unsigned int *)0x56000050;
unsigned int *pGPFDAT = (unsigned int *)0x56000054;
*pGPFCON = 0x100;
*pGPFDAT = 0;
return 0;
}
makefile如下:
all:
arm-linux-gcc -c -o led.o led.c
arm-linux-gcc -c -o start.o start.S
arm-linux-ld -Ttext 0xfffffffc start.o led.o -o led.elf
arm-linux-objcopy -O binary -S led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
clean:
rm *.bin *.o *.elf *.dis
uj5u.com熱心網友回復:
你用的是2440 baremetal模式測驗程式?如果是的化,用的應該是led.bin的話objcopy后的東西跟連接器沒關系,
程式你又沒有燒到樣機的這個地址,
objdump決議elf時候地址溢位了。所以才顯示2潭訓編代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/96072.html
標籤:驅動程序開發區
上一篇:Error: Package: 1:xrdp-selinux-0.9.11-1.el7.x86_64 (epel)
