使用SDCC+xmake+VScode打造一个自由的51单片机开放环境
本教程适用于:喜欢折腾和苦恼keil高昂价格且不支持代码补全的
且有非windows平台开发需求的嵌入式新老开发者
如果你不喜欢折腾,请看贴子最后部分
目前sdcc编译器不支持stc32系列
1:安装sdcc
SDCC(small device c compiler 微控制器C编译器)是由Sandeep Dutta设计的用于8位微控制器的免费开源,可重定向,优化的标准(ISO C90,ISO C99,ISO C11)C编译工具。当前版本可编译英特尔MCS51架构微处理器(8031,8032,8051,8052等等)、Dallas 的DS80C390以及它的一些变种,飞思卡尔(原先的摩托罗拉)的HC08系列(hc08, s08)以及Zilog的基于Z80的MCUs (Z80, Z180, gbz80, Rabbit 2000/3000, Rabbit 3000A)和Toshiba TLCS90系列, Zilog的Z80模式的eZ80,STMicroelectronics的STM8。SDCC它可以重定向到其它的微控制器,对Microchip PIC系列和 Padauk PDK15系列的支持正在开发中。编译器的全部源码都是在GPL开源协议下发布。SDCC使用ASXXXX和ASLINK的改良版本,它们是开源、可重定向汇编器和链接器。除了针对特定MCU的优化外,SDCC也做了许多标准优化例如:全局子表达式消除循环优化const复制传播死代码消除jumps table for switch statements
- 点击进入sdcc官网下载安装文件
* 安装完成后记住sdcc的安装目录,稍后一会会用到
2:安装xmake
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
虽然,简单易用是 xmake 的一大特色,但 xmake 的功能也是非常强大的,既能够像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,还有内置的包管理系统来帮助用户解决 C/C++依赖库的集成使用问题。
目前,xmake主要用于C/C++项目的构建,但是同时也支持其他native语言的构建,可以实现跟C/C++进行混合编译,同时编译速度也是非常的快,可以跟Ninja持平。
- 点击进入xmake官网安装
- 使用xmake配合sdcc创建51单片机项目工程,至此你已经可以编译mcs51工程了// 创建工程目录
xmake create -l c -P learn_c51
// 修改工程为c51项目
xmake f -p mcs51 --toolchain=sdcc -a mcs51 --sdk="C:\Program Files\SDCC"
//尝试编译项目
xmake
3:vscode配置
- 点击进入vscode官网下载安装包
- 安装扩展如下
- 使用vscode打开刚刚使用xmake创建的项目目录,至此开发环境就已经基本配置完成
- 修改vscode参数,使其支持sdcc语法(如果不修改的话,因为语法报错会导致代码提示无法使用)
方法整理自 [分享一个免插件的VSCode开发sdcc-51方法 - SDCC, IAR C++ for STC8, GCC, VSCode,Linux, MacOS 国芯技术交流网站 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)]
- 使用vscode打开你使用xmake创建的工程目录
- 新建文件 .vscode/c_cpp_properties.json 写入如下配置
{
"configurations": [
{
"name": "sdcc",
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"__sfr=unsigned char",
"__sbit=int",
"__at(a)= ",
"__data= ",
"__xdata= ",
"__interrupt n= ",
"__using= "
],
"windowsSdkVersion": "10.0.22621.0",
"compilerPath": "C:/Program Files/SDCC/bin/sdcc.exe", // sdcc编译器安装目录
"cStandard": "c99"
}
],
"version": 4
}
补充,关于引用头文件以及编译器参数写法
此处以stc8h8k64u单片机为例
我的项目结构以及xmake.lua配置为
这个配置参数可作为51单片机开发模板使用
add_rules("mode.debug", "mode.release")
-- 此处以stc8h8k64u为例,其他芯片可对照stc官方手册修改
local xram_size = 0
local iram_size = 256
local code_size = 65536
add_includedirs("lib","include", {public=true})
add_files("lib/*.c","include/*.c")
target("xmake_c51")
add_ldflags("--model-small")
add_ldflags("--xram-size "..xram_size)
add_ldflags("--iram-size "..iram_size)
add_ldflags("--code-size "..code_size)
add_ldflags("--opt-code-size")
add_cflags("--opt-code-size")
set_kind("binary")
add_files("src/*.c")
配置完成之后便可以使用 xmake 命令进行编译,编译产物为 bin 格式,可使用stc-isp软件直接烧录至单片机中。
免折腾方案
vscode安装eide扩展,亦可以进行正常开发,且其支持的扩展功能也挺多
感谢分享!{:4_174:} kksk 发表于 2024-4-26 16:19
感谢分享!
{:lol:} O=main.rel vars.rel
D=.dep
CC=sdcc
CFLAGS=
t.ihx : $O
$(CC) -o $@ $^
%.rel : %.c
$(CC) -o $@ $(CFLAGS) -c $<
$D: *.h
@-rm -f $@
@for f in *.c; do \
$(CC) $(CFLAGS) -MM $$f >>$@; \
done
-include $D
clean:
-@rm -f $O
.PHONY: clean 我用,STC32,你告诉我,不能用,我还点进来看了看,哎,真是闲的 科学妞妞 发表于 2024-9-8 09:51
我用,STC32,你告诉我,不能用,我还点进来看了看,哎,真是闲的
stc32目前就只能keil了,但是可以vscode插件开发 没有完整工程吗? 还得照着搞一遍多麻烦呐{:titter:} soma 发表于 2024-9-8 10:41
stc32目前就只能keil了,但是可以vscode插件开发
大佬用的是keil uvision Assistant还是keil Assistant?
页:
[1]