35MHZ的STC32G跑不过45MHZ的STC8H吗?有图
1,45MHZ的STC8H跑一个1MS的延迟程序,用的是STC提供的例子。2,把这个程序放到35MHZ的STC32G上运行,执行时间却是2.5MS。
@**NT018 不应该。有否些wtst=0; 上程序。 新手需要注意的。 难道是惊天重大bug? STC32G初始化时需要把WTST设置为0,否则执行指令会产生7个等待时间,从而导致速度变慢。STC官网的32G实验箱演示程序里面主函数第一条指令基本上都是WTST=0;我在网上看到也有人做了同样的测试,有兴趣了解一下。
https://zhuanlan.zhihu.com/p/480871422 本帖最后由 tzgok 于 2022-3-25 18:58 编辑
autopccopy 发表于 2022-3-25 18:51
不应该。有否些wtst=0; 上程序。 新手需要注意的。
都是STC提供的例子,直接套用,单纯为了测试下速度
本帖最后由 tzgok 于 2022-3-25 18:58 编辑
sfc886 发表于 2022-3-25 18:53
STC32G初始化时需要把WTST设置为0,否则执行指令会产生7个等待时间,从而导致速度变慢。STC官网的32G实验箱 ...
都是STC的代码
8位操作STC32G和STC8指令效率一样,35MHz肯定跑不过45MHz STC32G的性能提升主要得益于内存架构的优化。 看看汇编后代码区别,感觉应该提高在32位运算速度上,基本的延时看不出来,可以测试一下。 路过学习了 选择恰当的存储器模式也很重要,不同模式性能差别很大。 本帖最后由 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)
{
u16i;
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;
// c = dat;
// d = a * c; //STC32G 无MDU328ms, 有MDU32 6.65ms, STC8H 34.5ms
a = dat;
c = dat;
d = a / c; //STC32G 无MDU32 78ms, 有MDU32 12.0ms, STC8H 181ms
}
P10 = ~P10; //指示时间
}
}
STC32G的计算速度,是8位机无法企及的。
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");
} 用 STC32G12K128 的 DMA 支持的 TFT彩屏接口,专业的事让专业的人/专门的外设去做
第一次开发32位单片机,肯定有这里或那里的问题, STCMCUNT018 发表于 2022-3-26 09:38
用 STC32G12K128 的 DMA 支持的 TFT彩屏接口,专业的事让专业的人/专门的外设去做
...
抓紧出70MHZ的STC32G才是正路。。 STC什么时候自己研发芯片了再说,这么多年了老是满足于做山寨,这样的公司没有未来。 本帖最后由 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)
{
u16i;
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;
// c = dat;
// d = a * c; //STC32G 6.65ms, STC8H 34.5ms
a = dat;
c = dat;
d = a / c; //STC32G 12.0ms, STC8H 181ms
}
P10 = ~P10; //指示时间
}
}
STC32G的计算速度,是8位机无法企及的。特别是乘法,32*32时间很短只有3个时钟周期,其余的的时间都是在搬移数据了。
coody 发表于 2022-3-26 10:42
同频下,仅仅运行简单的for循环或whie循环的软件延时,指令差不多,所以速度没有太大差别。
但是一旦执行数 ...
我的打算是:把STC8H的代码移植到STC32G上,实现速度提升。。。目前看来是不可能,因为我的应用主要是时序控制为主,算法为辅。。。如果大量用到INT和LONG的乘除运算,那么STC32G肯定达到不错的速度。
页:
[1]
2