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


  本文是續 單片機成長之路(51基礎篇) - 006 在Linux下搭建51單片機的開發燒寫環境編寫的。 

  本范例主要由(main.c ,delay.h,delay.c,makefile)4個文件組成,sdcc的編譯環境搭建參照:單片機成長之路(51基礎篇) - 006 在Linux下搭建51單片機的開發燒寫環境,廢話不多,進入主題:

main.c(主函數)

 1 #include "8051.h"
 2 #include "delay.h"
 3 #define uint unsigned int 
 4 #define uchar unsigned char 
 5 uchar tab[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
 6 
 7 void main(void){
 8     uchar i;
 9     while(1){
10         for(i=0;i<8;i++){
11             P1 = tab[i];
12             Delay(100);
13         }
14     }
15 }

delay.h(功能函數聲明文件)

1 #ifndef DELAY_H
2 #define DELAY_H
3 #define uint unsigned int 
4 #define uchar unsigned char
5 
6 void Delay(uint xms);
7 
8 #endif

delay.c(功能函數實體函數)

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

makefile(make文件)

 1 # CC 編譯工具聲明
 2 # stc 燒錄工具位置
 3 # 功能是編譯並完成下載
 4 CC    =sdcc
 5 stc =sudo python /home/jikexianfeng/51-demo/.stcflash/stcflash.py
 6 
 7 all : main.bin 
 8 
 9 download: main.bin
10     $(stc) main.bin
11 
12 #main.bin : main.hex
13 #    ~/51-demo/.Hex2bin-2.5/hex2bin main.hex
14 
15 main.bin : main.hex
16     objcopy -I ihex -O binary main.hex main.bin
17     
18 main.hex : main.ihx
19     packihx main.ihx > main.hex
20 
21 main.ihx : main.rel delay.rel
22     $(CC) main.rel delay.rel
23 
24 main.rel : main.c delay.h
25     $(CC) -c main.c
26     
27 delay.rel : delay.c
28     $(CC) -c delay.c
29 
30 cleanall:
31     rm -rf *.lk *.bin *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map
32 clean:
33     rm -rf *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map

上面make中/home/jikexianfeng/51-demo/.stcflash/stcflash.py是配置的下載驅動文件,詳情見:單片機成長之路(51基礎篇) - 006 在Linux下搭建51單片機的開發燒寫環境

最后生成main.bin的方法有兩種,

方法一,調用sdcc自身的工具:

main.bin : main.hex
    objcopy -I ihex -O binary main.hex main.bin

方法二,使用hex2bin進行編譯(安裝方法見:單片機成長之路(51基礎篇) - 006 在Linux下搭建51單片機的開發燒寫環境):

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

可以根據個人喜好選擇使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM