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.

[参考译文] TMDSCNCD28388D:SCI 在下一次调用之前不输出最后一个字符

Guru**** 2390755 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1412842/tmdscncd28388d-sci-not-outputting-last-character-until-next-call

器件型号:TMDSCNCD28388D

工具与软件:

嗨、

我正在使用类似的自定义 printf 函数在 sci 上进行打印。 在较高层次上、我迭代一个字符数组并使用 SCI_writeCharNonBlocking()打印每个字符。 我遇到这样的问题:直到下一次调用该函数时才写入最后一个字符。 假设我正在尝试打印"Hello World"、逻辑分析仪上显示的是"Hello Worl"、然后下次我调用该函数时、它会打印"Hello Worl"。 我通过调用一个函数来解决这个问题、该函数会在字符串后打印一个空格、以便空格是未写入的字符。

我知道有一个更好的方法来解决这个问题,但似乎不能弄清楚。 有什么想法,为什么会发生这种情况,或者更好的方法来做到这一点,没有字符丢失?  

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

    尊敬的 Grant:

    您是否使用调试器单步执行代码以测试此情况? 它听起来不像你有任何字符丢失,而是他们被发送比预期的晚。 我还可以自己调试时看到这一点;调试器可能会干扰每个数据包发送时的时序。 您为 FREESOFT 位配置了什么设置?

    您是否希望在未连接 JTAG 时使用这些消息进行调试? 如果是、在这种情况下应该不会出现此问题。

    另请注意、此 SCI_writeCharNonBlocking()函数将一次向 TX 缓冲区写入一个字符、而不检查缓冲区中的数据、因此也可能会覆盖数据。 我建议使用阻断功能、如SCI_writeCharBlockingNonFIFO()SCI_writeCharBlockingFIFO()

    此致、

    Delaney

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

    感谢您发送编修。 我使用调试器运行它、并且 SCIPRI 寄存器设置为0。 将其设置为0x08可实现我所期望的运行方式。 请注意、在没有调试器的情况下运行时、这不会是问题。  

    另外、关于阻塞函数的相关知识也很有用。 我将实现这些功能、使其不会覆盖数据。  

    此致!

    授予