C语言定点数学

C语言定点数学,c,fixed-point,C,Fixed Point,我熟悉Arduino编程工具,但对嵌入式编程的经验相对较少。当在Arduino中使用十进制数时,我从来没有遇到过任何问题,因此,当我最近开始使用TI的Launchpad F28069M(TMS320F28069M芯片)时,我惊讶地发现我的数学没有得到预期的结果。在做研究时,我意识到TI芯片有一个定点处理器,这可以解释为什么我的小数被截断为0。(请参阅简短的代码示例) 我的问题如下: 我应该如何在代码中声明十进制数 我应该使用TI的IQ数学吗 为什么我能够在Arduino中用十进制数声明和执行数学

我熟悉Arduino编程工具,但对嵌入式编程的经验相对较少。当在Arduino中使用十进制数时,我从来没有遇到过任何问题,因此,当我最近开始使用TI的Launchpad F28069M(TMS320F28069M芯片)时,我惊讶地发现我的数学没有得到预期的结果。在做研究时,我意识到TI芯片有一个定点处理器,这可以解释为什么我的小数被截断为0。(请参阅简短的代码示例)

我的问题如下:

  • 我应该如何在代码中声明十进制数
  • 我应该使用TI的IQ数学吗
  • 为什么我能够在Arduino中用十进制数声明和执行数学函数而没有任何问题
  • 我的代码

    Uint16 A;
    
    main()
    {
        A = .25;
    }
    
    TI CCS中表达式窗口的结果:


    请尝试使用以下代码:

    float A;
    
    main()
    {
        A = .25;
    }
    

    Uint16
    是一个16位无符号整数(无小数…),所以有什么不清楚???…您有很多误解。Uint16不是一个普通意义上的定点类型。您试图将0.25(浮点)转换为16位整数,025只是四舍五入到0,而你在
    A
    中得到了0,这是意料之中的。我感觉很糟糕,因为这个问题因为人们不理解固定点而被否决。定点数字是机器的整数,通常是现有整数类型的
    typedef
    。对于初学者,我推荐TI的IQMath库。当您获得更多信息时,您可以查找IQMath源代码并使用一些较低级别的函数。IQMath API并不完美,例如,IQ_N_div函数不处理输入和输出不同的情况,但较低级别的实现会处理。