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

本范例主要由(main.c ,delay.h,delay.c,makefile)4个文件组成,sdcc的编译环境搭建参照:单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境,废话不多,进入主题:

main.c(主函数)

 1 #include "8051.h"
 2 #include "delay.h"
 3 #define uint unsigned int
 4 #define uchar unsigned char
 5 uchar tab[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
 6
 7 void main(void){
 8     uchar i;
 9     while(1){
10         for(i=0;i<8;i++){
11             P1 = tab[i];
12             Delay(100);
13         }
14     }
15 }

delay.h(功能函数声明文件)

1 #ifndef DELAY_H
2 #define DELAY_H
3 #define uint unsigned int
4 #define uchar unsigned char
5
6 void Delay(uint xms);
7
8 #endif

delay.c(功能函数实体函数)

1 #include "delay.h"
2
3 void Delay(uint xms){
4         uint i,j;
5         for(i=xms;i>0;i--)
6         for(j=110;j>0;j--);
7 }

makefile(make文件)

 1 CC    =sdcc
 2 stc =sudo python /home/jikexianfeng/51-demo/.stcflash/stcflash.py
 3
 4 all : main.bin
 5
 6 #main.bin : main.hex
 7 #    ~/51-demo/.Hex2bin-2.5/hex2bin main.hex
 8
 9 main.bin : main.hex
10     objcopy -I ihex -O binary main.hex main.bin
11     $(stc) main.bin
12
13 main.hex : main.ihx
14     packihx main.ihx > main.hex
15
16 main.ihx : main.rel delay.rel
17     $(CC) main.rel delay.rel
18
19 main.rel : main.c delay.h
20     $(CC) -c main.c
21
22 delay.rel : delay.c
23     $(CC) -c delay.c
24
25 cleanall:
26     rm -rf *.lk *.bin *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map
27 clean:
28     rm -rf *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map

原文地址:https://www.cnblogs.com/jikexianfeng/p/9514979.html

时间: 2024-11-01 10:24:50

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

python成长之路第三篇(1)_初识函数

目录: 函数 1.为什么要使用函数 2.什么是函数 3.函数的返回值 4.文档化函数 5.函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多代码是重复利用的,这样会使我们的代码变得异常臃肿,比如说: 我们要写一个验证码的功能 例子: 比如说我们要进行一些操作,而这些操作需要填写验证码 验证码代码:  1 import random   2 number_check = ''   3 for i in range(0,

Sass进阶之路,之一(基础篇)

Sass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了.预处理器通常可以实现浏览器兼容,变量,结构体等功能,代码更加简洁易于维护. 那么css预处理器与Sass有什么关系呢,Sass就是属于css预处理器中的一种,还有两款他们分别是Less和 Stylus,这里就不做过多的介绍了. 什么是Sass sass是一种css的开发工具,提供了很多便利的写法,不但使css

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编译,所以借此篇内容说明一下原由并为之后文章的学习做准备. 即使本片内容只是在围绕一个小小的HelloWorld程序开展,但还是希望朋友们不要急于求成,"欲速则不达". 文章整体思路: 我们循序渐进地来看,一个Qt应用的完成有以下一个重要的步骤: 项目创建->源码编译->程序运行

单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动

N76e003单片机内部没有EEPROM,但是可以使用 APROM模拟EEPROM功能,代码如下: eeprom.h 1 #ifndef _EEPROM_H_ 2 #define _EEPROM_H_ 3 4 //EEPROM 指令 5 #define BYTE_PROGRAM_AP 0x21 //APROM 字节编程(数据写入) 6 #define PAGE_ERASE_AP 0x22 //APROM 页擦除 (128字节) 7 #define BYTE_Read_AP 0x00 //APRO

单片机成长之路(51基础篇) - 016 常见总线类型

1.首先看看它名字真正的含义: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS:意为IC之间总线) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) USART:通用同步异步收发器 USB:Universal Serial BUS(通用串行总线) CAN:现场总线 2.看看他们传输数据线的组成: SPI总线由三条信号线组成:串行时钟(SCLK).串行数据输出(SD

单片机成长之路(51基础篇) - 018 keil51的STARTUP.A51

STARTUP.A51原始文件: 1 $NOMOD51;Ax51宏汇编器控制命令,禁止预定义的8051.使编译器不使能预定义的;8051符号,避免产生重复定义的错误. 2 ;------------------------------------------------------------------------------ 3 ; This file is part of the C51 Compiler package 4 ; Copyright (c) 1988-2005 Keil E

单片机成长之路(51基础篇) - 023 N76e003 系统时钟切换到外部时钟

N76e003切换到外部时钟的资料很少(因为N76e003的片子是不支持无源晶振的,有源晶振的成本又很高,所以网上很少有对N76e003的介绍).有图有真相: 代码如下: main.c 1 #include <N76E003.H> 2 #include <SFR_Macro.h> 3 #include <Function_Define.h> 4 5 bit BIT_TMP; // 调用 SFR_Macro.h 使用的 6 7 void main(void){ 8 //

单片机成长之路(avr基础篇)- 003 AVR单片机的BOOT区

BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器.对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾. 使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作.我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序

Python成长之路【第二篇】Python基础之数据类型

阅读目录 简介 1 什么是数据? x=10,10是我们要存储的数据 2 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3 数据类型 数字(整形,长整形,浮点型,复数) 字符串 列表 元组 字典 集合 4 如何学习 #一:基本使用 1 用途 2 定义方式 3 常用操作+内置的方法 #二:该类型总结 1 存一个值or存多个值 只能存一个值 可以存多个值,值都可以是什么类型 2 有序or无序 3 可变or不可变 !!!可变:值变,id不变.可变==不可hash