35MHZ的STC32G跑不过45MHZ的STC8H吗?有图

[复制链接]
 楼主| tzgok 发表于 2022-3-25 18:32 | 显示全部楼层 |阅读模式
1,45MHZ的STC8H跑一个1MS的延迟程序,用的是STC提供的例子。
2,把这个程序放到35MHZ的STC32G上运行,执行时间却是2.5MS。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| tzgok 发表于 2022-3-25 18:35 | 显示全部楼层
@**NT018
autopccopy 发表于 2022-3-25 18:51 来自手机 | 显示全部楼层
不应该。有否些wtst=0; 上程序。 新手需要注意的。
autopccopy 发表于 2022-3-25 18:52 来自手机 | 显示全部楼层
难道是惊天重大bug?
sfc886 发表于 2022-3-25 18:53 | 显示全部楼层
STC32G初始化时需要把WTST设置为0,否则执行指令会产生7个等待时间,从而导致速度变慢。STC官网的32G实验箱演示程序里面主函数第一条指令基本上都是WTST=0;我在网上看到也有人做了同样的测试,有兴趣了解一下。
https://zhuanlan.zhihu.com/p/480871422
 楼主| tzgok 发表于 2022-3-25 18:54 | 显示全部楼层
本帖最后由 tzgok 于 2022-3-25 18:58 编辑
autopccopy 发表于 2022-3-25 18:51
不应该。有否些wtst=0; 上程序。 新手需要注意的。

都是STC提供的例子,直接套用,单纯为了测试下速度

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| tzgok 发表于 2022-3-25 18:55 | 显示全部楼层
本帖最后由 tzgok 于 2022-3-25 18:58 编辑
sfc886 发表于 2022-3-25 18:53
STC32G初始化时需要把WTST设置为0,否则执行指令会产生7个等待时间,从而导致速度变慢。STC官网的32G实验箱 ...

都是STC的代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
英雄本色2022 发表于 2022-3-25 19:52 | 显示全部楼层
8位操作STC32G和STC8指令效率一样,35MHz肯定跑不过45MHz
imdx 发表于 2022-3-25 20:23 | 显示全部楼层
STC32G的性能提升主要得益于内存架构的优化。
elife 发表于 2022-3-25 21:56 | 显示全部楼层
看看汇编后代码区别,感觉应该提高在32位运算速度上,基本的延时看不出来,可以测试一下。
lvyunhua 发表于 2022-3-25 21:59 | 显示全部楼层
路过学习了
567 发表于 2022-3-26 00:22 | 显示全部楼层
选择恰当的存储器模式也很重要,不同模式性能差别很大。
coody 发表于 2022-3-26 00:33 | 显示全部楼层
本帖最后由 coody 于 2022-3-31 11:08 编辑

同频下,仅仅运行简单的for循环或whie循环的软件延时,指令差不多,所以速度没有太大差别。
但是一旦执行数**算,差别就很大了。

#define MAIN_Fosc   30000000L   //定义主时钟

u32        dat[]={123456UL, 34567, 3456789012UL, 543210UL,0};
u32 a,c,d;

/**********************************************/
void main(void)
{
    u16  i;

    WTST = 0;  //STC32G要执行这句, STC8H不要。

    P1M1 = 0;
    P1M0 = 0;

    while (1)
   {
      for(i=0; i<10000; i++)
      {
      //   NOP(10);     //STC32G 5ms, STC8H 5.7ms
      //   a = dat[0];
      //   c = dat[1];
      //   d = a * c;   //STC32G 无MDU32  8ms, 有MDU32 6.65ms, STC8H 34.5ms

           a = dat[2];
           c = dat[3];
           d = a / c;   //STC32G 无MDU32 78ms, 有MDU32 12.0ms, STC8H 181ms
      }
      P10 = ~P10;     //指示时间
      }
}

STC32G的计算速度,是8位机无法企及的。

 楼主| tzgok 发表于 2022-3-26 09:02 | 显示全部楼层
elife 发表于 2022-3-25 21:56
看看汇编后代码区别,感觉应该提高在32位运算速度上,基本的延时看不出来,可以测试一下。 ...

确实是这样,同样的LCD刷屏测试,,35MHZ的STC32G也比45MHZ的STC8H慢,大约慢28%,和频率差距一致。也就是说,大量用到SHORT,LONG,FLOAT等的应用,STC32G才有运行优势,,,

    while(1)
    {
        LED=~LED;  
        TFT_ShowString(1,1,(unsigned char*)"1234567812345678");
        TFT_ShowString(2,1,(unsigned char*)"1234567812345678");
        TFT_ShowString(3,1,(unsigned char*)"1234567812345678");
        TFT_ShowString(4,1,(unsigned char*)"1234567812345678");
        TFT_ShowString(5,1,(unsigned char*)"1234567812345678");
        TFT_ShowString(6,1,(unsigned char*)"1234567812345678");
        TFT_ShowString(7,1,(unsigned char*)"1234567812345678");
        TFT_ShowString(8,1,(unsigned char*)"1234567812345678");
        
    }
STCMCUNT018 发表于 2022-3-26 09:38 | 显示全部楼层
用 STC32G12K128 的 DMA 支持的 TFT彩屏接口,  专业的事让专业的人/专门的外设去做

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
stb988 发表于 2022-3-26 09:43 | 显示全部楼层
第一次开发32位单片机,肯定有这里或那里的问题,
 楼主| tzgok 发表于 2022-3-26 10:32 | 显示全部楼层
STCMCUNT018 发表于 2022-3-26 09:38
用 STC32G12K128 的 DMA 支持的 TFT彩屏接口,  专业的事让专业的人/专门的外设去做
...

抓紧出70MHZ的STC32G才是正路。。
ttjlc 发表于 2022-3-26 10:41 | 显示全部楼层
STC什么时候自己研发芯片了再说,这么多年了老是满足于做山寨,这样的公司没有未来。
coody 发表于 2022-3-26 10:42 | 显示全部楼层
本帖最后由 coody 于 2022-3-26 12:53 编辑

昨晚太晚程序没仔细看反汇编,有点问题,下面是今天严格看过反汇编的:
同频下,仅仅运行简单的for循环或whie循环的软件延时,指令差不多,所以速度没有太大差别。
但是一旦执行数**算,差别就很大了。

#define MAIN_Fosc   30000000L   //定义主时钟

u32        dat[]={123456UL, 34567, 3456789012UL, 543210UL,0};
u32 a,c,d;

/**********************************************/
void main(void)
{
    u16  i;

    WTST = 0;  //STC32G要执行这句, STC8H不要。

    P1M1 = 0;
    P1M0 = 0;

    while (1)
   {
      for(i=0; i<10000; i++)
      {
      //   NOP(10);     //STC32G 5ms, STC8H 5.7ms
      //   a = dat[0];
      //   c = dat[1];
      //   d = a * c;   //STC32G 6.65ms, STC8H 34.5ms

           a = dat[2];
           c = dat[3];
           d = a / c;   //STC32G 12.0ms, STC8H 181ms
      }
      P10 = ~P10;     //指示时间
      }
}

STC32G的计算速度,是8位机无法企及的。特别是乘法,32*32时间很短只有3个时钟周期,其余的的时间都是在搬移数据了。


 楼主| tzgok 发表于 2022-3-26 11:12 | 显示全部楼层
coody 发表于 2022-3-26 10:42
同频下,仅仅运行简单的for循环或whie循环的软件延时,指令差不多,所以速度没有太大差别。
但是一旦执行数 ...

我的打算是:把STC8H的代码移植到STC32G上,实现速度提升。。。目前看来是不可能,因为我的应用主要是时序控制为主,算法为辅。。。如果大量用到INT和LONG的乘除运算,那么STC32G肯定达到不错的速度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

231

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部