找回密码
 立即注册
查看: 226|回复: 6

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

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2940

积分

荣誉版主

无情的代码机器

积分
2940
发表于 2025-3-16 22:05:02 | 显示全部楼层 |阅读模式

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++编译链?


三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 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>[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:129
  • 最近打卡:2025-05-02 08:24:01
已绑定手机

2

主题

3

回帖

82

积分

注册会员

积分
82
发表于 2025-3-17 09:38:51 来自手机 | 显示全部楼层
有个很大的缺陷是51其实不支持C语言,地址不能赋值给指针,不能通过指针读取IO

点评

没明白,可以举个例子吗。我看自制ISP教程和一些OS讨论贴,不是可以用地址找到函数指针嘛 [attachimg]88139[/attachimg]  详情 回复 发表于 2025-3-17 09:52
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2940

积分

荣誉版主

无情的代码机器

积分
2940
发表于 2025-3-17 09:52:48 | 显示全部楼层
flyr*** 发表于 2025-3-17 09:38
有个很大的缺陷是51其实不支持C语言,地址不能赋值给指针,不能通过指针读取IO ...

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

截图202503170952137493.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:129
  • 最近打卡:2025-05-02 08:24:01
已绑定手机

2

主题

3

回帖

82

积分

注册会员

积分
82
发表于 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置高

点评

这种操作封装个函数效果不是一样的么,而且现在也有官方库函数 AI8051U传统风格库函数例程包发布-持续更新, 20250214 - 软件库函数/原理图库/PCB库/最小包装 国芯技术交流网站 - AI32位8051交流社区 USB型,Ai8051  详情 回复 发表于 2025-3-17 10:23
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2940

积分

荣誉版主

无情的代码机器

积分
2940
发表于 2025-3-17 10:23:12 | 显示全部楼层
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:129
  • 最近打卡:2025-05-02 08:24:01
已绑定手机

2

主题

3

回帖

82

积分

注册会员

积分
82
发表于 2025-3-17 10:48:15 来自手机 | 显示全部楼层
ercircle 发表于 2025-3-17 10:23
这种操作封装个函数效果不是一样的么,而且现在也有官方库函数

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

估计工作量比较大吧,毕竟全部都是switch case的硬编码,我弄过8个IO的封装函数,看着都眼花,多了估计就头发麻了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 11:15 , Processed in 0.141015 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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