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/MSP432P401R:一次读取1个UART字节的最有效方式是什么?

Guru**** 2610575 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/662145/rtos-msp432p401r-what-is-the-most-efficient-way-to-read-1-uart-byte-at-a-time

部件号:MSP432P401R

工具/软件:TI-RTOS

您好,

我正在回调模式下使用TI驱动程序API UART_READ。 我需要一次读取1个字节,因为我的协议支持可变长度消息。 API文档中有一条警告,在  UART_MODE_callback中,不要从其自身的回调函数调用UART_READ()。 所以,我想在回调函数中发布一个事件,并在事件处理程序中调用UART_READ。 是否有更有效的方法来完成此操作?

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

    您可以使用一个向信号量表示的任务来执行此操作,如下所示:

    -让任务A成为其循环中只有两条语句的任务:

    while (true){

    UART_READ (buf等);

    semaphore_pend(SEM_myUART, BIOS_WAY_Forever);

    }

    然后,UART回调只需在信号量返回前向信号量发送,如下所示:

    void my_UART_callback(........ ){

    。。

    semaphore_post(SEM_myUART);

    }

    设置任务优先级取决于您的应用程序。

    现在,您可以确定任务最初是调用UART_READ(),在上一个任务完成后,接着调用另一个。 我希望这能有所帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Mike:
    我担心从发送信号,任务切换到重新启用UART接收器的开销可能会导致UART溢出情况。 您是否会知道在读取回调退出后是否有办法保持UART接收器处于启用状态?
    谢谢!
    Jeffrey
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    变量长度消息是否以非常特定的字符(例如 ASCII 10/13)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但不幸的是,它没有。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我个人修改了我最近参与的一个项目的驱动程序。 在我的情况下,这是最好的解决方案。
    除此之外,我不确定是否有任何方法可以避免开销和任务切换。