参考:SDCC HOME, SDCC 编译环境, makefile 介绍
SDCC是一个小型设备的C语言编译器,该编译器是标准C语言,可以编译Intel MCS51架构的微处理器,也可以编译STM8等常见MCU。
$ sudo apt-get install sdcc
到这里下载 hex2bin 后解压缩,为方便使用,可将其路径加入 .bashrc
:
PATH=$PATH:/home/.../Hex2bin-2.5
将 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
$ packihx test.ihx > test.hex
$ hex2bin test.hex
使用 USB-TTL 仿真器连接 PC 和单片机,对应的接口如下:
USB-TTL | 单片机 | |
---|---|---|
5V0 | — | VCC |
TXD | — | RXD |
RXD | — | TXD |
GND | — | GND |
$ sudo python3 stcflash.py test.bin
[TOP]
为了方便调试,可编写相应的 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
使用方法如下:
$ 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]