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

时间:2022-12-27 23:38:39

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

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

  1. 单片机成长之路(51基础篇) - 009 关于sdcc的多文件编译范例&lpar;一&rpar;

    本文是续 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境编写的. 本范例主要由(main.c ,delay.h,delay.c,makefile)4个文件组成,s ...

  2. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  3. Sass进阶之路&comma;之一&lpar;基础篇&rpar;

    Sass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了.预处理器通 ...

  4. python成长之路第三篇&lpar;1&rpar;&lowbar;初识函数

    目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...

  5. C&plus;&plus;自学成长之路(第一篇)

    今天开始我将开启C++自学成长之路,今天是第一天,在以前就一直在网上查找关于c++的资料,想买一本好一点的,权威一点的资料书,通过努力查找,我选择了c++ primer,在网上这本书的好评如潮.更多的 ...

  6. 单片机成长之路(51基础篇) - 008 C51 的标示符和关键字

    标准 C 语言定义了 32 个关键字,如下表(ANSI C的32个关键字): C51在此基础上针对单片机功能进行了扩展,详情见下表(C51编译器扩充关键字): C 51的数据类型 51单片机使用的C语 ...

  7. 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境

    在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了. 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDC ...

  8. 单片机成长之路(51基础篇) - 002 STC单片机冷启动和复位有什么区别

    STC单片机简介 STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等.还支持I ...

  9. 单片机成长之路(51基础篇) - 017 C51中data&comma;idata&comma;xdata&comma;pdata的区别&lpar;转&rpar;

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

随机推荐

  1. &OpenCurlyDoubleQuote;Ceph浅析”系列之五——Ceph的工作原理及流程

    本文将对Ceph的工作原理和若干关键工作流程进行扼要介绍.如前所述,由于Ceph的功能实现本质上依托于RADOS,因而,此处的介绍事实上也是针对RADOS进行.对于上层的部分,特别是RADOS GW和 ...

  2. &lbrack;设计模式&rsqb; javascript 之 桥接模式

    桥接模式说明 定义:分离抽象化与实现化,使之可以*独立的变化: 说明:由于软件环境需求原因,使得类型抽象具有多种实现以自身变化定义等情况,这使得我们要分离抽象实现与具体实现,使得抽象化与实现化解耦, ...

  3. jquery对url中的中文解码

    项目中要实现一个select选择器选择后跳转url,并保存selected的值. url是用get来传递参数,所以考虑加载新页面时,读取参数值,并赋值到select中. 但是由于url的参数使用的是中 ...

  4. 【前端学习】搬进Github

    学习参考 萌码 一.Github简介和基本操作 Github 上操作基本上围绕一个个项目展开.项目就是一个文件夹,在github中成为“仓库”(repository),里面放着所有的项目文件,可以是代 ...

  5. &lpar;原创&rpar;LAMP教程6-使用SecureCRTPortable工具远程连接centos

    (原创)LAMP教程6-使用SecureCRTPortable工具远程连接centos 是的,今天老柯就给大家介绍一款可以远程连接centos的工具,是的这个就是目前,最夯实的,最多人使用的Secur ...

  6. android开发之-查看、编辑手机sqlite数据库文件-实测

    效果图: 1.开始——运行——输入cmd ,输入adb shell,错误:一是“adb不是内部命令或外部命令,也不是可运行的程序或批处理文件”,二是“error:device not found”. ...

  7. js--DOM&amp&semi;BOM总结思维导图---2017-03-24

  8. RSAC 2018:人工智能成为驱动网络安全的新 &OpenCurlyDoubleQuote;引擎”

    作为全球*的权威安全会议,RSA已成为快速了解世界安全趋势的风向标,更是影响安全产业转型与持续发展的重要平台.不同于往年人工智能(AI)在安全领域更多的是一种理论探讨,今年看到的是大量人工智能在安全 ...

  9. configparser&lowbar;配置解析器

    configparser:配置解析器 import configparser config = configparser.ConfigParser() #配置文件 config[', 'Compres ...

  10. pycharm2018破解

    1.下载 链接:https://pan.baidu.com/s/1G0C9xoUQg6JRgNQYLMIi1w 密码:2z3x 2.修改 "G:\Python\JetBrains\PyCha ...