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/TM4C1230H6PM:在 UART1的 TI RTOS 2.16中实现/使用硬件流控制

Guru**** 2540720 points
Other Parts Discussed in Thread: TM4C1230H6PM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/566041/rtos-tm4c1230h6pm-implementing-using-hardware-flow-control-in-ti-rtos-2-16-on-uart1

器件型号:TM4C1230H6PM

工具/软件:TI-RTOS

我有一个带有 TM4C1230H6PM 的定制板、并且我已将 GSM 调制解调器连接到 UART1 (Tx、Rx、CTS 和 RTS)。

GSM 调制解调器有一些命令、我们在1-3秒后得到响应。 在此期间、我希望处理器运行不同的任务、并且仅在收到响应后才处理响应。 (非阻塞)

此项目中使用了 TI RTOS 2.16、目前我们使用 UART_READ()函数。 但是、此函数需要读取的字节数、在我们的情况下、每次发送命令时它都会有所不同。

理想情况下、我希望控制器向调制解调器发送命令、继续处理不同的任务、并仅在调制解调器响应后再次返回。 我相信这可以通过使用 CTS 和 RTS 来实现。 但我无法找到任何方法来将 CTS/RTS 与 TI RTOS 集成以实现我的目标。

我在这里遗漏了什么、或者唯一的方法是实现我自己的 UART 驱动程序并通过 CTS 和 RTS 中断?

谢谢
Shashank

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

    您好、Shashankk、

    我知道 TivaWare 支持 UART 的流控制、但我不确定 TI-RTOS 驱动程序是否支持流控制。

    没有流控制和 TI-RTOS 驱动器的合适解决方案。

    对 UART 使用回调模式、并一次读取一个字符。 在回调中、您可以一次处理每个字节、或将数据推送到主任务进行分析。

    下面是将数据推送到处理任务的伪代码

    // UART 任务
    空 YourTask (UARg arg0、UARg arg1)
    {
    //1-初始化 UART
    /2-在读取回调模式下配置 UART
    //3-执行第一次读取(长度为1字节)
    
    while (1)
    {
    //等待每个字节
    Sempahore_pend (uartSemaphore);
    
    //在此处处理每个字节
    }
    //
    
    读取回调
    void UART_Callback_Read (UART_Handle handle、void * buffer、int size)
    {
    //将数据存储在某个位置进行处理
    
    //通知主任务
    semaphore_post (uartSemaphore);
    
    //再次读取(1字节长度)
    UART_read ();
    } 

    但愿这对您有所帮助

    米歇尔

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

    您好、Shashankk、

    用于 Tiva 器件的 UART 驱动程序不支持硬件流控制(RTS/CTS)。  您需要修改驱动程序才能获取此驱动程序。   

    但是、正如 Michel 所建议的、您可能能够减少每次读取的请求。  米歇尔…的一个小缺点 也许您可以首先请求最小长度响应的长度。  接收到该信号后、可以选择读取响应的其余部分。  如果对于响应的第一部分,您无法确定需要多少额外数据,则可能必须使用单字节读取,直到响应完成。

    希望这对您有所帮助。

    此致、
    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有一个建议的答案、由于此主题在一周内未激活、建议的答案被标记为验证。 请随意选择"拒绝回答"按钮、并回复更多详细信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    根据 Michel Solecki 的建议、我实现了一次接收一个字节数据的逻辑。 我还实现了将指针复位到缓冲器的逻辑。

    从 UART 读取了大约几个字节后、任务堆栈溢出。

    收到预期的响应后、我还将呼叫他的 UART readCancel。

    如何确保堆栈不会溢出?

    谢谢、
    Shashank

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

    您好、Shashankk、

    您能否向我们展示一下代码、以便我们了解您所做的哪些可能会导致堆栈溢出的工作?

    此致、

    米歇尔