数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 97|回复: 3

[C51] 自研C语言编译器发布,STC IDE

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
本帖最后由 银河小铁骑 于 2026-8-29 11:01 编辑

STC32 IDE —— 面向 STC32 系列及 AI8051U 的编译 IDE,
支持 C11语言标准, 及部分 C23, 后续还会支持 STC8系列
STC IDE 是面向 STC32 系列(兼容 251 指令集)的纯浏览器C语言自研编译器 IDE:
打开网页即可编写 C 代码、编译生成 HEX、SWD 在线下载与调试,无需安装任何本地工具链,支持C11, 离线可用。
说明:STC32 系列 MCU 并非 Intel 251 内核,两者完全不同——Intel 251 是 8 位总线 + 32 位指令集,而 STC32 是 32 位总线 + 兼容 251 指令集。
本 IDE 的编译器正是基于 STC32 的 251 指令兼容特性自研实现,未来还可在此基础上扩展支持 RISC-V 等更多指令集。



一、主要优点
  • 完全开源免费:源码完全开源,免费使用,无需担心版权问题
  • 官方原厂持续支持:由 STC 官方原厂持续更新维护
  • 编译速度快至ms级:编译全部在浏览器本地完成,无网络等待、无服务器排队,点击即出结果
  • 无需安装环境:不用装 Keil、不用配环境变量、不用管许可证,打开网页就能用
  • 纯浏览器运行:代码不出本机,无隐私顾虑
  • 离线可用:PWA 支持,加载一次后断网也能打开使用,在线时自动更新最新版本
  • 内置 SWD 下载与调试:编译后一键差分下载烧录(仅烧录变动部分)、全速运行,支持硬件断点 / 单步 / 运行到光标与变量监视,浏览器直连设备
  • 多文件支持:支持多 .c/.h 文件工程,文件夹导入保持原有目录结构,一键导入整个工程
  • 自带例程:内置 25 个 STC 官方实验箱例程(跑马灯 / RTC / ADC / PWM / I2C / SPI 等),均已实机验证通过
  • 纯中文界面:菜单、提示、编译信息全部中文,无语言门槛
  • 完整编译输出:汇编列表 / Intel HEX / 预处理结果 / 资源占用报告 / 错误行号定位,一应俱全
二、已经实现的功能2.1 C 语言特性(基于 C11 语法,大部分特性已支持,支持部分C23特性)
  • 基础语法:变量、表达式、控制流(if/for/while/switch)、函数、数组、指针、宏、条件编译、include
  • C11 特性(大部分):for 内声明、// 注释、复合字面量基础用法等按需支持
  • 结构体与位域:struct / 位域 / 匿名位域、嵌套结构体成员访问
  • 数据类型:8/16/32/64 位整型(含 long long)、float/double 软浮点(IEEE754)、32 位乘除(MDU32 硬件加速),0b0011类二进制字面量写法支持
  • 编译期检查:数组越界、负数数组长度、实参个数、隐式窄化、移位超宽等问题编译期直接报错;支持 Keil _at_ 绝对地址定义
  • 标准库:printf / sprintf / snprintf 编译器内联展开(%d/%u/%x/%c/%s/%f/%ld),常用数学库(sqrt/sin/cos 等软实现)
  • 单片机扩展:
    • sfr / sbit / xfr 特殊寄存器
    • data / edata / xdata / code 存储类型
    • bit 位变量
    • 中断支持 interrupt N(向量表自动生成、ISR 现场保存、未用槽 RETI 保护)
    • 内置头文件 STC32G.H / AI8051U.H / STC32G144K246.H(完整寄存器定义,支持用户覆盖)
2.2 编译器实现
  • ANTLR 语法分析 + 自研语义分析 + IR 中间表示 + 251 指令集(Source 模式)指令编码
  • 优化较激进:常量折叠、死代码剔除、公共子表达式、字节组合直装、const 数组常量下标折叠、寄存器冲突精确判定等优化 Pass;大工程整体代码尺寸优于 Keil(30 个官方例程整体小约 15%),SFR/XFR 访问、中断向量表、短寄存器函数等场景超越 Keil;仅个别小函数仍可能略大于 Keil 最高激进优化
  • 中文字符串按 GB2312 / UTF-8 可选编码嵌入 flash(默认嵌入GB2312,与 Keil 默认行为一致)
  • 支持将核心代码编译为 .lib 库分发(保护源码)
2.3 Web IDE 功能
  • 代码编辑(CodeMirror:语法高亮 / 自动补全 / 括号匹配)
  • 多文件管理:新建 / 重命名 / 删除 / 导入文件 / 导入文件夹(保持目录结构) / 本地保存工程
  • 一键编译 + 输出面板(汇编 / HEX / 预处理 / 资源报告 / 编译信息,错误行号点击跳转定位)
  • SWD 下载调试:差分下载 / 全速运行(F8)/ 暂停 / 硬件断点 / 单步 / 运行到光标;调试面板变量监视(右键「添加到监视」)与寄存器查看;连接后自动识别芯片型号;可设「编译后自动 SWD 下载并运行」
  • 内置头文件查看:文件菜单一键查看 STC32G.H 等内置头文件(只读渲染、型号切换、一键复制)
  • AI 协作接口:window.ai_ctrl 自描述方法表(help() / getState()),其他的AI 助手可读写文件、编译、查询编译结果、控制 SWD 调试
  • HEX 下载(可自定义文件名)
  • 示例列表(25 个实验箱验证例程)
  • 中英文界面自动切换、中文编码设置
  • PWA 离线缓存
2.4 实机验证情况
  • 实验箱 26 个官方例程全部编译通过(01.2 跑马灯 ~ 45 内部 RTC),其中 25 个内置为示例
  • 45 例程(RTC)实机验证:RTC 中断正确使用 interrupt 36(STC32G RTC 中断向量号),显示动态、秒位跳动、串口 printf 输出正常
  • SWD 实机验证:差分下载、全速运行、硬件断点 / 单步 / 运行到光标、变量监视均经实验箱验证通过
  • 回归测试全绿:52/52 指令级 + 94/94 用例级 + 45/45 例程级 + 42/42 附加用例,内置 25 例程编译 25/25
  • 数学库、结构体位域、static 局部变量、指针 cast、浮点除法 / 浮点常量折叠、中断嵌套等均经实机验证
三、暂未实现的功能(已知限制)[td]
现状
reentrant 关键字
未实现(重入函数已通过自动副本方式支持)
Keil 工程(.uvproj)解析
不支持;多文件工程直接用「导入文件夹」一键导入全部 .c/.h 即可
块级作用域
for 循环变量按函数级分配(无块作用域隔离)
C11 完整支持
语法基于 C11(ANTLR C11 文法),但尚未覆盖全部 C11 特性(如 _Generic、可变参数宏等),常用子集已可用
printf %f 精度
浮点输出精度有限(简单小数场景可用)
SWD 调试环境
需 Chrome/Edge 等支持 WebHID/WebUSB 的浏览器,首次连接需在页面点击授权;硬件断点为逻辑单断点(STC32G 最多 8 个)
持续迭代中,以上限制将逐步补齐。
四、使用教程
1. 加载例程
点击右上角「示例」按钮,从列表中选择任意实验箱例程即可加载。推荐先试:
  • 01.2-用P6口做跑马灯(最简入门)
  • 45-内部RTC时钟程序(RTC + 中断 + 数码管 + 串口打印,综合示例)
2. 编写 / 导入代码
  • 直接编辑:在编辑器中修改代码
  • 导入文件:文件 → 导入文件(Ctrl+O)选择 .c/.h
  • 导入文件夹:文件 → 导入文件夹,选择工程目录(多文件工程一键导入,保持原有目录结构)
  • 保存工程:文件 → 保存工程(存到浏览器本地,下次打开自动恢复)
3. 编译
点击「编译」按钮(或 F7):
  • 成功:下方输出面板显示汇编 / HEX / 资源报告(edata / xdata / code 占用)
  • 失败:「编译信息」标签页显示错误行号与原因,点击可跳转定位
4. 下载 HEX 并烧录
方式一:IDE 内置 SWD 下载(推荐)
  • 调试面板点击「连接」——首次需在页面点击授权设备(Chrome/Edge 支持 WebHID/WebUSB 即可)
  • 编译成功后点击右上角「运行」按钮(或按 F8)→ 自动差分下载并全速运行
  • 也可在 设置 → SWD 调试 中开启「编译后自动 SWD 下载并运行」
方式二:HEX + STC-ISP
  • 编译成功后点击「HEX」按钮下载 .hex 文件
  • 打开 STC-ISP 下载软件,选择芯片 STC32G12K128、主频 24MHz
  • 选择下载的 HEX → 点击下载 → 实验箱自动断电上电烧录
5. 调试
连接 SWD 后:
  • 点击代码行号左侧设置断点 → 点「运行」运行到断点自动暂停
  • 暂停后可单步执行 / 继续运行,或在代码上右键「运行到此处」
  • 调试面板可查看寄存器与全局变量(右键「添加到监视」/ 一键导入全部),值变化自动高亮
6. 串口调试
例程的 printf 输出:
  • PrintUart=2:串口 2(P4.6/P4.7)@115200
  • PrintUart=1:串口 1(P3.0/P3.1)@115200
用串口助手连接对应引脚即可看到输出(如 RTC 例程每秒打印 Year=2021,Month=12,...)。
7. 其他设置
  • 设置 → 中文编码:字符串嵌入 flash 的编码(GB2312 默认 / UTF-8)
  • 文件 → 保存到文件夹:导出工程文件到本地磁盘
五、技术参数[td]
目标芯片
STC32G12K128 / STC32G8K64 / AI8051U / STC32G144K246(兼容 251 指令集)
总线架构
32 位总线(非 Intel 251 的 8 位总线)
字节序
大端(251 规范)
代码存储
Flash 最大 246KB(12K128 为 128KB,0xFE0000 ~ 0xFFFFFF)
数据存储
edata 最大 16KB / xdata 最大 128KB(12K128:edata 4KB / xdata 8KB)
复位入口
0xFF0000
发布包大小
约 680KB(含 25 例程)
浏览器
Chrome / Edge 等现代浏览器(SWD 需支持 WebHID/WebUSB)

STC IDE 由自研 STC32 系列编译器项目驱动(251 指令兼容,后续可扩展 RISC-V),持续迭代中。欢迎反馈问题与建议。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2 小时前 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-8-29 13:41 , Processed in 0.093600 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

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