21ic问答首页 - 测试STC32G浮点计算性能
测试STC32G浮点计算性能
tianxiongweitxw2022-12-15
本帖最后由 tianxiongweitxw 于 2022-12-15 13:11 编辑
为了测试STC32G的浮点运算性能,设计了下面一段代码: u16 i=0;
P24=1;
// delay_ms(10);
for(i=0; i<1000; i++) //测量浮点运算时间
{
a=0.890*0.112;
}
P24=0;
以上代码用管脚P24的高电平,显示单片机做一千次浮点运算的时间,用示波器观察.问题来了,示波器没有反应,好像这个FOR循环没有运行,把FOR循环换成延时函数,可以正常;思来想去,也不明白那里出了问题,为什么FOR循环不运行.请高手指点,谢谢.
为了测试STC32G的浮点运算性能,设计了下面一段代码: u16 i=0;
P24=1;
// delay_ms(10);
for(i=0; i<1000; i++) //测量浮点运算时间
{
a=0.890*0.112;
}
P24=0;
以上代码用管脚P24的高电平,显示单片机做一千次浮点运算的时间,用示波器观察.问题来了,示波器没有反应,好像这个FOR循环没有运行,把FOR循环换成延时函数,可以正常;思来想去,也不明白那里出了问题,为什么FOR循环不运行.请高手指点,谢谢.
赞0
你要计算浮点,可以使用如下计算:
a=a*1.01;
刚好我手上也有STC32G12K128,实测速度,1000次浮点乘法3.3ms @30MHz,计算一次(包括循环)3.3us,对于没有硬件浮点运算的MCU来说,这个速度我觉得很不错了。
#define MAIN_Fosc 30000000L //定义主时钟
#include "STC32G.h"
void delay_ms(u16 ms)
{
u16 i;
do
{
i = MAIN_Fosc / 6000;
while(--i) ;
}while(--ms);
}
float edata fx;
void main(void)
{
u16 i;
WTST = 0;
CKCON = 0;
P0M1 = 0;
P0M0 = 0;
while (1)
{
P00 = 1; // 3.3ms @30MHz
for(fx=1.0f, i=0; i<1000; i++)
{
fx = fx * 1.01;
}
P00 = 0;
delay_ms(1);
}
}
评论
2022-12-17
赞0
把a 定义成 volatile float; 再改 a=0.89*i; 这就能看运算时间了。
评论
2022-12-16
赞0
编译器一算,这是一个常数,再瞧瞧a是什么?是个int?直接给0,完事。
评论
2022-12-16
赞0
直接就给优化掉了。
评论
2022-12-16
您需要登录后才可以回复 登录 | 注册