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

2020-01-15来源: eefocus关键字:单片机  51基础篇  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

4 #include "8051.h"

6 #define uint unsigned int 

7 #define uchar unsigned char

9 #endif


include/macro.h


1 #ifndef LED_H

2 #define LED_H

3 #include"macro.h"

5 void led_0_7(uint xms);

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"

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

4 #include"macro.h"

6 void Delay(uint xms);

8 #endif


关键字:单片机  51基础篇  sdcc  多文件编译 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic485770.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机成长之路(51基础篇) - 016 常见总线类型
下一篇:单片机成长之路(51基础篇) - 013 MCS-51单片机控制详解–T2M

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于单片机的DHT11温度湿度采集系统
DHT11温度湿度采集原理图:DHT11的单片机源程序:***************************************************************/#include <reg52.h>#define uint unsigned int #define uchar unsigned char#include <intrins.h>typedef bit BOOL  ; sbit io = P1^1 ;//(口线定义)sbit bee=P1^0;sbit rs = P2^5 ; sbit rw = P2^6 ;sbit ep = P2
发表于 2020-01-09
基于单片机的DHT11温度湿度采集系统
单片机贪吃蛇程序Lcd12864显示
贪吃蛇的单片机源程序如下:/***********************************************************功能说明:贪吃蛇编译环境:keil4MCU     :STC89C52RC时钟频率: 22.1184MHz注意:该例程中“过关”不能在keil4编译环境中正常显示************************************************************//*****************************************************************     
发表于 2020-01-09
51单片机+ULN2003驱动5V减速步进电机程序
51单片机      步进电机/*******************************************************ULN2003驱动5V减速步进电机程序Target:STC89C52RC-40CCrystal:12MHzAuthor:战神单片机工作室Platform:51&avr单片机最小系统板+ULN2003步进电机驱动套件*******************************************************接线方式:IN1 ---- P00IN2 ---- P01IN3 ---- P02IN4 ---- P03+   
发表于 2020-01-09
单片机16*16点阵汉字显示仿真加源码 用74hc595驱动芯片
单片机16*16点阵仿真原理图如下点阵由于电流比较大不能直接接单片机所以用74hc595驱动串转并芯片,还可以实现用很少的io口来控制.  单片机源程序如下:#include "reg51.h"#define uchar unsigned char#define uint  unsigned int#define Lie   P1sbit SHCP = P2^0;sbit  DS  = P2^1;sbit STCP = P2^2;uchar code led[ ] ={0x00
发表于 2020-01-09
单片机16*16点阵汉字显示仿真加源码 用74hc595驱动芯片
单片机与PC机的串口通信课程设计
1.1设计目的单片机与PC机串行通信端口在系统控制的范畴中一直占据着及其重要的地位,它不仅没有因为时代的进步而遭淘汰,反而在规格上越来越完善,应用也越来越广泛。作为一种基本而又灵活方便的通信方式,串口通信被广泛应用于PC与PC或者PC与单片机之间的数据交换以及其他工业控制与自动控制中。如今,在很多场合中,要求单片机不仅能独立完成单机的控制任务,还要能与其他数据控制设备(单片机、PC机等)进行数据交换。因此如何实现PC机与单片机之间的通信具有非常重要的现实意义。1.2设计内容以单片机与PC机为核心,实现单片机与PC机机的串口通信。2系统硬件电路设计2.1系统设计框图图2-1 系统设计框图2.2串口通信基本原理所谓"串行通信
发表于 2020-01-09
单片机与PC机的串口通信课程设计
51单片机的ADC0808数字电压表设计
摘要近些年来,数字电压表逐渐进入人们的视线中,它主要采取数字化测量技术。与传统的指针式仪表相比,它的功能有了进一步的完善,并且精度也有了很大的提高。数字电压表主要采用单片机和模/数转换模块,这样不仅提高了测量速度,而且抗干扰能力强、使用便捷、可扩展性强、测量准确。本文主要采用AT89C51单片机和ADC0808芯片制作的简易数字电压表,可以采集0~5V和5~10V的模拟直流电压进行测量,其测量结果在液晶LCD1602上显示。该设计硬件电路主要有三个模块组成:A/D转换模块、数据处理模块及输出显示模块。数据处理由单片机AT89C51来完成,它主要把ADC0808传送来的数值经一定的数据处理,然后送至显示模块进行显示,同时控制显示芯片
发表于 2020-01-09
51单片机的ADC0808数字电压表设计
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved