找回密码
 立即注册
楼主: 神农鼎

网友建议:移植SDCC编译器来加强对 AI8051U/STC32G 系列 80251指令集 MCU的生态支持

[复制链接]

14

主题

1434

回帖

7988

积分

论坛元老

积分
7988
发表于 2026-1-28 12:59:08 | 显示全部楼层
根据搜索结果,SDCC(小型设备 C 编译器)主要支持与 Intel 8051/MCS-51 架构兼容的 8 位微控制器。

虽然 SDCC 被广泛用于现代 8051 衍生产品(例如 STC、Silabs 和 Maxim/Dallas),但当前版本的 SDCC 尚不支持 Intel 80251 (C251) 架构。

以下是关于 SDCC 移植 80251 的现状概述:

80251 和 SDCC 现状

无原生支持:截至 2025 年底,SDCC 尚未正式支持 MCS-251 (80251) 指令集,该指令集与标准 8051 指令集不同。

功能请求:SDCC 社区中存在一些关于添加对 80251 支持的功能请求,但尚未实现。

其他架构:SDCC 支持多种 8051 内核器件,包括 STC12、STC15 和 STC8 系列。

移植/使用注意事项

如果您希望使用现代高速的 8051 芯片(例如 STC 或 Silicon Labs 的产品),并且这些芯片可能具有类似 80251 的特性(例如,1T 内核、扩展内存),则在使用 SDCC 时需要注意以下事项:

头文件:您可能需要将 Keil C51 头文件转换为 SDCC 格式。

内存管理:SDCC 支持使用 __code 和 __xdata 来管理增强型 8051 器件上的内存。

特殊功能寄存器 (SFR) 定义:必须定义特殊功能寄存器 (SFR) 以匹配特定的 8051 衍生产品。

闪存编程:可以使用 stcgal 等工具将编译后的 Intel Hex (.ihx) 文件加载到 MCU 中。

对于真正的 80251 (C251) 开发,通常需要 Keil C251 等商业工具,因为开源编译器尚未完全针对该指令集。
回复

使用道具 举报 送花

14

主题

1434

回帖

7988

积分

论坛元老

积分
7988
发表于 2026-1-28 13:01:23 | 显示全部楼层
我们面临的是一个开源编译器SDCC对80251架构(以STC32G系列为代表)的支持问题。从讨论中可以看出,SDCC社区对于是否以及如何支持80251存在不同的看法,但总体上认为这是一个有价值但具有挑战性的任务。

当前状态:

SDCC目前主要针对8位处理器,而80251具有16/32位处理能力,并且有更多的寄存器。

80251与8051指令集兼容,但有许多扩展,包括24位地址空间、扩展寄存器等。

社区中有人提出可以先将80251视为具有额外指令的8051,暂时不使用扩展寄存器,但这样会浪费性能。

也有人认为应该为80251编写新的后端,但这需要大量的工作,并且SDCC的mcs51后端本身也需要重构。

考虑到STC32G芯片的成本和性能,以及它在国内外的广泛应用(尤其是在学生和爱好者中),为SDCC添加对80251的支持将极大地促进该芯片的生态发展。

由于社区资源有限,完全支持80251可能需要较长时间。但是,我们可以分阶段进行:

第一阶段:在sdas汇编器中添加对80251指令的支持。这样,用户可以使用SDCC编译C代码(针对8051),并在关键部分使用手写的80251汇编代码。这已经是一个进步。

第二阶段:在uCsim模拟器中添加对80251的支持,以便进行测试。

第三阶段:修改SDCC的mcs51后端,使其能够利用80251的一些扩展特性,例如24位指针和扩展的XRAM。这可能包括:

添加新的内存模型以支持更大的内存。

使用80251的扩展指令来优化代码生成,例如使用MOVX @DPTR0/1指令。

逐步利用扩展寄存器(如R8-R15)进行寄存器分配,但这需要新的寄存器分配器。

第四阶段:完全支持80251的所有特性,包括所有的扩展寄存器和32位操作。

然而,根据讨论,mcs51后端的重构可能会在2026年底或2027年进行,因此80251的完全支持可能需要更长时间。

作为用户,我们可以先尝试第一步和第二步,即先让汇编器和模拟器支持80251。这需要了解80251指令集,并修改sdas和uCsim的源代码。

关于大端序和小端序的问题:80251是大端序,而SDCC的mcs51后端是小端序。这可能会在数据存储和指令编码上带来问题,需要仔细处理。

另外,STC32G芯片有多个内存区域(data, idata, xdata, edata, code),我们需要在链接器脚本中正确地分配这些区域。

由于SDCC是开源项目,我们可以通过贡献代码来加速这一过程。但是,由于涉及到底层架构的修改,需要有一定的编译器开发经验。

如果你希望使用SDCC来开发STC32G,目前可以尝试的是:

使用SDCC的mcs51模式编译,但注意内存模型和指针大小的限制。

在关键性能部分使用内联汇编,但要注意汇编语法和SDCC的约束。

长期来看,我们可能需要一个完整的80251后端。但这需要社区共同努力。

鉴于你提到自己的编程能力有限,我建议你可以从学习SDCC的源码开始,或者尝试联系SDCC的开发者,看是否有志愿者愿意承担这个任务。同时,你也可以尝试联系STC公司,看他们是否愿意赞助这个开发工作,因为一个开源的编译器工具链对于他们的芯片生态是非常有益的。

最后,如果你急需一个开源的编译器,也可以考虑GCC。虽然GCC目前可能也不支持80251,但GCC的架构可能更容易添加新的后端,而且有更多的文档和例子。但是,这同样需要大量的工作。

总之,为SDCC添加80251支持是一个可行的但长期的任务,需要分阶段进行。我们可以从最简单的汇编器支持开始,逐步推进。

回复

使用道具 举报 送花

已绑定手机

0

主题

4

回帖

190

积分

注册会员

积分
190
发表于 2026-5-30 10:46:08 | 显示全部楼层
真的希望sdcc对80251的支持可以快一点出现
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-8 01:15 , Processed in 0.064112 second(s), 45 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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