8051 C Development Using SDCC(Small Device C Compiler)

参考:SDCC HOME, SDCC 编译环境, makefile 介绍



SDCC是一个小型设备的C语言编译器,该编译器是标准C语言,可以编译Intel MCS51架构的微处理器,也可以编译STM8等常见MCU。

安装

安装 sdcc

$ sudo apt-get install sdcc

下载 hex2bin

这里下载 hex2bin 后解压缩,为方便使用,可将其路径加入 .bashrc :

PATH=$PATH:/home/.../Hex2bin-2.5

下载 stcflash.py

将 bin 文件烧写到 STC 单片机使用 stcflash.py ,可从这里下载,该文件需要使用 pyserial 包:

$ sudo apt-get install python-pip python3-pip
$ pip install pyserial
$ pip3 install pyserial

[TOP]


烧录

写代码

编写驱动 c 代码,保持为 test.c 。

编译

$ sdcc test.c

生成以下文件:

test.lk test.map test.rel test.sym test.asm test.ihx test.lst test.mem test.rst

生成 hex 文件

$ packihx test.ihx > test.hex

生成 bin 文件

$ hex2bin test.hex

连接单片机

使用 USB-TTL 仿真器连接 PC 和单片机,对应的接口如下:

USB-TTL   单片机
5V0 VCC
TXD RXD
RXD TXD
GND GND

烧录

$ sudo python3 stcflash.py test.bin
注意:当屏幕出现 Detecting target ... 时,需断开 5V0 和 VCC 后重新连接。

[TOP]


makefile

为了方便调试,可编写相应的 makefile 文件,如上述过程,可存为 GNUmakefile, makefile 或 Makefile ,内容为:

# 烧写单片机程序文件
z_sdcc=../tool/sdcc/bin/sdcc
z_packihx=../tool/sdcc/bin/packihx
z_hex2bin=../tool/Hex2bin-2.5/hex2bin
z_stcflash=../tool/stcflash/stcflash.py

test.hex:test.c
    ${z_sdcc} test.c
    ${z_packihx} test.ihx > test.hex
    ${z_hex2bin} test.hex
clean:
    rm -f *.lk *.map *.rel *.sym *.asm *.ihx *.lst *.mem *.rst
flash:
    sudo python3 ${z_stcflash} test.bin
注意:执行命令前边的空白必须是 'TAB' 。

使用方法如下:

$ make
...
$ make clean
...
$ make flash
Detecting target ...

关于 makefile 的用法,可参考以下例子。

# gcc 编译 .c 程序
all: test.bin
test.bin: prog.o data.o
    gcc -o test.bin prog.o data.o
prog.o: prog.c prog.h data.h
    gcc -c prog.c -o prog.o
data.o: data.c data.h
    gcc -c data.c -o data.o
clean:
    rm -f *.o

makefile 有一些内置变量,常见的有:

$* 目标文件名称,不含扩展名
$@ 目标文件名称,完整名称
$+ 所有依赖文件,以空格分隔
$< 第一个依赖文件
$? 修改日期比现有目标文件更新的依赖文件
$^ 所有依赖文件,不含重复文件,以空格分隔
RM 删除文件命令,默认为 ‘rm -f’
CC C语言编译程序,默认为 ‘cc’

上边的例子可以改写为:

# gcc 编译 .c 程序
OBJS="prog.o data.o"
CC=gcc
all: test.bin
test.bin: ${OBJS}
    ${CC} -o $@ $^
prog.o: prog.c prog.h data.h
data.o: data.c data.h
clean:
    ${RM} *.o

[TOP]