SDCC MCS-251 (C251) 移植版

面向 Intel/STC MCS-251 增强型 8 位 MCU 的 SDCC 编译器移植
基于上游 SDCC 4.6.0 · v4.6.0-mcs251-20260804

简介

SDCC(Small Device C Compiler)的 MCS-251 目标移植版,支持 Intel 80C251 及国产 STC32G 系列芯片(如 STC32G144K246,246 KB Flash / 144 KB RAM),并提供 QEMU 模拟器支持。在完整保留 MCS-51 目标的同时, 新增 24 位寻址、原生字/双字指令与独立后端。

主要特性

目标支持

  • MCS-251 全新目标后端(24 位地址空间)
  • STC32G144K246 芯片 + QEMU 模拟器
  • MCS-251 指令集:字节扩展、MOVH、原生字/双字运算
  • 独立汇编器 sdas251 / 链接器 / ELF32 输出

代码生成

  • R0-R15 固定寄存器分配(字节/字/双字元组)
  • 专用寄存器追踪与窥孔优化
  • DPTR 24 位地址缓存,消除冗余重载
  • WR 寄存器合并(栈操作数 10→4 字节)
  • 原生 MUL 与双字加/减法

GNU C 扩展

  • C11/C17 语言模式与 GNU 方言
  • 语句表达式、case 范围、__attribute__
  • __typeof__ / __auto_type
  • __builtin_expect / bswap / overflow 等内建函数
  • 位运算内建(popcount/clz/ctz/ffs)

ABI 与生态

  • 原生大端 MCS-251 ABI,32 位 size_t
  • GNU 兼容预处理器数据模型宏
  • Zephyr RTOS 可在 STC32G 上编译运行
  • MCS-51 回归套件全绿(4 种模型 × stack-auto)

更新记录

v4.6.0-mcs251-20260804 2026-08-04 最新
  • 目标支持:MCS-251 后端、STC32G144K246、QEMU 模拟器、ELF32 链接输出
  • 代码生成:独立后端(gen.c + gen_lower.c.inc)、固定寄存器分配、DPTR 缓存、WR 合并、窥孔规则 480→714 行(+18 条)
  • ABI:原生大端、32 位 size_t、GNU 兼容数据模型宏
  • GNU C:C11/C17、语句表达式、属性、typeof/auto_type、overflow/bswap/bit 内建
  • 修复:零宽位域误报(unsigned 比较陷阱)、auto 指针空间推断(medium/large/huge)、CI 全套基础设施修复
  • CI:MCS-51 系列全绿(编译器检查 + 完整回归 + QEMU 运行时测试)
  • Zephyr:hello_world 在 STC32G 上运行,Flash 占用约 114 KB / 246 KB
  • 文档:ABI 规范、指令覆盖、Zephyr/GNU 兼容性、中文用户手册(PDF/HTML 随包发布)
⬇ 下载 Windows x64 包(27.9 MB)
开发基线 2026-08-02 之前
  • MCS-251 目标配置、汇编器/链接器支持、指令编码测试
  • MCS-251 代码生成、内存模型头文件、运行时库
  • QEMU 回归端口、外设测试、ABI 文档
  • 中文 SDCC 用户手册(13 章,含 MCS-251 专章)
  • GNU C11/C17 语言模式、空聚合体、属性语法、64 位整数支持
  • MCS-251 CI(MCS-51 系列)、Windows 二进制包 CI
  • 原生大端 ABI、MCS-251 寄存器元组、dword 加/减法

文档

快速上手

用途命令
编译(大模型)sdcc -mmcs251 --model-large -o app.ihx app.c
编译(小模型)sdcc -mmcs251 --model-small -o app.ihx app.c
QEMU 运行qemu-system-mcs251 -M stc32g144k246 -device loader,file=app.ihx -nographic
Zephyr 构建west build -b stc32g144k246 ... (--model-large)