Skip to content

命令行环境的安装和使用

IOsetting edited this page Sep 25, 2021 · 3 revisions

安装sdcc

选项1: apt方式, 适用于debian系发行版

Ubuntu20.04自带的sdcc版本为3.8.0, 可以直接通过apt install sdcc安装

# 查看版本
apt-cache show sdcc
# 安装
sudo apt install sdcc

选项2: 使用二进制安装包(推荐)

前往 https://sourceforge.net/projects/sdcc/files/ 在下面根据不同的系统, 选择不同的安装包

  • 对于64位X86-64位Linux, 点击sdcc-linux-amd64, 自行选择需要使用的版本进行下载
  • 假设下载的是4.1.0版本, 文件为sdcc-4.1.0-amd64-unknown-linux2.5.tar.bz2, 下载后解压并移动到/opt/sdcc目录下
# 解压缩
tar xvf sdcc-4.1.0-amd64-unknown-linux2.5.tar.bz2
# 修改目录名
mv sdcc sdcc-4.1.0
# 移动至/opt/sdcc (需先创建目录)
sudo mv sdcc-4.1.0 /opt/sdcc
# 设置权限
cd /opt/sdcc
chown -R root:root sdcc-4.1.0
# 检查版本号和支持的系统类型
./sdcc-4.1.0/bin/sdcc --version

此时目录结构应当为

/opt
 + --- sdcc
        + --- sdcc-4.1.0

可以在/opt/sdcc目录下放置其他版本. 这种安装方式允许多版本并存, 对于需要配置为默认版本的, 可以将对应的sdcc添加到PATH, 或软链接到/usr/bin下, 例如

# 先检查系统中是否已存在sdcc
whereis sdcc
# 确认没有后, 创建软链
cd /usr/bin
ln -s /opt/sdcc/sdcc-4.1.0/bin/sdcc sdcc
# 在用户目录执行命令检查是否可用
cd
sdcc -v

通过下面的命令检查库文件目录搜索顺序, 默认情况下sdcc会优先搜索相对路径下的库文件目录, 使用当前版本的库文件, 因此指定不同版本的sdcc后, 库文件也会一同切换.

sdcc --print-search-dirs
programs:
.
datadir:
./../share
/usr/local/share
includedir:
./../share/sdcc/include/mcs51
/usr/local/share/sdcc/include/mcs51
./../share/sdcc/include
/usr/local/share/sdcc/include
libdir:
./../share/sdcc/lib/small
/usr/local/share/sdcc/lib/small
libpath:

选项3: 自行编译

sdcc的安装说明在 http://sdcc.sourceforge.net/doc/sdccman.pdf

  1. 前往 https://sourceforge.net/projects/sdcc/files/sdcc/ 当前最新版本为4.1.0, 下载最新的4.1.0源码.
  2. 解压tar -xvjf sdcc-src-4.1.0.tar.bz2
  3. 配置./configure, 过程中提示gputils需要安装, 通过apt install gputils安装, 再次./configure未再报错, 但是提示这个gputils比较旧, 有些设备不支持, 先忽略
  4. 编译make, 过程中提示缺texinfo, 通过apt install texinfo安装, 然后再make. 需要说一下的是编译时间很长, 如果仅仅需要编译C51, 可以在配置时禁掉其他一些不需要的芯片.
  5. 安装sudo make install

检查和测试安装好的sdcc

  1. 执行sdcc --version看看输出是否正确, 执行sdcc --print-search-dirs查看库文件的位置. 默认的8051的库文件位置为/usr/local/share/sdcc/include/mcs51/
  2. 写一段代码test001.c,
char test;

void main(void) {
  test = 0;
}

用sdcc编译, 如果生成结果文件正常没有报错, 就说明安装没问题

# 这一步会产生test001.asm等文件
sdcc -c test001.c
# 这一步会产生test001.ihx等文件
sdcc test001.c

安装stcgal

根据Github上项目首页的说明, 直接用pip3 install stcgal安装, 然后执行stcgal -h查看输出

测试安装好的stcgal

烧录使用stcgal, 这个页面下有详细的使用方法, 对于STC89C52使用-P stc89, 对于STC12C5A60S2系列, 使用-P stc12

stcgal -P stc12 test002.ihx 

Waiting for MCU, please cycle power: done # 这里要关闭再打开电源
Target model:
...
Writing flash: 640 Bytes [00:00, 1844.10 Bytes/s]                                             
Setting options: done
Disconnected!

烧录完就会自动运行.

使用不同的烧录波特率

默认的波特率为19200, 写入较慢, 对于STC89C52RC/STC12C5A60S2系列可以直接使用115200的波特率, 用-b参数指定

stcgal -P stc89 -b 115200 test002.ihx

使用不同的COM口

如果同时有多个com口, 用-p指定端口

stcgal -P stc89 -b 115200 dist/89/89.hex -p /dev/ttyUSB1

显示更多提示

使用-D参数能显示出串口的交互信息

编译测试封装库

Git导出到本地

git clone https://github.com/IOsetting/HML_FwLib_STC12.git

如果是通过解压缩二进制安装包安装的, 并且未添加到PATH, 也未软链至/usr/bin等PATH覆盖的路径, 则需要检查一下/usr/env.sh, 将其PATH设置是否与当前系统相同, 不同的话需要修改

# add target sdcc path into $PATH
export PATH="$PATH:/opt/sdcc-4.0.0/bin"

上面是默认的内容, 如果是按选项2的步骤安装的sdcc-4.1.0, 需要对应修改为

export PATH="$PATH:/opt/sdcc/sdcc-4.1.0/bin"

然后执行env.sh添加环境变量

source env.sh

编译, 默认MCU为STC12C5A60S2

cd HML_FwLib_STC12/usr/
make

如果您的MCU是其它型号, 需要自行修改usr目录下的Makefile.config文件, 将下面这行修改为您的MCU型号

MCU       ?= STC12C5A60S2

连接好USB2TTL至开发板后, 烧录

stcgal -P stc12 -b 115200 --protocol stc12 ../obj/output.ihx

烧录完成后, 可以通过Cutecom连接串口, 波特率使用9600, 如果一切正常, 可以看到MCU每隔0.5秒输出的"Hello World!".