本教程适用于:
喜欢折腾和苦恼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扩展,亦可以进行正常开发,且其支持的扩展功能也挺多
|