modbus 发表于 2022-5-16 09:10:31

实测STC32G的XDATA内存和XFR寄存器访问速度很慢

本帖最后由 modbus 于 2022-5-16 09:19 编辑

读1个字节要10个时钟,而不是手册上说的2-3个时钟

modbus 发表于 2022-5-16 09:22:54

在中断程序中随便操作一下XFR寄存器,几十个时钟就出去了

HZKJ 发表于 2022-5-16 13:24:19

要考虑中断响应时间。还有栈的操作

fbwcpu 发表于 2022-5-16 13:43:45

modbus 发表于 2022-5-16 09:22
在中断程序中随便操作一下XFR寄存器,几十个时钟就出去了
(引用自2楼)

性能这么拉跨{:funk:}

amigenius 发表于 2022-5-16 14:03:16

不是说力压M0,横推M3,强奸M4,3.79DMIPS/M的么? 楼主搞错了吧

洞洞幺 发表于 2022-5-16 14:10:16

参考康师傅牛肉面袋子上的牛肉粒大小,一切以实际效果为准,哈……

amigenius 发表于 2022-5-16 14:11:35

小李非刀 发表于 2022-5-16 14:54:51

不知道楼主是怎么测试的,严格测试要用汇编指令哦。
注意:主程序开始要有一句:        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语言的指令,汇编的还会有装载指针的时间。

at90s 发表于 2022-5-16 15:02:54

小李非刀 发表于 2022-5-16 14:54
不知道楼主是怎么测试的,严格测试要用汇编指令哦。
注意:主程序开始要有一句:        WTST = 0x00;
用C语言的话 ...
(引用自8楼)

不看看汇编确认下以下三句没提到循环外面,或者干脆没生成任何代码?
   a = 0x12;
b = 0x34;
c = 0x56;

modbus 发表于 2022-5-16 15:30:49

小李非刀 发表于 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个时钟

modbus 发表于 2022-5-16 15:34:52

amigenius 发表于 2022-5-16 14:03
不是说力压M0,横推M3,强奸M4,3.79DMIPS/M的么? 楼主搞错了吧
(引用自5楼)

不可能是3.79DMIPS/M,这都赶上电脑CPU的速度了,S80251XC3内核(STC32G采用的IP核)官方公布结果是0.655DMIPS/M

zouzhichao 发表于 2022-5-16 17:14:50

amigenius 发表于 2022-5-16 14:11
还有三鲜伊面上的大鸡腿,哈哈
(引用自7楼)

老婆饼里的老婆表示不服

rei1984 发表于 2022-5-16 17:23:09

modbus 发表于 2022-5-16 15:30
这种测试肯定是汇编级别的,就用STC提供的汇编例子加了测试指令,测试方法很简单,把定时器T0设为1T模式 ...
(引用自10楼)

会不会和编译器选项有关系, 在看一下机器码对不对

小李非刀 发表于 2022-5-17 10:39:35

modbus 发表于 2022-5-16 15:30
这种测试肯定是汇编级别的,就用STC提供的汇编例子加了测试指令,测试方法很简单,把定时器T0设为1T模式 ...
(引用自10楼)

是否在程序开头有这句:WTST = 0x00;

modbus 发表于 2022-5-17 11:07:59

小李非刀 发表于 2022-5-17 10:39
是否在程序开头有这句:WTST = 0x00;
(引用自14楼)

你们测一下吗,不用10条指令填充,只用1条指令即可。是在STC官方提供的汇编例子上测试的,ORL P_SW2,#80H都给加上了,并且实测访问EDATA的指令确实是1个时钟,即使是32位内存读写指令

modbus 发表于 2022-5-17 11:14:02

测试方法很简单,把TL0的值通过串口发送出去,经测试,所有读XDATA内存和XFR寄存器的指令都是10个时钟,读程序闪存的指令是3个时钟

zhanyanqiang 发表于 2022-5-17 17:40:36

modbus 发表于 2022-5-17 11:14
测试方法很简单,把TL0的值通过串口发送出去,经测试,所有读XDATA内存和XFR寄存器的指令都是10个时钟,读 ...
(引用自16楼)

那片外的SRAM读取岂不是一样很慢?想用来着

ddcour 发表于 2022-5-17 18:35:57

amigenius 发表于 2022-5-16 14:03
不是说力压M0,横推M3,强奸M4,3.79DMIPS/M的么? 楼主搞错了吧
(引用自5楼)

大师 还有 吊打M7呢 哈哈

国学芯用 发表于 2022-5-18 08:43:23

还是查下指令表,一个团队干的是,还是比江湖大侠要认真很多,最后一列是运行本指令需要的时钟数,在 STC 已不讲机器周期,只讲时钟

国学芯用 发表于 2022-5-18 08:44:22

1a2b3c 发表于 2022-5-18 09:11:23

STC也是的,直接找个小弟花一个小时弄个有图有真相的测试不就完了,
示波器拉起,IO口输起,真真切切的,你光说理论大家不信服

modbus 发表于 2022-5-18 10:23:19

1a2b3c 发表于 2022-5-18 09:11
STC也是的,直接找个小弟花一个小时弄个有图有真相的测试不就完了,
示波器拉起,IO口输起,真真切切的,你 ...
(引用自21楼)

估计是测试了但不好意思公布出来

modbus 发表于 2022-5-18 10:29:08

国学芯用 发表于 2022-5-18 08:43
还是查下指令表,一个团队干的是,还是比江湖大侠要认真很多,最后一列是运行本指令需要的时钟数,在 STC...
(引用自19楼)

很怀疑你们的团队把每条指令的时钟数都和这个表实测核对过

modbus 发表于 2022-5-18 10:34:30

MOV DRk,Dir16这条指令,按STC手册上列的是2个时钟,实测是1个时钟

fbwcpu 发表于 2022-5-18 11:30:36

1a2b3c 发表于 2022-5-18 09:11
STC也是的,直接找个小弟花一个小时弄个有图有真相的测试不就完了,
示波器拉起,IO口输起,真真切切的,你 ...
(引用自21楼)

同意。。直接一个IO口翻转,上示波器测波形。比成片的文字解释来的直观。直接用波形回击对手{:lol:}

kundi 发表于 2022-5-18 12:10:27

有一种说法,说的是把编译出来的代码,数这些代码理论上要执行多少时钟周期,会和实测出来的可能有区别。
原因在于,存在流水线(且有可能存在相关而断流),以及某些指令可以并行执行,以及读取ROM需要等待等

redroof 发表于 2022-5-18 14:12:26

modbus 发表于 2022-5-18 10:34
MOV DRk,Dir16这条指令,按STC手册上列的是2个时钟,实测是1个时钟
(引用自24楼)

不会吧~
对稍微高级一点的CPU来说,指令表里写的周期都是最短周期,实际只会比这个长,不会比这个短。
比如读外部存储器要带延迟啊,或者流水线冲突之类的。反正只会延迟不会变短

makesoft 发表于 2022-5-18 14:38:14

逻辑分析仪看一下,访问xdata那么慢确实是个问题,但愿是配置问题。

modbus 发表于 2022-5-18 17:10:51

找到问题了,CKCON这个寄存器控制XDATA和XFR访问速度,手册上写的是复位为0,而实际上是和WTST一样都是复位为7,STC的手册和所有例子都没有说要把CKCON初始化为0,只说了WTST要为0,如果CKCON不初始化为0,那么访问XDATA内存和XFR寄存器都会多7个时钟

modbus 发表于 2022-5-18 17:14:20

还有CKCON寄存器中的T0M和T1M是干啥用的,找遍全手册也没找到这个说明

小李非刀 发表于 2022-5-18 17:30:41

modbus 发表于 2022-5-18 17:10
找到问题了,CKCON这个寄存器控制XDATA和XFR访问速度,手册上写的是复位为0,而实际上是和WTST一样都是复位 ...
(引用自29楼)

确实是,我翻看我的例子,确实是有一句CKCON=0;难怪您的测试会多7个T。后面STC工程师会改手册的。

小李非刀 发表于 2022-5-18 17:31:18

modbus 发表于 2022-5-18 17:14
还有CKCON寄存器中的T0M和T1M是干啥用的,找遍全手册也没找到这个说明
(引用自30楼)

手册是没有任何关于T0M T1M的说明,我当它不存在,写0.

国学芯用 发表于 2022-5-19 16:05:24


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

fbwcpu 发表于 2022-5-19 18:24:23

厂家应该搞个实际测试才能安民天下呀。。。丢一些文档是解决不了大家的疑惑的哦{:smile:}

yyts 发表于 2022-5-19 18:55:46

fbwcpu 发表于 2022-5-19 18:24
厂家应该搞个实际测试才能安民天下呀。。。丢一些文档是解决不了大家的疑惑的哦 ...
(引用自34楼)

看29楼,楼主自己的回复。

ahong2hao 发表于 2022-5-19 20:29:47

33楼新鲜出炉的手册{:lol:}。不管怎么说,以后在这个价位上,可选择的单片机又多了。{:lol:}
页: [1]
查看完整版本: 实测STC32G的XDATA内存和XFR寄存器访问速度很慢