找回密码
 立即注册
查看: 3627|回复: 7

使用SDCC+xmake+VScode打造一个自由的51单片机开放环境

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-04-24 23:46:14

1

主题

5

回帖

58

积分

注册会员

积分
58
发表于 2024-4-26 11:50:24 | 显示全部楼层 |阅读模式
本教程适用于:
喜欢折腾苦恼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官网下载安装文件

   5ECCB792-A1C4-478c-ABA6-4D7A824957E7.png
  * 安装完成后记住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官网安装


Dingtalk_20240426105952.jpg



  - 使用xmake配合sdcc创建51单片机项目工程,至此你已经可以编译mcs51工程了
  1. // 创建工程目录
  2. xmake create -l c -P learn_c51
  3. // 修改工程为c51项目
  4. xmake f -p mcs51 --toolchain=sdcc -a mcs51 --sdk="C:\Program Files\SDCC"
  5. //尝试编译项目
  6. xmake
复制代码


3:vscode配置



  - 点击进入vscode官网下载安装包



- 安装扩展如下
   Dingtalk_20240426111600.jpg
   Dingtalk_20240426111615.jpg

  - 使用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 写入如下配置
   Dingtalk_20240426112822.jpg
  1. {
  2.     "configurations": [
  3.         {
  4.             "name": "sdcc",
  5.             "defines": [
  6.                 "_DEBUG",
  7.                 "UNICODE",
  8.                 "_UNICODE",
  9.                 "__sfr=unsigned char",
  10.                 "__sbit=int",
  11.                 "__at(a)= ",
  12.                 "__data= ",
  13.                 "__xdata= ",
  14.                 "__interrupt n= ",
  15.                 "__using= "
  16.             ],
  17.             "windowsSdkVersion": "10.0.22621.0",
  18.             "compilerPath": "C:/Program Files/SDCC/bin/sdcc.exe", // sdcc编译器安装目录
  19.             "cStandard": "c99"
  20.         }
  21.     ],
  22.     "version": 4
  23. }
复制代码


补充,关于引用头文件以及编译器参数写法

此处以stc8h8k64u单片机为例

我的项目结构以及xmake.lua配置为


Dingtalk_20240426114953.jpg
这个配置参数可作为51单片机开发模板使
  1. add_rules("mode.debug", "mode.release")
  2. -- 此处以stc8h8k64u为例,其他芯片可对照stc官方手册修改
  3. local xram_size = 0
  4. local iram_size = 256
  5. local code_size = 65536
  6. add_includedirs("lib","include", {public=true})
  7. add_files("lib/*.c","include/*.c")
  8. target("xmake_c51")
  9.     add_ldflags("--model-small")
  10.     add_ldflags("--xram-size "..xram_size)
  11.     add_ldflags("--iram-size "..iram_size)
  12.     add_ldflags("--code-size "..code_size)
  13.     add_ldflags("--opt-code-size")
  14.     add_cflags("--opt-code-size")
  15.     set_kind("binary")
  16.     add_files("src/*.c")
复制代码
配置完成之后便可以使用 xmake 命令进行编译,编译产物为 bin 格式,可使用stc-isp软件直接烧录至单片机中。

免折腾方案
vscode安装eide扩展,亦可以进行正常开发,且其支持的扩展功能也挺多
Dingtalk_20240426120519.jpg



2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

积分
4501
发表于 2024-4-26 16:19:57 | 显示全部楼层
感谢分享!
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-04-24 23:46:14

1

主题

5

回帖

58

积分

注册会员

积分
58
发表于 2024-4-26 22:28:44 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-20 14:03:54

0

主题

1

回帖

6

积分

新手上路

积分
6
发表于 2024-7-20 14:00:29 | 显示全部楼层
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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:419
  • 最近打卡:2025-05-01 07:24:50

4

主题

511

回帖

1991

积分

金牌会员

积分
1991
发表于 2024-9-8 09:51:12 | 显示全部楼层
我用,STC32,你告诉我,不能用,我还点进来看了看,哎,真是闲的
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3190

回帖

4870

积分

论坛元老

积分
4870
发表于 2024-9-8 10:41:11 来自手机 | 显示全部楼层
科学妞妞 发表于 2024-9-8 09:51
我用,STC32,你告诉我,不能用,我还点进来看了看,哎,真是闲的

stc32目前就只能keil了,但是可以vscode插件开发
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-05-01 18:20:12

79

主题

631

回帖

1132

积分

金牌会员

积分
1132
发表于 2024-9-20 21:46:56 | 显示全部楼层
没有完整工程吗? 还得照着搞一遍多麻烦呐
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2025-1-26 16:45:21 | 显示全部楼层
so*** 发表于 2024-9-8 10:41
stc32目前就只能keil了,但是可以vscode插件开发

大佬用的是keil uvision Assistant还是keil Assistant?
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 13:10 , Processed in 0.163988 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表