【嵌入式】——makefiles
汇编通用makefile:
命令行编辑:
编译
arm-linux-as -march=armv5te -o led.o led.s
-march 指定的指令集的版本 指定架构
连接
arm-linux-ld -nostartfiles -nostdlib -Ttext=0x20008000 -o led led.o
转换led成二进制文件
arm-linux-objcopy -O binary led led.bin
1 PROG=led 2 OBJS=led.o 3 4 AS=arm-linux-as 5 LD=arm-linux-ld 6 OBJCOPY=arm-linux-objcopy 7 AFLAGS=-march=armv5te 8 LDFLAGS=-nostartfiles -nostdlib -Ttext=0x20008000 -e led //0x20008000 是内存地址 9 10 $(PROG): $(OBJS) 11 $(LD) $(LDFLAGS) -o $(PROG) $(OBJS) 12 $(OBJCOPY) -O binary $(PROG) $(PROG).bin 13 14 %.o:%.s 15 $(AS) $(AFLAGS) -o $@ $< //$@ 表示所有目标文件 $< 表示所有依赖文件 16 17 clean: 18 @rm -vf $(OBJS) $(PROG) $(PROG).bin
C 通用makefile:
arm-linux-gcc -march=armv5te -nostdlib -c -o led_c.o led_c.c
arm-linux-ld -nostartfiles -nostdlib -Ttext=0x20008000 -e led_main -o led_c led_c.o
arm-linux-objcopy -O binary led_c led_c.bin
1 PROG=led_c 2 OBJS=led_c.o 3 4 AS=arm-linux-as 5 CC=arm-linux-gcc 6 LD=arm-linux-ld 7 OBJCOPY=arm-linux-objcopy 8 AFLAGS=-march=armv5te 9 CFLAGS=-march=armv5te -nostdlib 10 LDFLAGS=-nostartfiles -nostdlib -Ttext=0x20008000 -e led_main 11 12 $(PROG): $(OBJS) 13 $(LD) $(LDFLAGS) -o $(PROG) $(OBJS) 14 $(OBJCOPY) -O binary $(PROG) $(PROG).bin 15 16 %.o:%.s 17 $(AS) $(AFLAGS) -o $@ $< 18 19 %.o:%.c 20 $(CC) $(CFLAGS) -c -o $@ $< 21 clean: 22 @rm -vf $(OBJS) $(PROG) $(PROG).bin
使用C分别控制 key1按下点亮led1 key2按下点亮led2
1 #define GPC0CON (*(volatile unsigned long*)0xE0200060) //led 2 #define GPC0DAT (*(volatile unsigned long*)0xE0200064) 3 4 #define GPH0CON (*(volatile unsigned long*)0xE0200C00) //key 5 #define GPH0DAT (*(volatile unsigned long*)0xE0200C04) 6 7 #define GPC03OUT (1<<(3*4)) //GPC0 3 led1 15-12位 0001为输出引脚 8 #define GPC04OUT (1<<(4*4)) //GPC0 4 led2 19-16位 9 10 #define GPH00IN ~(0xF<<(4*0)) //GPH0 0 key1 3-0位 0000为输入引脚 11 #define GPH01IN ~(0xF<<(4*1)) //GPH0 1 key2 7-4位 12 int main(void){ 13 //设置led1 2 GPC0CON 为输出引脚 14 GPC0CON = GPC03OUT | GPC04OUT; 15 //设置按键1 2 GPH0CON 为输出引脚 16 GPH0CON = GPH00IN & GPH01IN; 17 18 while(1){ 19 if(GPH0DAT & 0x1){ 20 GPC0DAT = 0x00; 21 } 22 else{ 23 GPC0DAT = 0x08; 24 } 25 if(GPH0DAT & 0x02){ 26 GPC0DAT = 0x00; 27 } 28 else{ 29 GPC0DAT = 0x10; 30 } 31 } 32 }
补充:
简易C语言makefile
C = gcc CFLAGS = -c -Wall OBJS=test.o hello.o hello:$(OBJS) $(CC) $(OBJS) -o $@ rm -rf *.o %.o:%.c $(CC) -c $(CFLAGS) $< clean: rm -rf hello *.o
$<
—— 用来构建目标所使用的源文件
$@
—— 目标的完整名