本文是續 單片機成長之路(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