单片机成长之路(51基础篇) - 015 关于sdcc的多文件编译范例二

时间:2024-01-07 18:31:26

  本文是续 单片机成长之路(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(){
led_0_7();
}
}

makefile(本文件做了改动,增加个头文件路径的变量include)

# CC 编译工具声明
# stc 烧录工具位置
# 功能是编译并完成下载
CC =sdcc
stc =sudo python /home/jikexianfeng/-demo/.stcflash/stcflash.py
include = ./include/ all : main.bin download: main.bin
$(stc) main.bin #main.bin : main.hex
# ~/-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

 #ifndef MACRO_H
#define MACRO_H #include "8051.h" #define uint unsigned int
#define uchar unsigned char #endif

include/macro.h

 #ifndef LED_H
#define LED_H
#include"macro.h" void led_0_7(uint xms); #endif

include/led.h

#include "delay.h"
#include "macro.h" uchar tab[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void led_0_7(uint xms){
uchar i;
for(i=;i<;i++){
P1 = tab[i];
Delay(xms);
}
}

include/delay.c

 #include "delay.h"
#include"macro.h" void Delay(uint xms){
uint i,j;
for(i=xms;i>;i--)
for(j=;j>;j--);
}

include/delay.h

 #ifndef DELAY_H
#define DELAY_H #include"macro.h" void Delay(uint xms); #endif