历史上的今天
今天是:2025年01月16日(星期四)
2020年01月16日 | 单片机成长之路(51基础篇)- 009 关于sdcc的多文件编译范例
2020-01-16 来源:eefocus
本文是续 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境编写的。
本范例主要由(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 编译工具声明
2 # stc 烧录工具位置
3 # 功能是编译并完成下载
4 CC =sdcc
5 stc =sudo python /home/jikexianfeng/51-demo/.stcflash/stcflash.py
6
7 all : main.bin
8
9 download: main.bin
10 $(stc) main.bin
11
12 #main.bin : main.hex
13 # ~/51-demo/.Hex2bin-2.5/hex2bin main.hex
14
15 main.bin : main.hex
16 objcopy -I ihex -O binary main.hex main.bin
17
18 main.hex : main.ihx
19 packihx main.ihx > main.hex
20
21 main.ihx : main.rel delay.rel
22 $(CC) main.rel delay.rel
23
24 main.rel : main.c delay.h
25 $(CC) -c main.c
26
27 delay.rel : delay.c
28 $(CC) -c delay.c
29
30 cleanall:
31 rm -rf *.lk *.bin *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map
32 clean:
33 rm -rf *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map
上面make中/home/jikexianfeng/51-demo/.stcflash/stcflash.py是配置的下载驱动文件,详情见:单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境
最后生成main.bin的方法有两种,
方法一,调用sdcc自身的工具:
main.bin : main.hex
objcopy -I ihex -O binary main.hex main.bin
方法二,使用hex2bin进行编译(安装方法见:单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境):
main.bin : main.hex
~/51-demo/.Hex2bin-2.5/hex2bin main.hex
可以根据个人喜好选择使用。
史海拾趣
|
原来是用ce4.2的系统 用的是evc4 现在系统改成ce5.0的 想用vc2005 因为可以单步调试. 但有个消息函数一直没有找到, 请大家在vc2005上面怎么做告诉下我 PreTranslateMessage(MSG* pMsg) evc4和vc6 我知道 ...… 查看全部问答> |
|
由于程序里面定义了一些比较大的idata类型的全局变量,导致256字节的ram不够用了。选择的是small模式,在不考虑优化的情况下,可以把这里的idata类型变量随意的改为xdata类型吗?… 查看全部问答> |
|
有没有哪位大虾做过Si4432直接模式的,给小弟指导一下啊,我用si4432做串口透明传输,如果用FIFO模式,串口速率达到9600bps的时候,空中速率要很高啊,我改用直接模式,但不知道咋个弄,资料上介绍很少,而且我是刚接触这块儿不久的一个菜鸟,各种 ...… 查看全部问答> |
|
zigbee协议是个泛指的概念,它实际是一系列的协议标准与规范,并不是实际的代码,当然也不能实际使用.到目前为止已经出了3个版本,分别是2004,2006,2007. 以TI公司为代表的几家, 参照了3个不同的ZIGEBEE版本,又结合各自厂家推出的硬件平台,分别开发出 ...… 查看全部问答> |
|
各位,大虾好,请有没有关于MSP430F5438好坏的自检程序,就是对MCU内部的各个内设都有一个自检,就像示波器自检功能那样,通过逐一打开面板上的所有灯来告诉我们示波器硬件是否OK?在此表示感谢。 … 查看全部问答> |




