本文是續 單片機成長之路(51基礎篇) - 009 關于sdcc的多文件編譯范例(一)編寫的。
在實際的工作中,單片機的頭文件和功能函數不可能同全部放在同一個文件夾下面,我們把單片機成長之路(51基礎篇) - 009 關于sdcc的多文件編譯范例的代碼進行重新拆分,然后把頭文件歸類到一個文件夾(include/)下面,便于管理。
拆分前文件目錄結構:
├── 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文件
文件內容如下:
main.c
#include "include/delay.h"
#include "include/macro.h"
#include "include/led.h"
void main(void){
while(1){
led_0_7(100);
}
}
makefile(本文件做了改動,增加個頭文件路徑的變量include)
# 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.h
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.h
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.h
#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
上一篇:單片機成長之路(51基礎篇) - 016 常見總線類型
下一篇:單片機成長之路(51基礎篇) - 013 MCS-51單片機控制詳解–T2M
推薦閱讀
史海拾趣