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.
工具/软件: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