打印
[STM32F1]

怎么ST单片机降低浮点运算时间 单片机浮点数

[复制链接]
101|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
albertaabbot|  楼主 | 2024-5-26 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、前言

          目前,大多数的单片机不具有浮点运算单元(FPU)。

          TI公司的tms320f28335具有FPU,但是在进行一个浮点除法运算时,需要1.5us的时间,这在实时控制系统中是不太能接受的。

整形运算。

2、整形运算概述

           单片机主要分为8位机、16位机和32位机,使用最多的就是16位机。

           16位机中变量类型 int 是16位的,也就是说:16位机使用16位的0或者1组合表示数据。

            32位机中变量类型 int 是32位的,也就是说:32位机使用32位的0或者1组合表示数据。

3、浮点数的近似转换

近似用乘以一个整数然后除以2的n次方表示。

           例如:

           0.25 = 1 >> 2;

           0.5 = 1 >> 1;

           0.75 = 3 >>2;

            其他的浮点数以此类推。

            一个浮点数可以有多种近似替换的方案,每种替换方案的精度不一样。

            比如:

                     0.8 可以近似等于3>>2(0.75),也可以近似等于13>>4(0.8125);

数据位溢出。



4、防止数据溢出

            步骤三的转换也是有前提条件的:变量乘了整数后防止数据超过最大值。

不能超出原有变量的数据类型的范围。

            下面测试案例:

//定义变量类型
unsigned int   a;
unsigned int   b;
unsigned long  c;
unsigned int   d;

//测试方法
    a = (1024*1024)>>10;
    b = ((long)(1024*1024))>>10;
    c = (1024*1024)>>10;
    d = __builtin_muluu(1024,1024)>>10;

//编译警告
Test.c:101:15: warning: integer overflow in expression
Test.c:102:21: warning: integer overflow in expression
Test.c:103:14: warning: integer overflow in expression

//调试变量结果
a = 0
b = 0
c = 0
d = 1024
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
        在16位单片机的C编译器的作用下,由上面的测试结果显示,仅仅只有第四种输出正确结果。

        其他三种,不管是强制数据转换,还是设置为long型的变量,导致输出结果都不正确。

        可能:

              在这款单片机中,内存的最大位数位16位吧,如果需要超出16位运算结果的数据,就会报错。

              或者只能按照该单片机自带的函数处理数据吧。

5、与浮点Q变换的区别

          浮点数a转为定点数b是:b = (int)a*2n

          定点数b转为浮点数a是:a = (float)a>>n

固定的。一般,Q变换是把浮点数全部转为定点数参与运算,最后转为才转为浮点数;

等效为一个浮点数。


使用特权

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

本版积分规则

13

主题

1136

帖子

1

粉丝