單片機成長之路(51基礎篇) - 015 關於sdcc的多文件編譯範例二

  本文是續 單片機成長之路(51基礎篇) - 009 關於sdcc的多文件編譯範例(一)編寫的。 html

  在實際的工做中,單片機的頭文件和功能函數不可能同所有放在同一個文件夾下面,咱們把單片機成長之路(51基礎篇) - 009 關於sdcc的多文件編譯範例的代碼進行從新拆分,而後把頭文件歸類到一個文件夾(include/)下面,便於管理。python

拆分前文件目錄結構:函數

├── delay.c
├── delay.h
├── main.c
└── makefile

拆分侯生成如下文件:工具

├── include      //頭文件文件夾
│   ├── delay.c    //延時文件的頭文件
│   ├── delay.h
│   ├── led.c     //led燈頭文件
│   ├── led.h
│   └── macro.h    //宏定義頭文件
├── main.bin      //編譯結果
├── main.c        //主函數
└── makefile      //make文件

文件內容以下:post

main.cui

#include "include/delay.h"
#include "include/macro.h"
#include "include/led.h"

void main(void){
    while(1){
        led_0_7(100);
    }
}

makefile(本文件作了改動,增長個頭文件路徑的變量include)spa

# CC 編譯工具聲明
# stc 燒錄工具位置
# 功能是編譯並完成下載
CC    =sdcc
stc =sudo python /home/jikexianfeng/51-demo/.stcflash/stcflash.py
include = ./include/

all : main.bin 

download: main.bin
    $(stc) main.bin

#main.bin : main.hex
#    ~/51-demo/.Hex2bin-2.5/hex2bin main.hex

main.bin : main.hex
    objcopy -I ihex -O binary main.hex main.bin
    
main.hex : main.ihx
    packihx main.ihx > main.hex

main.ihx : main.rel delay.rel led.rel
    $(CC) main.rel led.rel delay.rel

main.rel : main.c $(include)delay.c $(include)macro.h
    $(CC) -c main.c
    
led.rel : $(include)led.c $(include)delay.c $(include)macro.h
    $(CC) -c $(include)led.c
    
delay.rel : $(include)delay.c $(include)macro.h
    $(CC) -c $(include)delay.c

cleanall:
    rm -rf *.lk *.bin *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map
clean:
    rm -rf *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map *.lk

include/macro.hcode

1 #ifndef MACRO_H
2 #define MACRO_H
3 
4 #include "8051.h"
5 
6 #define uint unsigned int 
7 #define uchar unsigned char
8 
9 #endif

include/macro.hhtm

1 #ifndef LED_H
2 #define LED_H
3 #include"macro.h"
4 
5 void led_0_7(uint xms);
6 
7 #endif

include/led.hblog

#include "delay.h"
#include "macro.h"

uchar tab[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void led_0_7(uint xms){
    uchar i;
    for(i=0;i<8;i++){
        P1 = tab[i];
        Delay(xms);
    }
}

include/delay.c

1 #include "delay.h"
2 #include"macro.h"
3 
4 void Delay(uint xms){
5         uint i,j;
6         for(i=xms;i>0;i--)
7         for(j=110;j>0;j--);
8 }

include/delay.h

1 #ifndef DELAY_H
2 #define DELAY_H
3 
4 #include"macro.h"
5 
6 void Delay(uint xms);
7 
8 #endif
相關文章
相關標籤/搜索