这个问题的解决需要看反汇编:
Disassembly of section .data:
00008324 <__data_start>:
8324: 00000001 andeq r0, r0, r1
如上图,8324的地址对应的就是全局变量dgtInBuf的地址,这显示已经超出了片内4K内存的地址。
即这个全局变量无法正确读写。
你需要添加一个key.lds文件,内容如下:
SECTIONS {
. = 0x00;
.text : { *(.text) }
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
然后Makefile改为:
key.bin : crt0.S key.c
arm-linux-gcc -g -c -o crt0.o crt0.S
arm-linux-gcc -g -c -o key.o key.c
arm-linux-ld -T key.lds crt0.o key.o -o key_elf
arm-linux-objcopy -O binary -S key_elf key.bin
arm-linux-objdump -D -m arm key_elf > key.dis
clean:
rm -f key.dis key.bin key_elf *.o
这个问题的解决需要看反汇编:
Disassembly of section .data:
00008324 <__data_start>:
8324: 00000001 andeq r0, r0, r1
如上图,8324的地址对应的就是全局变量dgtInBuf的地址,这显示已经超出了片内4K内存的地址。
即这个全局变量无法正确读写。
你需要添加一个key.lds文件,内容如下:
SECTIONS {
. = 0x00;
.text : { *(.text) }
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
然后Makefile改为:
key.bin : crt0.S key.c
arm-linux-gcc -g -c -o crt0.o crt0.S
arm-linux-gcc -g -c -o key.o key.c
arm-linux-ld -T key.lds crt0.o key.o -o key_elf
arm-linux-objcopy -O binary -S key_elf key.bin
arm-linux-objdump -D -m arm key_elf > key.dis
clean:
rm -f key.dis key.bin key_elf *.o
举报