一、编译用C实现 裸机点亮led程序的时候报错
led.o:(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'
解决方法:
arm-linux-gcc编译的命令后面加一个参数 -nostdlib
禁用标准库文件和标准启动文件,因为裸机程序是通过自己写的汇编程序start.S来启动的
二、不能用烧录到RAM的方法测试
具体原因不清楚,烧到0x50008000的运行看不到效果
猜测应该是要烧录到nandflash上,通电的时候nandflash的8k空间的内容复制到6410的片内8k内存,然后执行,才可以成功
烧录到nandflash的方法:
先烧写到RAM空间0x50008000
然后擦除nand的1M空间:
nand erase 0 100000
把RAM的数据的拷贝到nandflashd的0——1M空间
nand write 50008000 0 100000
第一个流水灯程序~~加油~
start.S
.globl _start
_start:
/* Peri port setup */
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15,0,r0,c15,c2,4
ldr r0, =0x7E004000
mov r1, #0
str r1, [r0]
/* 设置栈 */
ldr sp, =8*1024
bl main
halt:
b halt
led.c
void delay()
{
volatile int i=0;
while(i < 20000)
i++;
}
int main(void)
{
volatile unsigned long * gpmcon = (volatile unsigned long *)(0x7F008820);
volatile unsigned long * gpmdat = (volatile unsigned long *)(0x7F008824);
int i = 0;
*gpmcon = 0x1111;
while(1)
{
for(i=0;i<4;i++)
{
*gpmdat = ~(1<<i);
delay();
}
}
return 0;
}
Makefile
led.bin:start.o led.o
arm-linux-ld -Ttext 0 -o led.elf start.o led.o
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 -nostdlib
led.o:led.c
arm-linux-gcc -o led.o led.c -c -nostdlib
clean:
rm *.o led.elf led.dis led.bin