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.

[参考译文] LP-MSPM0G3507:以循环方式存储数据的串行实现问题。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1331889/lp-mspm0g3507-serial-implementation-issue-of-storing-data-in-circular-manner

器件型号:LP-MSPM0G3507
主题中讨论的其他器件:MSPM0G3507

您好!

我正在使用 mspm0g3507控制器、并尝试使用可用的示例代码通过 UART 接口实现串行输入输出。 但我无法存储来自 RX 缓冲区零索引的新数据。 它始终以循环方式存储数据、这意味着如果我将 RX 缓冲区大小设置为20并仅从串行控制台中发送10个字节、那么我收到10个字节、但之后如果我再次发送15个字节、则它将从索引10开始存储到 RX 缓冲区中。 (不来自索引零)、然后以循环方式填充缓冲区。  是否有任何其他实现可以每次从零索引存储新数据。

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

    我想我知道你在寻找什么,我会试着和你谈论它。

    由于生成者(中断或 DMA)正在与使用者(前台代码)竞争变量、所以队列的下一个空闲索引(通常被称为"尾")被复位为0 (基于某些标准)的循环缓冲器是一个对竞争条件的邀请。 如果生成者是一个中断、则锁定机制可能很有效、但如果生成者是 DMA、您就无法进行太多控制;在任何情况下、都需要额外成本。

    我进一步认为,重置尾指数的好处是非常小。

    我建议您继续使用现有的方法、只让调试器显示头尾指标以及缓冲器。

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

    布鲁斯:

    似乎他想远离振铃缓冲区。

    操作:

    只需这样做、留出一个缓冲区、并在每次获得一个字符时将其递增。

    在您的主例程中、您可以定期检查是否有一系列字符并将其重置。

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

    当然、这要由最初的海报决定。

    但是线性缓冲器也会发生同样的竞争、除非通信是严格的半双工通信、即接收器始终知道线路是否处于"空闲"状态。