找回密码
 立即注册
查看: 84|回复: 2

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

[复制链接]
  • TA的每日心情
    开心
    2024-4-24 23:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    5

    回帖

    36

    积分

    新手上路

    积分
    36
    发表于 2024-4-26 11:50:24 | 显示全部楼层 |阅读模式
    本帖最后由 oldcat 于 2024-4-26 12:05 编辑

    本教程适用于喜欢折腾苦恼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

    1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
    • +1

      楼主威武~

    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    9

    主题

    305

    回帖

    3737

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-24 23:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    5

    回帖

    36

    积分

    新手上路

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-6 18:59 , Processed in 0.062342 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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