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/TI-RTOS:阻塞模式 UART 返回零长度缓冲器

Guru**** 2553260 points
Other Parts Discussed in Thread: MSP430F5259

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/593920/rtos-ti-rtos-blocking-mode-uart-return-zero-length-buffer

器件型号:TI-RTOS

工具/软件:TI-RTOS

您好!  

我按如下方式初始化 UART:

uartParams.writeDataMode = UART_DATA_BINARY;//按原样传输数据
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_NEWLINE;//读取始终基于文本
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 115200;
uartParams.parityType = UART_PAR_NONE;
uartParams.stopbits = UART_STOP_ONE;
uartParams.readMode = UART_MODE_BLOCKING;//有一个单独的任务
uartParams.readTimeout = UART_WAIT_FOREVER;
uartParams.writeMode = UART_MODE_BLOCKING;
uartParams.writeTimeout = UART_WAIT_FOREVE;

uartHandle = UART_OPEN (SR_UART_BLE、uartParams);

然后在任务中、我使用  

while (1){
len = UART_read (uartHandle、uartReadBuff、sizeof (uartReadBuff));
if (len>0)&&(readlen < sizeof (uartReadBuff)-1))}{
//执行操作
}
否则{
system_printf ("UART_Read 问题、len=%d\n"、len);
System_flush();
}

每次我都会得到一个零 len 缓冲器...

我希望最小长度为1个字符(仅限换行符)。 它怎么能为零?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是什么器件? 您使用的目标软件(和版本)是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MSP430F5259
    TI RTOS 2.20.0.06
    MSPWare 3.70.0.05
    XDC 3.32.0.06
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我注意到您使用的是具有 UART_RETURE_NEWLINE 的 readDataMode = UART_DATA_BINARY。

    uartParams.readDataMode = UART_DATA_binary;
    uartParams.readReturnMode = UART_RETURE_NEWLINE; 

    根据文档、UART_RETURE_NEWLINE 仅适用于 UART_DATA_TEXT。

    您可以通过 TI Resource Explorer (CCS 中的 View 菜单下或通过 dev.ti.com/tirex 在线查看)查看文档

    可在此处找到驱动程序文档的直接链接:

    此致、

    米歇尔

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

    谢谢 Michel。

    奇怪的是、用户指南中没有记录它...

    编辑:  

    在更改为文本模式后、我仍会以低得多的速率收到零长度消息

    编辑2:

    每隔63.8秒就会定期接收零长度消息...

    有什么想法?

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

    遗憾的是、我不知道为什么您在没有读取数据时会返回、但这是什么问题?
    如果在读取操作期间发生错误、驱动程序将返回 UART_ERROR。 因此、根据驱动器、长度为零不会被视为实际误差

    希望 TI 的某个人能够解释为什么该函数尽管设置为 UART_WAIT_INVLETING、但仍会从阻塞调用返回。

    请注意:
    如果您编辑了答案、则不会发送通知。 如果您有其他信息需要提供、最好在主题中添加答复。

    此致、
    米歇尔