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.

[参考译文] MSPM0C1106:如何使用 Keil 启用浮点 printf ();函数输出

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1560410/mspm0c1106-how-to-enable-the-floating-point-printf-function-output-with-keil

器件型号:MSPM0C1106


工具/软件:

您好专家

客户使用 printf() 函数提供反馈浮点数据无法通过 SCI 正确打印、但使用 L1306 器件时、该函数可以很好地处理浮点数据。 我看到、在 CCS 设置中、可以选择如何构建 stdio 函数: 如何启用浮点值打印? 但如何使用 Keil 进行此操作呢?

谢谢

Joe

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

    剂量客户可以在 Keil 中打印定点值、而不会出现问题?

    我不建议使用 printf();在 M0 中、它会占用大量资源、内存和 CPU 负载。 建议直接通过 UART 打印该值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dose 客户可以打印定点值、在 Keil 中没有问题?

    没错。

    我研究了其他讨论、似乎 MSPM0 系列可以支持完整规格 stdio、使用 L1306 打印浮点数据没有问题。 因此、我很好奇这个库是否有构建设置。

    我不推荐使用 printf();在 M0 中、它需要大量资源、[/报价]

    客户调试例程需要该函数、因此需要在开发中使用该函数、但会在器件投入大规模生产后阻止该函数。

    谢谢

    Joe

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

    同样不熟悉 Keil 的此类功能、对于 CCS、只需很容易地包含 stdio.h、即可在控制台中打印。 您可以要求客户访问 Keil 支持表来联系专家

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

    嗨、Gary

    我在 CCS 的 C1106 工程中测试 printf() 函数、似乎存在一些问题:  

    如果我按如下所示添加 printf() 函数、然后单击“Build",“,控制、控制台窗口将报告警告。

    如果忽略该警告并开始调试代码、工程将在停止 cinit 函数 但不是 main 函数的第一行、然后我点击“run",“,该、该工程最终将运行到主循环中、但我无法在控制台窗口中看到打印的任何内容。

    但是、如果按照警告操作按照 E2E 线程中所述手动移出.cmd 文件、然后添加-heap define、工程编译将报告问题。

    即使我将-heap 大小更改为小于默认值的 0x100、也会报告相同的问题。

    谢谢

    Joe

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

    请参阅此代码

    e2e.ti.com/.../gpio_5F00_software_5F00_poll_5F00_LP_5F00_MSPM0C1106_5F00_nortos_5F00_ticlang.zip

    并监控 CIO 列中的值

    似乎添加了  puts(“")“);为了使 printf 正常运行、您也可以参阅此页面了解更多信息

    https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_tips_for_using_printf.html 

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

    嗨、Gary  

    感谢您的支持、我使用演示可以让 printf 正常工作、但有 2 个问题:

    如果我将变量从 int 更改为 float、则 CIO 输出数据是错误的。

    为什么 printf 需要 puts(“")“)函数、那么您分享的链接中似乎没有更多说明。

    谢谢

    Joe

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

    我不知道这一点、接下来让我将此主题移至 CCS 团队、看看是否有任何注释

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

    我没有 C1106、但在 L1306 上我观察到:(a) CIO 占用的堆空间略低于 512 字节 (b) printf(核心函数)占用的栈空间远超过 256 字节(我大概记得 350 字节)。 (软件)浮点支持可能会增加(一点点)。

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

    此示例项目中的代码...

    [引述 userid=“319723" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1560410/mspm0c1106-how-to-enable-the-floating-point-printf-function-output-with-keil/6007521

    请参阅此代码

    gpio_software_poll_LP_MSPM0C1106_nortos_ticlang.zip

    并监控 CIO 列中的值

    [/报价]

    ...包含这些源代码行...

            printf("value:%d", ii);
    
            puts("");
    

    请注意 Printf 调用不打印换行符 \n 。  Printf 将输出写入默认流 stdout 。  该流被行缓冲、这意味着只有看到换行符或缓冲区已满时才写入输出。  函数 终端 定义为始终在字符串的末尾写入换行符、即使它是空字符串也是如此。  此代码等效...

            printf("value:%d\n", ii);
    

    我怀疑类似的更改可以解决问题。

    谢谢。此致、

    -乔治