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.

[参考译文] TMS320F28379D:在 C2000 上发出将浮点转换为字符串以进行 SCI (UART) 传输的问题

Guru**** 2999690 points

Other Parts Discussed in Thread: TMS320F28379D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1633323/tms320f28379d-issue-converting-float-to-string-for-sci-uart-transmission-on-c2000

部件号: TMS320F28379D
主题: C2000WARE 中讨论的其他器件

尊敬的 TI 团队:

我正在使用 C2000 器件 ([TMS320F28379D]) 并使用 SCI (UART) 外设进行串行通信。

最初、我通过发送正常字符串来验证 SCI 传输是否正常工作。 我还能够将整数值转换为字符串并成功传输它们。

之后、我尝试通过以下方式来传输浮点值:首先使用 sprintf 将浮点值转换为字符串、然后通过 SCI 发送它们。

image.png

 

但是、当我这样做时、我开始观察异常的系统行为。 为了找出问题所在、我只需使用 printf 打印浮点即可尝试简化测试:

image.png

 

但即使这样也无法正常工作。 输出为空、但同样适用于整数值。

由此看来:

  • SCI (UART) 本身工作正常(已使用字符串和整数进行验证)
  • 该问题专门在处理浮点值时开始
  • 即使使用 printf 进行基本的浮点打印也无法正常工作
  • 此外、将 sprintf 与“%f“一起使用似乎会影响系统行为

我还在 Code Composer Studio 中检查了是否有启用浮点支持的任何选项(例如 printf 相关设置)、但找不到任何此类选项。

请您提供以下帮助:

  1. C2000 是否提供浮点支持?
  2. 为什么将 sprintf 与“%f“一起使用会导致异常的系统行为?
  3. 在这种情况下、如何正确启用或处理浮点到字符串的转换?
  4. 通过 SCI 安全传输浮点值的推荐方法?

提前感谢您的支持。

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

    尊敬的 Deepan:

    是的、C2000 支持浮点。 要将浮点数转换为字符串、可以像使用一样使用 snprintf() 函数。  

    为了进行说明、printf() 和 sprintf() 函数来自标准 IO 库。 printf() 使用 stdout、它通过器件上的 JTAG 接口将字符串打印到 CCS 控制台。 SCI 外设(UART 协议)通过单独的物理连接发送消息、该物理连接将 UART 协议转换为 USB 以在 CCS 中显示到串行终端。 这些是 CCS 中的不同窗口。 你要做什么?

    对于 printf()/ sprintf() 函数、我们 在这里有一个教程。  

    对于 SCI 外设、您可以查看 C2000ware SDK 中的示例。 路径:[C2000ware install]/driverlib/f2837xd/examples/cpu1/sci/. 我建议您尝试 sci_ex3_echoback。  

    有关此器件的另一个注意事项、如果使用 Launchpad 、请确保 在工程中定义了_LAUNCHXL_F28379D 预定义符号、以便正确配置时钟。  

    此致、

    Delaney

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

    您好、

    我使用 printf float 在 CCS 控制台中打印一个值、并且已经包含了该 stdio.h 库。 该项目还利用 UART 协议进行数据传输。 SCI 外设代码根据 C2000ware SDK 中的示例进行了修改。我已验证工程中是否正确定义了预定义符号;但是、问题仍然存在。

    您能否建议一种解决方案、或者就为什么 printf snprintf 无法通过 UART 正确显示和传输浮点值提供指导?

    提前感谢您的支持。

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

    尊敬的 Deepan:

    您能否显示获得的控制台输出? 如前所述,printf () 不会在芯片上使用 SCI 模块。 它使用 JTAG 通过调试器接口进行打印。   

    您能否检查编译器设置中的--printf_support 标志? 该 参数应设置为--printf_support=full 以发送浮点值。 请参阅 此处的文档。

    此致、

    Delaney

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

    您好、

    是的、我已经检查了编译器设置并确认 --printf_support 标志设置为 FULL。


    但是、我仍然面临着一个问题、即控制台输出中未打印浮点值。 即使我尝试使用打印一个简单的浮点值 printf,控制台中也不会显示任何内容(随附截图)。

    当尝试通过 UART(使用 snprintf)以字符串形式传输浮点值时、我也会遇到一个相关问题。 我在上一条消息中附上了关于这两个问题的控制台输出的屏幕截图。

    您能 建议我还应检查什么或尝试解决此问题吗?

    提前感谢您的支持。

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

    尊敬的 Deepan:

    对延迟深表歉意。 还可以尝试其他一些操作:

    • 您能否查看映射文件以查看 printf 调用使用哪个库?
    • 您能否尝试在不进行优化的情况下构建项目? 高优化级别可以删除或内联 printf 调用。

    此致、

    Delaney  

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

    您好、

    对延迟的回复表示歉意。

    当前用于 printf 调用的库是 rts2800_fpu32_eabi.lib。 我还尝试在禁用优化的情况下构建工程,但问题仍然存在 — 浮点值仍然无法正确打印。


    您能否提出我可以尝试解决此问题的建议?

    提前感谢您的支持。

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

    尊敬的 Deepan:

    让我在下周回复您。

    此致、

    Delaney

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

    尊敬的 Deepan:

    只是为了更新,我仍然没有机会为你更多地研究这个。 我的目标是下周初做出回应。 对延迟深表歉意。

    此致、

    Delaney

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

    尊敬的 Deepan:

    只是为了更新,我还没有时间研究这个,但会更新时,我做.

    此致、

    Delaney

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

    尊敬的 TI 团队:

    感谢您的更新。 我们理解、研究这一问题的时间有限;但是、我们希望有任何机会在我们等待解决的时候进一步取得进展。 期待您的更新。

    提前感谢您的支持。

    此致、  
    Deepan V.

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

    尊敬的 Deepan:

    明白了、我明天会尽量找时间来研究这个问题。 感谢您的耐心。

    此致、

    Delaney

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

    尊敬的 Deepan:

    再次为延误道歉。 我能够让 printf() 和 snprintf() 在我的设置中使用浮点数。 我必须将栈大小和堆大小增加很多、当前值如下:

    这还需要对链接器 cmd 文件进行一些修改、以便为放置堆和栈的段分配更多的存储器。 下面是我的代码、请在您的设置中尝试此操作、如果您遇到任何问题、请告诉我。  

            char temparray[16];
            float value = 3.14159265f;
            int length = snprintf(temparray, sizeof(temparray), " %.04f", value);
            printf("PIE VALUE: %f\n", value);

    此致、

    Delaney

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

    您好、

    我已经尝试使用您建议的相同设置运行代码。

    1. 我按照您的建议更新了堆和堆栈大小(附了屏幕截图)。
    2. 我还增加了链接器命令文件中的内存分配(如果方法不正确,请纠正我的错误)。

    即使应用了这些更改、我仍然无法在控制台中看到打印的浮点值。

    您能帮助我了解可能还缺少哪些内容吗?

    提前感谢您的支持。  

    此致、  
    Deepan

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

    尊敬的 Deepan:

    下面是我使用的项目:

    e2e.ti.com/.../5518.empty_5F00_driverlib_5F00_project.zip

    您能否试用一下、告诉我它是否适用于您的设置?

    此致、

    Delaney

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

    您好、

    感谢您共享项目文件。 我将尝试进行设置并告诉您。

    此致、  

    Deepan

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

    您好、

    我测试了您共享的工程、在使用 CPU_RAM 构建配置时、它可以正常工作。

    但是、当我切换到 CPU_FLASH (我需要使用这个来将构建刷写到电路板上)时、在调试期间仍然遇到与之前相同的问题。

      

    我还使用自己的代码尝试了相同的设置、其中通过 UART 发送浮点值。 问题也是相同的:在 CPU_RAM 中、在调试期间正确接收数据、但在 CPU_FLASH 中根本不会接收到数据、即使在刷写和调试构建时也是如此。 我们使用 Tera Term 来监控 UART 输出。

    如果您对 RAM 和闪存编译版本之间造成这种差异的原因有任何建议、请告诉我。

    提前感谢您的支持。

    此致、
    Deepan

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

    尊敬的 Deepan:

    这是奇怪的,让我自己测试闪存构建,并回到你。 我假设闪存构建在某种程度上仍然没有分配足够的堆或栈空间。

    此致、

    Delaney

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

    您好、

    我只是想跟进闪存构建测试。 当您有机会时、请告诉我是否有任何更新。

    此致、

    Deepan

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

    尊敬的 Deepan:

    很遗憾、我仍然没有机会 自行试用闪存构建。 如果您尝试分配更多的堆或栈空间、它可以解决问题吗?

    此致、

    Delaney

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

    您好、

    我尝试在工程属性中增加堆和栈大小、还修改了闪存链接器 .cmd 文件。 但是、尽管进行了这些更改、我仍然无法在控制台中正确打印浮点值。

    我附上了输出屏幕截图:

    您能否告诉我、如果还有其他步骤或配置、我应该尝试解决此问题?

    提前感谢您的支持。

    此致、

    Deepan

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

    您好、

    跟进我上一篇关于 printf 闪存构建中浮点问题的文章。

    我想检查是否有任何关于我可以尝试解决此问题的其他配置的进一步建议或建议。 以及 能否请您确认在末尾使用闪存构建时是否能够在控制台中正确打印浮点值?

    提前感谢您的支持。

    此致、

    Deepan 五世

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

    尊敬的 Deepan:

    这方面的专家是不在办公室,直到 7 月 29 日,请期待一个延迟的答复,并非常感谢你的耐心

    此致、

    彼得