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.

[参考译文] CCS/66AK2G12:使用 UART_printf ()打印浮点数

Guru**** 2484615 points
Other Parts Discussed in Thread: 66AK2G12, 66AK2H14

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/901286/ccs-66ak2g12-printing-floating-point-numbers-using-uart_printf

器件型号:66AK2G12
主题中讨论的其他器件: 66AK2H14

工具/软件:Code Composer Studio

大家好、

我正在使用66AK2G12处理器并在 ARM 内核中运行 TI-RTOS。

作为要求的一部分、我使用浮点变量来保存浮点数字。

浮点运算在处理器上运行良好、没有任何问题。 我尝试在 IF 条件下比较两个小数、但没有报告任何问题。  
但是当我尝试使用 UART_printf()打印该值时,我会发现“错误”被显示,而不是小数。

我甚至尝试使用 sprintf()将浮点数存储为字符串,然后尝试使用 UART_printf()打印该字符串。 仍然没有显示该数字。

我甚至尝试将硬编码浮点值传递到 sprintf 中、如下所示。

char val[20];
sprintf (val、"\nTEMP 值=%f"、(1.8765));
uart_printf ("\n%s"、val); 

但我将获得以下输出。

温度值=  

数字未显示。

因此、请告诉我如何在 CCS 中为66AK2G12处理器通过 UART 打印小数。  
谢谢你。

此致、
Krishna。

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

    UART_printf 当前默认不支持这种情况。 您可以将浮点或整数转换为 ASCII 值并打印该值。 位于 pdk_k2g_1_0_15\packages/ti\drv\mcasp\examples\src 中的 AudioEq.c 文件中提供了这方面的示例

    查找与 UART_printf 一起使用的 itoa 和 atoi 支持函数

    希望这对您有所帮助

    此致、

    Rahul

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

    itoa()没有太大帮助,因为它采用整数而不是浮点。 除非您建议他们根据 itoa()代码编写自己的"ftoa()"。

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

    [引用 user="Krishna Bothesy J"]我甚至尝试将硬编码浮点值传递到 sprintf 中、如下所示。

    1
    2.
    3.
    charval[20];
    sprintf(val,"\nTEMP VALUE = %f",(1.8765));
    UART_printf("\n%s",val);

    [/引号] val 字符串只有20个字节、%f 格式指定符写入6个小数位。 也就是说、val 字符串不够长、导致 sprintf 写入 val 数组的末尾、可能损坏栈上的其他变量。

    我使用 gcc-arm-none-eabi-7-2018-Q2-update 编译器尝试了该代码、并注意到编译器实际上会生成有关以下内容的警告:

    ./main.c:10:33:警告:'%f'指令将8个字节写入大小为6的区域[-Wformat-overflow=]
    sprintf (val、"\nTEMP 值=%f"、(1.8765));
    ^~
    ./main.c:10:5:注:'printf'将23个字节输出到大小为20的目的地址
    sprintf (val、"\nTEMP 值=%f"、(1.8765));
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~μ A
    

    尝试增加 val 数组的长度以获得足够的空间。

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

    切斯特、您好!

    [引用用户="Chester Gillon"]

    val 字符串只有20个字节、%f 格式指定符写入6个小数位。 也就是说、val 字符串不够长、导致 sprintf 写入 val 数组的末尾、可能损坏栈上的其他变量。

    尝试增加 val 数组的长度以获得足够的空间。

    [/报价]

    在测试过程中、我只打印了一个字、后跟数字。 因此[20]就足够了。  

    为了美观起见、我在这里的论坛中发布代码时添加了"TEMP Value"。 因此、我忽略了更新数组长度值。 我的差。  

    因此、即使阵列长度为100、我也只能打印文本、数字也无法打印。


    我检查了 Rahul 建议的代码。 和 itoa()和 I2A()函数对于整数很有用。 但我需要打印小数和小数点。  

    因此将尝试按照 Keith 的建议编写 ftoa()函数。 同时、请告诉我任何其他权变措施。 我愿意接受建议。

    谢谢、

    Krishna

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

    [引述 user="Krishna Bocesy J"]因此、即使阵列长度为100、我也只能打印文本、数字也无法打印。[/引述]感谢您的解释。

    您使用的是哪种编译器?

    您可能需要在 printf 函数系列中启用浮点支持。

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

    您好!

    我目前正在为 K2G 的 ARM 内核使用"GNU v7.2.1 (Linaro)"编译器。  

     CCS 9.3上使用 TI-RTOS[ti-processor-sdk-rtos-k2g-evm-06.01.00.08]。

    我查看了项目配置文件和 UART_printf 库。 找不到任何启用浮点支持的选项。

    但浮点计算和工作正常、代码中没有任何问题。 因此、问题似乎仅在打印场景中才存在。 因此需要检查是否有任何选项可在 sprintf()中启用浮点打印。  


    因为对于 UART_printf(),库中明确提到它不支持%f

    此致、

    Krishna

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

    [引用 user="Krishna Boesc J"]AM 目前正在为 K2G 的 ARM 内核使用"GNU v7.2.1 (Linaro)"编译器。  

     CCS 9.3上使用 TI-RTOS[ti-processor-SDK-RTOS-k2g-EVM-06.01.00.08]。我没有 66AK2G12、但使用66AK2H14并使用 ti-processor-SDK-RTOS-k2hk EVM-06.01.00.08进行了调查。

    导入 了 UART_BasicExample_K2H_armExampleProject 示例并添加了以下代码:

    char val[40];
    sprintf (val、"\nTEMP 值=%f"、(1.8765));
    UART_printf ("\n%s"、val); 

    运行代码时,sprintf()为"%f"浮点格式生成了一个空字符串。

    [引用 user="Krishna Boesc J"]我查看了项目配置文件和 UART_printf 库。 找不到任何启用浮点支持的选项。TI-RTOS 通过 在链接器选项中使用"--specs=nano。specs"链接 Newlib-nano 库。

    readme.nano 解释了需要格式化浮点输入/输出的程序在链接期间必须明确引用相关的支持函数。 对于 printf()系列例程,支持函数为“_printf_float”。

    对于 TI-RTOS 工程、可以通过在 工程的链接器选项中添加_printf_float 作为未定义的符号来完成此操作:

    通过此更改、sprintf 随后生成浮点输出:

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

    切斯特、您好!

    很抱歉耽误你的答复。  

    我已经测试了您的建议、效果很好。  

    谢谢你。

    -Krishna。