zoukankan      html  css  js  c++  java
  • 【嵌入式】——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
    • $< —— 用来构建目标所使用的源文件
    • $@ —— 目标的完整名
  • 相关阅读:
    Google和Baidu的站内搜索代码
    poj 4468Spy(kmp算法)
    eclipse.ini 内存设置
    ExtJS梦想之旅(八)--GridPanel和EditorGridPanel的使用
    USB线插拔检测使用UEventObserver检测uevent事件的分析
    VNC XEN 双鼠标问题 以及 使用 virt-manager 工具创建的 Xen 虚拟机配置文件不在 /etc/xen/ 目录中了
    输入法分类总结与优缺点
    Codeforces Round #443 (Div. 1) A. Short Program
    论文泛读:Click Fraud Detection: Adversarial Pattern Recognition over 5 Years at Microsoft
    keras用vgg16做图像分类
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/3608965.html
Copyright © 2011-2022 走看看