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.

[参考译文] CC2652R7:在分离线程上使用 printf 显示浮点数时出现问题

Guru**** 2769405 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1269408/cc2652r7-issue-displaying-floating-point-numbers-with-printf-on-detached-thread

器件型号:CC2652R7
主题中讨论的其他器件:SysConfig

您好!

我遇到了使用 printf 显示浮点数(甚至使用 vsnprintf 将浮点数转换为字符串)但仅在分离线程上的问题。  它的问题是、就像我开始使用的 basic_ble 示例一样、我的整个应用程序在在 main 中启动的分离线程上运行。  因此、 例如、当我在 main.c 中调用 printf ("%f\r\n、1.23)时、它会起作用、 但在主应用程序线程上,它输出垃圾信息(即使它处理的 整数没有%d 个问题)。  有什么建议吗?

谢谢。

埃里克  

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

    您好、Eric、

    感谢您与我们联系。

    您能否详细介绍

    -所使用的 SDK 版本

    -显示驱动程序的配置(我想一个屏幕截图从 SysConfig 可以帮助)

    -如果相关,一个代码片段显示如何重现

    此致、

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

    1) 1)我的 SDK 文件夹是"simplelink_cc13xx_cc26xx_sdk_7_10_01_24"

    2) 2)由于各种原因、我没有使用 Display 驱动程序、 但它看起来也不支持浮点。  出于此支持问题的目的、我简单地开始了 basic_ble 示例工程、并在 app_main.c 中的 openDisplay 函数的末尾添加了以下两行代码(第143行):

    Display_printf(dispHandle, dispIndex, 0, "%d\r\n", 123); dispIndex++;
    Display_printf(dispHandle, dispIndex, 0, "%f\r\n", 1.23); dispIndex++;

    它在第一行打印"123"、在第二行打印"0.000"。

    3) 3)如果我将上面的 Display_printf 更改为标准(cstdio) printf 以输出到 "Console"选项卡(甚至尝试使用 vsnprintf 将浮点值转换为字符串、以便可以通过 UART 传输)

    printf("%d\r\n", 123);
    printf("%f\r\n", 1.23);

    我在第一行得到"123"、并在第二行上得到"80298907387237024307250976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

    您好、Eric、

    感谢您提供的详细信息。

    我已在内部复制并报告了此问题。

    作为权变措施、我建议您使用以下代码段:

        float value_f = 1.73;
        int value_i; // integer part of value_f
        int value_d; // decimal part of value_f
    
        value_i = (int)value_f;
        value_d = (int)((float)(value_f - value_i)*10000);
    
        Display_printf(dispHandle, dispIndex, 0, "%d\r\n", 123); dispIndex++;
        Display_printf(dispHandle, dispIndex, 0, "%d.%d\r\n", value_i, value_d); dispIndex++;

    得到的结果如下:

    此致、

    此致、