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

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

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:886
  • 最近打卡:2026-05-11 00:44:21

14

主题

1364

回帖

7392

积分

论坛元老

积分
7392
发表于 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 等商业工具,因为开源编译器尚未完全针对该指令集。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:886
  • 最近打卡:2026-05-11 00:44:21

14

主题

1364

回帖

7392

积分

论坛元老

积分
7392
发表于 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支持是一个可行的但长期的任务,需要分阶段进行。我们可以从最简单的汇编器支持开始,逐步推进。

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-5-11 05:39 , Processed in 0.098812 second(s), 45 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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