-
Notifications
You must be signed in to change notification settings - Fork 8
命令行环境的安装和使用
Ubuntu20.04自带的sdcc版本为3.8.0, 可以直接通过apt install sdcc
安装
# 查看版本
apt-cache show sdcc
# 安装
sudo apt install sdcc
前往 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:
sdcc的安装说明在 http://sdcc.sourceforge.net/doc/sdccman.pdf
- 前往 https://sourceforge.net/projects/sdcc/files/sdcc/ 当前最新版本为4.1.0, 下载最新的4.1.0源码.
- 解压
tar -xvjf sdcc-src-4.1.0.tar.bz2
- 配置
./configure
, 过程中提示gputils需要安装, 通过apt install gputils
安装, 再次./configure
未再报错, 但是提示这个gputils比较旧, 有些设备不支持, 先忽略 - 编译
make
, 过程中提示缺texinfo, 通过apt install texinfo
安装, 然后再make. 需要说一下的是编译时间很长, 如果仅仅需要编译C51, 可以在配置时禁掉其他一些不需要的芯片. - 安装
sudo make install
- 执行
sdcc --version
看看输出是否正确, 执行sdcc --print-search-dirs
查看库文件的位置. 默认的8051的库文件位置为/usr/local/share/sdcc/include/mcs51/
- 写一段代码test001.c,
char test;
void main(void) {
test = 0;
}
用sdcc编译, 如果生成结果文件正常没有报错, 就说明安装没问题
# 这一步会产生test001.asm等文件
sdcc -c test001.c
# 这一步会产生test001.ihx等文件
sdcc test001.c
根据Github上项目首页的说明, 直接用pip3 install stcgal
安装, 然后执行stcgal -h
查看输出
烧录使用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口, 用-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!".