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.

[参考译文] RTOS/TM4C123GH6PM:桥接两个 UART 接口

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/614628/rtos-tm4c123gh6pm-bridge-two-uart-interfaces

器件型号:TM4C123GH6PM

工具/软件:TI-RTOS

您好!

我只是想知道(再次是:-))是否有任何 RTOS 工具将 UART 接口隧道连接到另一个。 现在、我将在 UART_MODE_BLOCKING 模式下使用不同的线程和 UART_READ 函数来处理此问题。 我可以使用 UART_MODE_CALLACK 来防止阻塞线程的处理、如果我想中断阻塞读取、实际上必须执行的操作。 这是否可以通过预防或简化的方法来实现?

\edit:将线程标题从"隧道"更改为"桥接"、但保留了它的描述

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

    我不清楚这里的隧道是什么意思。 我通常了解隧道(例如、通过不同的协议发送一个协议)、但看不到您尝试执行的操作。 您能提供更多详细信息吗? 例如、当您说"将 UART 接口隧道连接到另一个接口"时、"接口"在这里的明确含义是什么...特定的 UART 外设(例如 TM4C12x 器件上的 UART7)? 还有什么是"另一个"...另一个 UART 或另一个外设。

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

    您好 Todd、

    我承认我的问题有点不清楚。 需要澄清的是:我只想将一个 UART 输入和输出传递给另一个 UART、反之亦然、例如、我的 TM4C12x 器件上的 UART 0到 UART 1。 因此、上述两条 UART 线路上的两位参与者可以直接通过 TM4C12x "查看"彼此、但我能够"监听"传输的数据包。 我想你可以说一个链接、但我在这里缺少正确的术语。

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

    从 RTOS 的角度来看,如果目标处理的速度与传入速度相同或更快,最简单的解决方案是为从 Rx FIFO 缓冲区读取的每个字节添加一个 UARTCharPutNonBlocking ()。 这可以被拆为一个可能只有3-4个时钟周期的指令... (用野生猜测来说明它真的很简单)

    两个 UART 的运行速度是否相同? 如果输出速度较慢、则需要缓冲区(如果接收到可存储和转发的零星数据包)、当然、如果传入是连续的、则情况将会崩溃。

    如果您希望在运行时启用/禁用此隧道、并且希望为接收到的每个字节避免一个决策点、则可以测试写入两个不同的 ISR: 一个将字节转发、另一个仅捕获字节的字节转发到存储器、并在通道设置为开/关时注册足够的字节。 这可能也适用于 RTOS 环境。

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

    感谢您的详细回答、非常感谢。

    用于 UART 处理的 RTOS 驱动程序具有与低级实现类似的处理:您可以使用非阻塞行为来建立它。 由于在我的示例中、两个都以相同的速度运行(我不考虑速度不同的情况)、我不必考虑缓冲。 此外、μ µC 有足够的时间在下一条消息到达之前完成其任务。

    在我当前的实施中、我所做的几乎与您描述的内容相同:两个不同的任务处理两个数据方向。 它可以工作、但未经过全面测试。 因此、我想知道 RTOS 是否可以提供任何方法来自行处理此操作。

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

    不用担心!

    [引用 user="Volker Weber"]我想知道,RTOS 是否可以提供任何方法来自行处理此操作。

    我不会期待这种情况。 无论 RTOS 驱动程序执行什么操作、它们只是一系列程序行。 我知道 TI-RTOS 有一些预制解决方案、其中包括具有缓冲器甚至 DMA 的 UART Rx/Tx、但 ROM 中没有什么神奇之处。

    如果您没有使用"逐行" Tivaware 命令来管理 UART、而是使用更高级别的 TI-RTOS 库、那么您是否无法打开源代码并查看? 此外、还有与 TI-RTOS 的"Driverlib 用户指南"等效的内容、现有函数为(我假设)全部列出... 你怎么看?

    布鲁诺

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

    您好、Bruno、

    再次感谢。 我查看了实现方案、但未找到有关此功能的提示。 也不研究文档。 对于用户指南的完整性、我总是有一点不能确定、因此我在这里开始了我的查询。 无论如何、我将继续使用我的实施解决方案、因为我能够完全测试它。 此外、我将您的最后一个答案标记为解决方案。

    再说一次、很棒的地方。

    Volker

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

    根据其他人在这里的相关建议、您可能希望避免为此目的使用"隧道"一词、以便您的团队在未来不会感到困惑。 关于面额的选择... 可能是"端口转发"?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bruno、

    是的、我已经在我的文档中对其进行了更改、并对其进行了重述。 但是、我对其他术语不满意、例如我的"链接"建议。 也许是一座桥?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然、我喜欢"桥梁"。
    )

    如果在今天结束之前没有人对其进行大声喊叫、也许您应该编辑主题以使用它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    完成。

    从流程和数据流来看、术语"pipe"也适用于此处。 尽管如此,我现在仍会选择“桥梁”(-:

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

    从改进后的描述中删除。 它不会内置到驱动程序中、但 RTOS 将具有支持此功能的 IPC 基元(PIPE、FIFO 或队列)。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "隧道"更好(可以理解)描述了"从泽西岛到纽约"的方法-何时(不)桥接...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢再次确认、确实也感谢:TI RTOS 提供了一些实用的工具、这些工具可以很容易地处理裸片数据流。