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.

[参考译文] 编译器/TMS320C6655:在 Log_printf 中打印浮点值时出现问题

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/912715/compiler-tms320c6655-problems-with-printing-float-values-in-log_printf

器件型号:TMS320C6655

工具/软件:TI C/C++编译器

将 C6000_8.3.3用作编译器时、在 Log_printf2中打印浮点值时遇到问题。 如果第一个值不是浮点值、而第二个值是浮点值、则以下调用:
log_printf2 (trace_buffer、"int1 =%d、   Float2 =%f"、integer var、float_var);
生成此输出:  " int1 = 112、    Float2 =-0.000002"    
如果第一个参数是 float、则浮点值打印正确、但第二个参数打印为随机值(不过值相同)。 因此、它看起来像是存储器中浮点数大小的问题。


在模块 xdc.runtime.Log 的说明中、说明指出:
 %f 格式说明符用于打印单精度浮点值。 请注意 、%f 假定 sizeof (Float)<= sizeof (IArg)。 大多数解释浮点值的客户端都希望它们以 IEEE 754浮点格式表示。 因此、在  目标默认不生成 IEEE 754浮点格式的浮点值的情况下、建议在向日志函数提供值之前将浮点值转换为该格式。


因此我试图这样做  

log_printf2 (trace_buffer、"Float1 =%f、Float2 =%f"、floatToArg(111.222)、floatToArg(333.444); 

这导致:  
Float1 = 1442225909949672213745117187500000000000000000000000000000000000000000000000000000000000000000000 0000.000000、Float2 =-0.000002

所以 floatToArg 不能解决这个问题——它使它变得更糟…

有人能提供帮助吗?

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

    尊敬的 Henrik:

    您使用的是 BIOS 和 XDC 的哪个版本?

    此致、

    - Rob

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

    您好 Rob

    我们使用的是 BIOS_6_41_00_26和 xdctools_3_22_04_46。


    此致
    Henrik

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

    感谢您提供信息。

    这是 DSP/BIOS 5.x 兼容模式吗?

    SYS/BIOS 6.x 没有任何名为 Log_printf2()的 API。  它具有 Log_print2 ()(无'f')、但 Log_print2的第一个参数是 Diags_Mask、而不是我认为的日志对象(trace_buffer)。  DSP/BIOS 5.x 有一个 log_printf(),它将 log_Obj 作为其第一个参数,而不是 log_printf2()。

    floatToArg()是将 float 参数传递给 Log_print 函数的正确方法。

    您可以随附代码吗?

    您可以附加您构建的可执行文件吗?

    此致、

    - Rob