51forSDCC By x7890
一个极简VSCode扩展,使用SDCC - Small Device C Compiler编译51(STC等)单片机代码。
功能介绍
右键编译
安装本扩展后,打开main() 函数所在的.c文件,顶部的文件标签将多出使用SDCC编译 右键菜单(快捷键为Ctrl+F9 )。
点击该菜单,本扩展会自动将编译器的输出放到build 文件夹。 注意,编译的是当前激活的.c文件。
若要清除编译结果,直接删除整个build 文件夹即可。
当控制台显示RAM分布,以及RAM与FLASH占用时,说明编译成功。
语法转换
在编辑器中点击右键菜单的Keil语法转SDCC ,可以自动将所选内容的Keil的语法格式转为SDCC的语法格式。不能保证转换所有语法。
汇编跳转
当主程序文件编译成功后,在编辑器中点击右键菜单的转到汇编代码 ,可以查看对应.lst文件中带有地址和机器码的汇编代码。只支持主程序文件。
若光标所在行的代码被优化,则会跳转到上一条有效代码。
如果文件编码错误,可能会跳转失败。请用GBK编码重新打开.lst文件,并再试一次。
特殊字符
本扩展未主动储存绝对路径、文件名等信息,因此移动工程文件时无需考虑路径问题。文件名可含有空格或中文字符。
由于SDCC使用GBK编码,请确保文件编码也使用GBK编码。若使用错误的编码打开,并进行了修改和保存,则产生的乱码可能无法恢复。
未提供的功能
本扩展不提供烧录功能,需要自行使用其他软件(如STC-ISP )烧录。
本扩展不提供调试功能。
本扩展每次编译所有文件,没有增量编译功能。由于单片机代码较短,只要不开启杀毒软件,耗时不会很长。
注意事项
本扩展仅在Windows下测试,使用PowerShell作为终端宿主,单片机使用STC15W型号。
需要自行安装SDCC编译器,并添加到PATH 。
需要安装C/C++ 扩展套件,并自行配置c_cpp_properties.json 。推荐在C/C++: 编辑配置(UI) 的默认配置基础添加以下内容:
- 包含路径:添加
C:\Program Files\SDCC\include
- (预处理器)定义:添加以下内容(如有其他关键字,可自行添加)
INTERRUPT(name, vector)=void name(void)
INTERRUPT_USING(name, vector, regnum)=void name(void)
NOP()=(void)(0)
_nop_()=(void)(0)
__asm__(...)=
__naked=
__reentrant=
__bit=bool
__data=
__idata=
__pdata=
__xdata=
__bdata=
__code=
SDCC的__code 、__data 、__idata 、__xdata 、__bit 等关键字以2个下划线开头。
SDCC不允许使用逗号将无返回值的函数连接成一个表达式。
SDCC的中断格式void fun(void) __interrupt 0 __using 1 在VSCode中有警告,无法通过(预处理器)定义消除。因此,建议使用INTERRUPT_USING(fun, 0, 1) 的通用格式开声明中断头部。
SDCC要求中断函数必须在main() 函数所在文件(主程序文件)中实现。
有时主程序代码较少,希望多个主程序共享同一份库,分别与库链接成一个hex文件,而不希望建立许多个包含库文件的工程。本扩展在链接时会排除当前活动文件以外的主程序(可通过主程序文件名 配置),只需要每个主程序文件的文件名以main 或test 开头即可(如:main1.c 、main_2.c 、test.c )。
SDCC会保留.c文件中的所有函数,除非其中的所有函数均未被使用,这会导致代码占用空间增大。建议将功能不相关的函数分别放在多个.c文件中。
扩展设置
SDCC附加命令行参数
用于自定义SDCC的编译命令,详见SDCC Compiler User Guide 3.3节 Command Line Options 。常用参数:
- 代码优化:
--opt-code-speed ,--opt-code-size
- 语言标准:
--std-c11 ,--std-sdcc11
- 默认变量位置:
--model-small ,--model-medium ,--model-large
主程序文件名
一个正则表达式。如果一个文件的文件名匹配该正则表达式,该文件不会自动编译和链接,需要手动选择并编译,通常对应主程序。
默认匹配main 开头和test 开头的文件。
| |