【嵌入式】——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
  • $< —— 用来构建目标所使用的源文件
  • $@ —— 目标的完整名
原文地址:https://www.cnblogs.com/ngnetboy/p/3608965.html