实测STC32G的XDATA内存和XFR寄存器访问速度很慢
本帖最后由 modbus 于 2022-5-16 09:19 编辑读1个字节要10个时钟,而不是手册上说的2-3个时钟 在中断程序中随便操作一下XFR寄存器,几十个时钟就出去了 要考虑中断响应时间。还有栈的操作 modbus 发表于 2022-5-16 09:22
在中断程序中随便操作一下XFR寄存器,几十个时钟就出去了
(引用自2楼)
性能这么拉跨{:funk:} 不是说力压M0,横推M3,强奸M4,3.79DMIPS/M的么? 楼主搞错了吧 参考康师傅牛肉面袋子上的牛肉粒大小,一切以实际效果为准,哈……
不知道楼主是怎么测试的,严格测试要用汇编指令哦。
注意:主程序开始要有一句: WTST = 0x00;
用C语言的话,也要看一下反汇编,看使用了多少汇编指令实现,一条C语言往往有N条汇编指令实现。
下面可以参考:
u8 xdata a,b,c;
while(1)
{
P10 = 1;
a = 0x12;
b = 0x34;
c = 0x56;
P10 = 0;
delay10us();
}
示波器观察P1.0的高电平时间减去1个时钟就是,就是3条xdata访问的时间,注意,这还是C语言的指令,汇编的还会有装载指针的时间。 小李非刀 发表于 2022-5-16 14:54
不知道楼主是怎么测试的,严格测试要用汇编指令哦。
注意:主程序开始要有一句: WTST = 0x00;
用C语言的话 ...
(引用自8楼)
不看看汇编确认下以下三句没提到循环外面,或者干脆没生成任何代码?
a = 0x12;
b = 0x34;
c = 0x56; 小李非刀 发表于 2022-5-16 14:54
不知道楼主是怎么测试的,严格测试要用汇编指令哦。
注意:主程序开始要有一句: WTST = 0x00;
用C语言的话 ...
(引用自8楼)
这种测试肯定是汇编级别的,就用STC提供的汇编例子加了测试指令,测试方法很简单,把定时器T0设为1T模式,使用以下测试指令:
SETB TR0
MOVX A,@DPTR
MOVX A,@DPTR
MOVX A,@DPTR
MOVX A,@DPTR
MOVX A,@DPTR
MOVX A,@DPTR
MOVX A,@DPTR
MOVX A,@DPTR
MOVX A,@DPTR
MOVX A,@DPTR
CLR TR0
MOV SBUF,TL0
SJMP $
测试TL0值为101
更要命的是XFR字节读速度也是10个时钟 amigenius 发表于 2022-5-16 14:03
不是说力压M0,横推M3,强奸M4,3.79DMIPS/M的么? 楼主搞错了吧
(引用自5楼)
不可能是3.79DMIPS/M,这都赶上电脑CPU的速度了,S80251XC3内核(STC32G采用的IP核)官方公布结果是0.655DMIPS/M amigenius 发表于 2022-5-16 14:11
还有三鲜伊面上的大鸡腿,哈哈
(引用自7楼)
老婆饼里的老婆表示不服 modbus 发表于 2022-5-16 15:30
这种测试肯定是汇编级别的,就用STC提供的汇编例子加了测试指令,测试方法很简单,把定时器T0设为1T模式 ...
(引用自10楼)
会不会和编译器选项有关系, 在看一下机器码对不对 modbus 发表于 2022-5-16 15:30
这种测试肯定是汇编级别的,就用STC提供的汇编例子加了测试指令,测试方法很简单,把定时器T0设为1T模式 ...
(引用自10楼)
是否在程序开头有这句:WTST = 0x00; 小李非刀 发表于 2022-5-17 10:39
是否在程序开头有这句:WTST = 0x00;
(引用自14楼)
你们测一下吗,不用10条指令填充,只用1条指令即可。是在STC官方提供的汇编例子上测试的,ORL P_SW2,#80H都给加上了,并且实测访问EDATA的指令确实是1个时钟,即使是32位内存读写指令 测试方法很简单,把TL0的值通过串口发送出去,经测试,所有读XDATA内存和XFR寄存器的指令都是10个时钟,读程序闪存的指令是3个时钟 modbus 发表于 2022-5-17 11:14
测试方法很简单,把TL0的值通过串口发送出去,经测试,所有读XDATA内存和XFR寄存器的指令都是10个时钟,读 ...
(引用自16楼)
那片外的SRAM读取岂不是一样很慢?想用来着 amigenius 发表于 2022-5-16 14:03
不是说力压M0,横推M3,强奸M4,3.79DMIPS/M的么? 楼主搞错了吧
(引用自5楼)
大师 还有 吊打M7呢 哈哈 还是查下指令表,一个团队干的是,还是比江湖大侠要认真很多,最后一列是运行本指令需要的时钟数,在 STC 已不讲机器周期,只讲时钟 STC也是的,直接找个小弟花一个小时弄个有图有真相的测试不就完了,
示波器拉起,IO口输起,真真切切的,你光说理论大家不信服 1a2b3c 发表于 2022-5-18 09:11
STC也是的,直接找个小弟花一个小时弄个有图有真相的测试不就完了,
示波器拉起,IO口输起,真真切切的,你 ...
(引用自21楼)
估计是测试了但不好意思公布出来 国学芯用 发表于 2022-5-18 08:43
还是查下指令表,一个团队干的是,还是比江湖大侠要认真很多,最后一列是运行本指令需要的时钟数,在 STC...
(引用自19楼)
很怀疑你们的团队把每条指令的时钟数都和这个表实测核对过 MOV DRk,Dir16这条指令,按STC手册上列的是2个时钟,实测是1个时钟 1a2b3c 发表于 2022-5-18 09:11
STC也是的,直接找个小弟花一个小时弄个有图有真相的测试不就完了,
示波器拉起,IO口输起,真真切切的,你 ...
(引用自21楼)
同意。。直接一个IO口翻转,上示波器测波形。比成片的文字解释来的直观。直接用波形回击对手{:lol:} 有一种说法,说的是把编译出来的代码,数这些代码理论上要执行多少时钟周期,会和实测出来的可能有区别。
原因在于,存在流水线(且有可能存在相关而断流),以及某些指令可以并行执行,以及读取ROM需要等待等 modbus 发表于 2022-5-18 10:34
MOV DRk,Dir16这条指令,按STC手册上列的是2个时钟,实测是1个时钟
(引用自24楼)
不会吧~
对稍微高级一点的CPU来说,指令表里写的周期都是最短周期,实际只会比这个长,不会比这个短。
比如读外部存储器要带延迟啊,或者流水线冲突之类的。反正只会延迟不会变短 逻辑分析仪看一下,访问xdata那么慢确实是个问题,但愿是配置问题。 找到问题了,CKCON这个寄存器控制XDATA和XFR访问速度,手册上写的是复位为0,而实际上是和WTST一样都是复位为7,STC的手册和所有例子都没有说要把CKCON初始化为0,只说了WTST要为0,如果CKCON不初始化为0,那么访问XDATA内存和XFR寄存器都会多7个时钟 还有CKCON寄存器中的T0M和T1M是干啥用的,找遍全手册也没找到这个说明 modbus 发表于 2022-5-18 17:10
找到问题了,CKCON这个寄存器控制XDATA和XFR访问速度,手册上写的是复位为0,而实际上是和WTST一样都是复位 ...
(引用自29楼)
确实是,我翻看我的例子,确实是有一句CKCON=0;难怪您的测试会多7个T。后面STC工程师会改手册的。 modbus 发表于 2022-5-18 17:14
还有CKCON寄存器中的T0M和T1M是干啥用的,找遍全手册也没找到这个说明
(引用自30楼)
手册是没有任何关于T0M T1M的说明,我当它不存在,写0.
STC32G12K128-LQFP64,2组 CAN,RMB5,其他都是白送: 3组 Lin, USB, 128K FLASH, 12K SRAM,http://www.stcmcudata.com/STC8F-datasheet/STC32G.pdf, 32位8051中文数据手册, 2022/5/19 厂家应该搞个实际测试才能安民天下呀。。。丢一些文档是解决不了大家的疑惑的哦{:smile:} fbwcpu 发表于 2022-5-19 18:24
厂家应该搞个实际测试才能安民天下呀。。。丢一些文档是解决不了大家的疑惑的哦 ...
(引用自34楼)
看29楼,楼主自己的回复。 33楼新鲜出炉的手册{:lol:}。不管怎么说,以后在这个价位上,可选择的单片机又多了。{:lol:}
页:
[1]