This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C129ENCPDT:整数到浮点表示

Guru**** 2460850 points
Other Parts Discussed in Thread: TM4C129ENCPDT

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/653786/tm4c129encpdt-integer-to-float-representation

器件型号:TM4C129ENCPDT

您好!  

我正在使用 TM4C129ENCPDT 控制器、IDE 为 CCS 版本:7.4.0.00015、最近在将32位无符号整数读取到浮点变量时遇到问题。 也尝试过类型转换、但不幸的是、它不起作用。  

例如、将值30.00视为整数表示形式。

SP_Temperature =  0x41f00000;// 32位无符号整数>> 30.00

f_SP_Temperature =(float) SP_Temperature;  // f_SP_Temperature >> float、 SP_Temperature >> unsigned 32位整数

"f_SP_Temperature"的值采用十进制等效值、如"1.10624768e+09"

请找到所附 的相同屏幕截图、我们非常感谢您的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Kurian、
    请您详细说明问题吗? 0x41F00000等于十进制110624768。 您认为 f_SP_Temperature 是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想您正在尝试这样做:

    float main (void)
    {
    uint32_t SP_Temperature;
    float f_SP_Temperature;
    
    SP_Temperature = 30;// 32位无符号整数>> 30.00
    f_SP_Temperature =(float) SP_Temperature;// f_SP_Temperature >> float、SP_Temperature >> unsigned 32位整
    数返回 f_SP_Temperature;
    }
    

    然后、如果查看 变量、可以看到浮点30.0的十六进制表示为0x41F00000。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bob。 海报只需右键单击表达式窗口、然后在数字格式下选择十六进制。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另一方面、如果从读取外设的函数中获取返回整数值、但需要将该值解释为浮点值并避免转换、则可以像这样编写代码。 您基本上将整数的地址转换为浮点指针。 虽然 C 代码看起来很混乱、但编译器理解并生成代码、这些代码只需将值从一个位置直接复制到下一个位置即可。

    float main (void)
    {
    uint32_t SP_Temperature;
    float f_SP_Temperature;
    
    SP_Temperature = 0x41F00000;// 32位无符号整数>> 30.00
    f_SP_Temperature =*(float *)&SP_Temperature;// f_SP_Temperature >> float、SP_Temperature >>无符号32位整
    数返回 f_SP_Temperature;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉,我只能再拒绝一项评论。 也许更巧妙的方法是使用联合体。 基本上、告诉编译器我想通过两种不同的方式引用单个位置。 它如下所示:

    float main (void)
    {
    union
    {
    floatf;
    uint32_t I;
    }SP_Temperature;
    
    SP_Temperature.I = 0x41F00000;// 32位无符号整数>> 30.00
    返回 SP_Temperature.f;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 Bob 和 Charles。

    "F_SP_Temperature =*(float *)&SP_Temperature;"解决了该问题。 告诉编译器地址位置并作为类型 float 进行介绍。 探索新东西的时候很棒… 再次感谢你。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    可以使用 ADC/UDMA 传输来完成类似的操作吗? 跳过整数到浮点转换?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Savo Pejovic"]

    可以使用 ADC/UDMA 传输来完成类似的操作吗? 跳过整数到浮点转换?

    [/引述]不是、这些是不同的表示、而不是对相同表示的不同看法。

    Robert