ercircle 发表于 2025-3-16 22:05:02

C++ for Ai8051U-32Bit, 一个关于 STCAI的 C++编译器想法讨论


C++ for Ai8051U-32Bit, 一个关于 STCAI 的 C++编译器 想法讨论
最近了解了一些编译器相关知识(皮毛,仅限于单词拼写),产生一个想法:

如果能为LLVM||GCC后端适配Ai8051U指令集
(仅需C\C++标准语法 ->转-> MCU可烧录的bin相关,不考虑寄存器、中断等外设和硬件直接关联部分)
(换句话说,通过LLVM||GCC将C\C++标准语法转为KEIL识别的C或汇编语法?)


使用Keil C251开发系统区基座,将寄存器操作、中断等行为封装成函数和回调接口。
使用LLVM||GCC工具链开发用户区,通过函数指针,共享内存等手段调用系统区接口。


不知是否可行,可以让Ai8051U@32bit 用上C++编译链?


国芯人工智能 发表于 2025-3-16 22:08:00

您的想法具有一定的创新性,尤其是在将LLVM编译器后端适配到Ai8051U指令集方面。LLVM作为一个模块化的编译器框架,确实具备较强的扩展性和跨平台能力,能够支持多种目标架构。将LLVM的后端适配到Ai8051U指令集,理论上可行,但需要深入理解LLVM的架构和Ai8051U的指令集特性。<br><br>关于通过LLVM将C/C++标准语法转换为Keil识别的C或汇编语法,这需要开发一个自定义的LLVM后端,将LLVM生成的中间表示(IR)映射到Ai8051U的指令集。Keil C251作为开发系统区基座,将寄存器操作、中断等行为封装成函数和回调接口,这种做法可以有效地隔离硬件相关的底层操作,提高代码的可移植性和可维护性。<br><br>在用户区通过函数指针和共享内存调用系统区接口,是一种常见的嵌入式系统开发模式。这种设计可以实现系统区和用户区的解耦,便于开发和调试。<br><br>总体而言,您的思路是可行的,但需要投入大量时间和精力进行开发和测试。建议从LLVM后端的开发入手,逐步实现C/C++到Ai8051U指令集的转换,并结合Keil C251进行系统集成和优化。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]

flyrack 发表于 2025-3-17 09:38:51

有个很大的缺陷是51其实不支持C语言,地址不能赋值给指针,不能通过指针读取IO

ercircle 发表于 2025-3-17 09:52:48

flyrack 发表于 2025-3-17 09:38
有个很大的缺陷是51其实不支持C语言,地址不能赋值给指针,不能通过指针读取IO ...

没明白,可以举个例子吗。我看自制ISP教程和一些OS讨论贴,不是可以用地址找到函数指针嘛


flyrack 发表于 2025-3-17 10:05:41

ercircle 发表于 2025-3-17 09:52
没明白,可以举个例子吗。我看自制ISP教程和一些OS讨论贴,不是可以用地址找到函数指针嘛




你用过arm或者avr就知道,io可以通过int直接赋值的,比如数值1对应io1,
比如 void high(int n)函数,传1进去就把端口1置高,传3进去就把端口3置高

ercircle 发表于 2025-3-17 10:23:12

flyrack 发表于 2025-3-17 10:05
你用过arm或者avr就知道,io可以通过int直接赋值的,比如数值1对应io1,
比如 void high(int n)函数,传1 ...

这种操作封装个函数效果不是一样的么,而且现在也有官方库函数

AI8051U传统风格库函数例程包发布-持续更新, 20250214 - 软件库函数/原理图库/PCB库/最小包装 国芯技术交流网站 - AI32位8051交流社区

USB型,Ai8051U创新风格库函数持续开发中,内部视频培训, 听取建议,3/12更新 - 软件库函数/原理图库/PCB库/最小包装 国芯技术交流网站 - AI32位8051交流社区

flyrack 发表于 2025-3-17 10:48:15

ercircle 发表于 2025-3-17 10:23
这种操作封装个函数效果不是一样的么,而且现在也有官方库函数

AI8051U传统风格库函数例程包发布-持续更 ...

估计工作量比较大吧,毕竟全部都是switch case的硬编码,我弄过8个IO的封装函数,看着都眼花,多了估计就头发麻了
页: [1]
查看完整版本: C++ for Ai8051U-32Bit, 一个关于 STCAI的 C++编译器想法讨论