单片机成长之路(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(){
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的多文件编译范例二的更多相关文章
- 单片机成长之路(51基础篇) - 009 关于sdcc的多文件编译范例(一)
本文是续 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境编写的. 本范例主要由(main.c ,delay.h,delay.c,makefile)4个文件组成,s ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- Sass进阶之路,之一(基础篇)
Sass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了.预处理器通 ...
- python成长之路第三篇(1)_初识函数
目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...
- C++自学成长之路(第一篇)
今天开始我将开启C++自学成长之路,今天是第一天,在以前就一直在网上查找关于c++的资料,想买一本好一点的,权威一点的资料书,通过努力查找,我选择了c++ primer,在网上这本书的好评如潮.更多的 ...
- 单片机成长之路(51基础篇) - 008 C51 的标示符和关键字
标准 C 语言定义了 32 个关键字,如下表(ANSI C的32个关键字): C51在此基础上针对单片机功能进行了扩展,详情见下表(C51编译器扩充关键字): C 51的数据类型 51单片机使用的C语 ...
- 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境
在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了. 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDC ...
- 单片机成长之路(51基础篇) - 002 STC单片机冷启动和复位有什么区别
STC单片机简介 STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等.还支持I ...
- 单片机成长之路(51基础篇) - 017 C51中data,idata,xdata,pdata的区别(转)
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...
随机推荐
- vdom,diff,key 算法的了解
<ul id='list'> <li class='item'>Item1</li> <li class='item'>Item2 </li> ...
- Webmin详细安装过程及问题解决
管理系统是件艰巨的任务,创建用户账户,配置服务,检查日志,还有系统管理员必须面对的所有其他的职责,都使系统管理工作成为一个不小的负担.下面介绍一个叫webmin的软件,webmin软件安装后能让读者从 ...
- P3258 [JLOI2014]松鼠的新家
P3258 [JLOI2014]松鼠的新家倍增lca+树上差分,从叶子节点向根节点求前缀和,dfs求子树和即可,最后,把每次的起点和终点都. #include<iostream> #inc ...
- 李宏毅机器学习笔记5:CNN卷积神经网络
李宏毅老师的机器学习课程和吴恩达老师的机器学习课程都是都是ML和DL非常好的入门资料,在YouTube.网易云课堂.B站都能观看到相应的课程视频,接下来这一系列的博客我都将记录老师上课的笔记以及自己对 ...
- JS的异步世界
前言 JS的异步由来已久,各种异步概念也早早堆在开发者面前.可现实代码中,仍然充斥了各种因异步顺序处理不当的bug,或因不好好思考,或因不了解真相.今天,就特来再次好好探索一番JS的异步世界. 01 ...
- markdown那些事儿
markdown是一种轻量标记语言,可以用多种编辑器来写markdown语法. 一.基础链接 http://www.markdown.cn/ https://zh.wikipedia.org/wiki ...
- My Web Developer Roadmap
必需技能部分,可以理解为通用的.基础的技能,不管我们选择哪个方向都是通用的,包括但不限于 Git 使用.HTTP/HTTPS.数据结构和算法等.当然了,学习能力是必须具备的. 从一开始学习web前端, ...
- [CF1131F] Asya And Kittens
Description: 给定n个点的序列,一开始有n个块,每次将两个块合并,并告诉你这两个块中的一对元素,求一种可能的原序列 Hint: \(n \le 1.5*10^5\) Solution: 实 ...
- yii2 配合bootstrap添加一个气泡
添加一个气泡 1.bootstrap 官网:http://getbootstrap.com/ 2.bootstrap 中文官网:http://v3.bootcss.com/ 添加气泡主要需要用到 bo ...
- Redis、Memcache、MongoDb的优缺点
Redis.Memcache.MongoDb的优缺点 Redis优点 支持多种数据结构,如 string(字符串). list(双向链表).dict(hash表).set(集合).zset(排序set ...