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

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

 

转载于:https://www.cnblogs.com/jikexianfeng/p/9595660.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux下开发51单片机程序时,多文件开发是很常见的,可以按照以下步骤进行: 1. 创建多个C文件 在Linux下使用任何文本编辑器创建多个C文件,例如: - main.c:主函数所在的文件; - led.c:LED相关的函数所在的文件; - delay.c:延时函数所在的文件。 下面是一个示例: main.c: ```c #include "led.h" void main() { led_init(); while (1) { led_on(); delay(100); led_off(); delay(100); } } ``` led.c: ```c #include "led.h" void led_init() { // 初始化LED } void led_on() { // LED亮 } void led_off() { // LED灭 } ``` delay.c: ```c #include "delay.h" void delay(int n) { int i; while (n--) { for (i = 0; i < 1000; i++) { ; } } } ``` 2. 创建头文件 在Linux下使用任何文本编辑器创建头文件,例如: - led.h:声明LED相关的函数; - delay.h:声明延时函数。 下面是一个示例: led.h: ```c #ifndef LED_H #define LED_H void led_init(); void led_on(); void led_off(); #endif ``` delay.h: ```c #ifndef DELAY_H #define DELAY_H void delay(int n); #endif ``` 3. 编译程序 使用SDCC编译编译多个文件,可以使用以下命令: ``` sdcc main.c led.c delay.c ``` 该命令将生成多个文件,包括可烧录的HEX文件。 4. 下载程序 使用STC-ISP下载器下载HEX文件51单片机中。STC-ISP的使用方式可以参考STC-ISP的官方文档。 注意:在下载程序之前,需要将51单片机连接到电脑并且正确配置下载器的串口和波特率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值