• 【嵌入式】——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
    • $< —— 用来构建目标所使用的源文件
    • $@ —— 目标的完整名
  • 相关阅读:
    Speex for Android
    反射(高大上)、类的内置方法
    hashlib摘要算法模块,logging日志,configparser配置文件模块
    抽象类,接口类,封装,property,classmetod,statimethod
    面对对象三大特征:继承 多态(鸭子类型)(面试题)
    面向对象命名空间及组合(面试题)
    初始面向对象
    模块与包
    常用模块
    列表表达式,生成器表达式,
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/3608965.html
Copyright © 2020-2023  润新知