由于Keil收费,想要免费的替代,SDCC是51单片机开发不错的选择。这里用VSCode、EIDE和SDCC编译器组合来进行51单片机开发。
1.首先安装SDCC编译器,SDCC的特点是免费、开源和跨平台,下载地址:https://sourceforge.net/projects/sdcc/files/
2.安装VSCode和EIDE,在VSCode扩展里面找到Embedded IDE并安装。
3.设置EIDE,一般情况下在安装好SDCC后安装EIDE,工具链路径已经默认设置为SDCC,如果没设置好就手动设置一下。
4.开始开发,打开EIDE,新建项目,选择模板,可以选择现成的模板,比如内置项目模板和从远程仓库获取里面都有针对51单片机的专门模板(带SDCC Toolchain或者with sdcc compiler的),当然也可以选择空项目->8位MCU项目,键入项目名称,选择项目保存位置,切换工作区,点左侧构建配置:SDCC->构建器选项->全局选项,在下面的编译器附加选项(全局)里面填入:--iram-size 128 --xram-size 0 --code-size 4096,这段设置对应的是STC15F104W单片机,其它单片机自行修改,然后点右上全部保存。这样就设置好了,可以开发了。

--iram-size 128 --xram-size 0 --code-size 4096 \\参数说明
iram-size 用来检查片内ram的使用情况
xram-size 用来检查外部ram的使用情况
code-size 用来检查rom的使用情况
stack-size 用来检查堆栈的使用情况

5.SDCC和Keil在语法上还是有一些区别的。

1.sbit
keil C:
sbit SDA = P1 ^ 5;
sbit CLK_ST = P1 ^ 6;

SDCC:
#define SDA P1_5
#define CLK_ST P1_6

2.中断
在sdcc中,中断处理函数使用关键字__interrupt标识,后面跟上中断号

keil C:
void SerialComm()  interrupt 4

SDCC:
void SerialComm()  __interrupt 4

3._nop_()
在sdcc中,没有_nop_(),可以用 #define _nop_() __asm NOP __endasm 替代

SDCC:
#define _nop_() __asm NOP __endasm