打印

测试STC32G浮点计算性能

[复制链接]
1930|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianxiongweitxw|  楼主 | 2022-12-15 00:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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循环不运行.请高手指点,谢谢.


使用特权

评论回复

相关帖子

沙发
fzyuan| | 2022-12-16 12:13 | 只看该作者
编译器一看,这么明显没用的代码要他作甚!
直接就给优化掉了。

使用特权

评论回复
板凳
tianxj01| | 2022-12-16 12:26 | 只看该作者
0.89*0.112=0.09968
编译器一算,这是一个常数,再瞧瞧a是什么?是个int?直接给0,完事。

使用特权

评论回复
地板
无善无恶心之体| | 2022-12-16 15:32 | 只看该作者
本帖最后由 无善无恶心之体 于 2022-12-16 15:35 编辑

把a 定义成   volatile float; 再改    a=0.89*i; 这就能看运算时间了。

使用特权

评论回复
5
coody| | 2022-12-17 11:26 | 只看该作者
a=0.890*0.112,编译器直接给的是 a=0.09968; 你给的是常数,编译器计算好字节赋值了。
你要计算浮点,可以使用如下计算:
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);
        }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

520

帖子

0

粉丝