搜索
bottom↓
回复: 11

有没有51上的c++编译器,要兼容arduino都是需要c++支持

[复制链接]

出0入0汤圆

发表于 2015-11-6 23:35:30 来自手机 | 显示全部楼层 |阅读模式
现在51的soc很多ram,FLASH都很大了,比如CC2530。已经远胜过AVR了。
网上只找到开源免费的SDCC,但只支持C。
我想51有没C++编译器呢

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2015-11-7 06:33:41 来自手机 | 显示全部楼层
Iar for 8051

出0入0汤圆

发表于 2015-11-7 11:35:40 | 显示全部楼层
51那个蛋疼的结构,支持C++效率低到
不过记得好像有人做过LLVM for 51.配合GCC-LLVM或者CLANG用吧

出0入0汤圆

 楼主| 发表于 2015-11-7 15:54:52 | 显示全部楼层
xwkm 发表于 2015-11-7 11:35
51那个蛋疼的结构,支持C++效率低到
不过记得好像有人做过LLVM for 51.配合GCC-LLVM或者CLANG用吧
...

现在51的速度很快了啊,至少cc2530ram,flash和速度都超了atmega328这种

出0入0汤圆

发表于 2015-11-7 22:11:04 | 显示全部楼层
3050311118 发表于 2015-11-7 15:54
现在51的速度很快了啊,至少cc2530ram,flash和速度都超了atmega328这种

你说CC2530的RAM和Flash比328大,是毫无疑问的。但就执行效率而言,51和AVR还差了一大截:
你可以看TI官方的指令表.
简单拿几个重要的指令比较(用AVR书写方式计):
分支指令
RJMP 51 3T AVR 2T
IJMP 51 2T AVR 2T
JMP 51 4T AVR 2T
CALL 51 6T AVR 2T
ICALL 51 (无硬件实现,要自己先PUSH DPTR再IJMP) AVR 2T
RET 51 4T AVR 2T
条件分支指令难以表示,用51和AVR组合指令比较
JNZ/JZ 51 3T AVR 2T
JB 51 4T AVR 3T
在同频条件下,TI的51的分支效率与AVR的分支效率比低不少.基本上AVR都是2T.TI 51平均4T左右。CC2530没记错应该是32M的,这部分实际处理速度可能打平了。但是51没有直接的实现ICALL。而C++虚函数对函数指针依赖很高,这块51不行。
算术指令
DIV 51 5T AVR (无硬件实现)
MUL 51 5T AVR 1T
INC 51 2T AVR 1T
ADC 51 2T AVR 1T
SUB 51 2T AVR 1T
AND 51 2T AVR 1T
ANDI 51 2T AVR 1T
ORI  51 2T AVR 1T
XOR 51 2T AVR 1T
CLR 51 1T(仅A寄存器) AVR 1T(R0~R31)
LSL
LSR
ROL
ROR
ASR均同上
同频条件下,理论上说TI跑32M的51和16M AVR速度差不多,除法强出不少。但是能用来作为运算的寄存器仅有AB。因此遇到大量复杂表达式的时候性能降低会很严重。这块51略为劣势。
数据传输指令
PUSH 51 4T AVR 1T
POP 51 4T AVR 1T/2T(X/Y/Z)
LPM 51 3T AVR 2T
MOVX(仅51有) 3T/4T AVR --(统一编址)
LD 51 3/4/5T AVR 1/2/3T
ST 51 3/4/5T AVR 1T
这里51完败不解释。即使51跑在32M,由于DPTR只有两个,还不能随意指定(如AVR的R0~R31寄存器一样用),效率得到极大的下降。
布尔操作:
SBI 51 3T AVR 1T
CBI 51 3T AVR 1T
BST 51 AVR 1T
BLD 51 AVR 1T
这里51也就靠高主频略胜AVR。但是要是传递的不是立即数,51又要瞎了……
最后总结,TI这个8051核心和C8051F还差得远。同频执行效率和编址的规整程度和AVR比还是差不少。你说51快,这三个总线编址,上C++不可避免的要实现通用指针,通用指针实现必然遇到判断问题,51本身执行效率就不行,再一倒腾还要不要活了。

出0入0汤圆

发表于 2015-11-7 22:16:15 | 显示全部楼层
所以我说51这个标准C语言上去都够呛,访问XRAM还要被两个DPTR耍着玩加上编址蛋疼XRAM和IRAM起码速度差距3-4倍的系统上上C++?恐怕几个class一包装加上各种调用关系导致的深(注意,对51来说深可能其他的单片机不算什么)堆栈,IRAM就爆了哟,然后放在XRAM里效率一塌糊涂。
我觉得在51上首先得考虑的是,这玩意儿用起来效率不能太低。但是这个编址方式加上这套指令系统,C++要上效率真的不看好。
另外关于51的硬件抽象层这一块儿,又有个问题了,51所谓特殊功能寄存器是不能用指针访问的,so……只能多写接口函数了,浪费FLASH啊。

出0入0汤圆

发表于 2015-11-7 22:17:23 | 显示全部楼层
如果楼主觉得基本上效率不是啥问题别比ENIAC慢就行了,那我强烈推荐楼主去用8051-LLVM+CLANG。但是大多数贫穷型51,尤其是某宇宙第一的,真的耗不起。

出0入0汤圆

 楼主| 发表于 2015-11-8 08:35:29 | 显示全部楼层
xwkm 发表于 2015-11-7 22:17
如果楼主觉得基本上效率不是啥问题别比ENIAC慢就行了,那我强烈推荐楼主去用8051-LLVM+CLANG。但是大多数贫 ...

哦   分析的很透彻。难怪51时间这么久,但gcc编译链到现在还没出

出0入0汤圆

发表于 2015-11-8 09:03:13 | 显示全部楼层
干吗用51 呢,STM32 不就挺好

出0入0汤圆

 楼主| 发表于 2015-11-9 17:03:39 | 显示全部楼层
ericdai 发表于 2015-11-8 09:03
干吗用51 呢,STM32 不就挺好

想弄一些有特色的duino,

出0入8汤圆

发表于 2015-11-9 21:23:05 | 显示全部楼层
CC2540用的什么编译器?

出0入475汤圆

发表于 2015-11-9 21:54:24 | 显示全部楼层
3050311118 发表于 2015-11-9 17:03
想弄一些有特色的duino,

就是啊,底层驱动改好不就更有特色了吗,外设更多,功能更强,速度更快,可以加入更多的特殊!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 00:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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