安装sdcc编译器
- ubuntu下可以直接
sudo apt install sdcc*
安装,版本是3.8.0 - 也可在sdcc下载最新版本安装,版本是3.9.0
安装isp写入工具
- librech551支持usb写入
- ch552isptool 支持usb写入(仅支持bootloader version >= 2.30)
- wchprog支持usb写入(仅支持bootloader version<2.30)
增加usb权限
为了普通用户也能使用usb写入,可以新建个rules文件修改usb权限
sudo vi /etc/udev/rules.d/99-wchisp.rules
文件内容如下:
ATTRS{idVendor}=="4348", ATTRS{idProduct}=="55e0", MODE="0666"
使规则生效:
sudo udevadm control --reload-rules
sudo udevadm trigger
下载头文件与示例
官方提供的示例是在keil c51环境下使用的,在sdcc编译通不过.可以使用第三方库
- ch554_sdcc包含了头文件与示例,可适用于ch551,ch552,ch554
编译与烧写
参考示例,写个Makefile,示例如:
TARGET = example
C_FILES = \
main.c \
../../include/debug.c
include ../Makefile.include
可自定义的构建配置变量:
- TARGET 目标名称
- C_FILES 可包含的多个C文件
- FREQ_SYS 系统主频,默认16000000,可修改为12000000,24000000等
- XRAM_SIZE 对应sdcc命令参数–xram-size,默认0x0400
- XRAM_LOC 对应sdcc命令参数–xram-loc,默认0
- CODE_SIZE 对应sdcc命令参数–code-size,默认0x2800
- EXTRA_FLAGS 添加更多sdcc的编译参数,如 --opt-code-speed,–debug等
- 执行
make
编译,成功时会自动生成hex和bin文件 - 执行
make flash
会调用LibreCH551将程序下载到目标板
移植keil c51的源码到sdcc
如有必要移植keil c51的源码到sdcc,可以先查看sdcc手册了解其语法.主要针对C扩展部分的语法不同
- 部分关键字需使用双下划线,如:__bit, __sfr, __sbit, __code, __xdata, __data, __using, __at等
- 寄存器定义
示例:- __sbit __at(addr+bit) name
- __sfr __at(addr) name
- 中断定义
示例:- void interrupt_id (void) __interrupt(interrupt_num) __using(bank_num)
- 绝对地址定义
示例:- __xdata unsigned char __at(addr) name
- 内嵌汇编
示例:- 旧式写法:__asm NOP __endasm
- 新式式写法: __asm__ (“NOP”)
可以在代码#include <compiler.h>
这个头文件,使用SBIT ,SFR,INTERRUPT,INTERRUPT_USING
等这些宏来自动适配不同的编译器.
其它
- 波特率选择
如果使用 USB 模块,那么 Fusb4x 必须是 48MHz;并且在用全速 USB 时,系统主频 Fsys 不低于
6MHz;在用低速 USB 时,系统主频 Fsys 不低于 1.5MHz。
当需要用到USB模块时,主频只有几种可以选择.串口的波特率通信要求误差小于2%.当 U1SMOD=1 时,波特率如下表,如需要使用较高波特率通信,主频最好为24MHz.