mini2440裸板程序-c语言点亮led

 1、开发C语言程序的时候,一般都是使用main函数作为入口,而main函数仅仅只是一个函数而已,那么他一定需要被别人来调用,同时将返回值返回给调用者。那么在我们在开发的时候LED点亮的时候,没有人来调用我们的函数,所以我么需要自己来做这些工作。

2、硬件方面的初始化:关闭看门狗

3、软件方面的初始化:设置栈 :把栈指针sp指向某块内存

4、硬件和软件的初始化被称之为启动文件,而该启动文件是一个汇编代码

启动文件crt0.S

.text
.global _start
_start:
	LDR 	r0,=0x53000000  @WATCHDOG寄存器的地址
	MOV		r1,#0x00000000  @r1是这为0

	STR 	r1,[r0]			@写入0,禁止WATCHDOG,否则CPU会不断重启
	LDR		sp,=1024*4		@设置堆栈,注意:不能大于4k,因为现在可用的内存只有4k 
							@片内存SRAM,4k
							@Nand Flash中的代码在复位后,会被移到内部的ram中,此ram只有4k

	bl	main				@调用c程序中的main函数 ,bl指令会跳转到main函数,并把返回值放在lr里面
halt_loop:
	b 	halt_loop


	
	

ledon_c.c文件

#define GPBCON  *((volatile unsigned long *)0x56000010)
#define GPBDAT 	*((volatile unsigned long *)0x56000014)
//volatile是让编译器不要做优化

int main()
{
	GPBCON = 0x00000400;//设置GPB5为输出口
	GPBDAT = 0x00000000;

	return 0;
	
}

Makefile

CFLAGS     := -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -ffreestanding
ledon.bin:crt0.S ledon_c.c 
    arm-linux-gcc -g -c crt0.S -o crt0.o 
    arm-linux-gcc -g -c ledon_c.c  -o ledon_c.o 
    arm-linux-ld  -Ttext  0x00000000  crt0.o ledon_c.o  -o ledon_elf
    arm-linux-objcopy -O binary  -S ledon_elf ledon.bin
    arm-linux-objdump -D -m arm  ledon_elf > ledon.dis
clean:
    rm -rf  *.bin *elf *.o *.dis
 

 

你可能感兴趣的:(mini2440友善之臂开发板)