- 打卡等级:以坛为家III
- 打卡总天数:886
- 最近打卡:2026-05-11 00:44:21
论坛元老
- 积分
- 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支持是一个可行的但长期的任务,需要分阶段进行。我们可以从最简单的汇编器支持开始,逐步推进。
|
|