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.

[参考译文] TM4C1290NCPDT:USBBufferRead

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/891417/tm4c1290ncpdt-usbbufferread

器件型号:TM4C1290NCPDT

我正在尝试了解 USBBufferRead 函数的用法。 就在那里

这样设置 ulRead 就像 MAX_USB_CDC_PACKE_SIZE (64)一样大?

ulRead = USBBufferRead (&g_psRxBuffer[0]、&m_ucUSBInputBuffer[0]、MAX_USB_CDC_PACKET_SIZE);

UART_buffer_size 设置为256。 128名已被试用、ulRead 分别为8或4。

免费 RTOS API 可为 m_ucUSBInputBuffer 动态地分配内存。

但是、64字节块中的最后几个字节是非零字符。 这是领先的

应用程序中的一些乱码打印。

如果在64字节序列中对这些字符进行零的方法有所不同、但不是

增加 ulRead、请告诉我。

谢谢、

Priya

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

    您好、Priya、

    USBBufferRead 使用以下段来确定读取量:

    //
    //缓冲区中有多少数据?
    //
    ui32Avail = USBRingBufUsed(&psPrivate->sRingBuf);
    
    //
    //确定实际可以读取的字节数。
    //
    ui32Read =(ui32Avail < ui32Length)? ui32Avail:ui32Length; 

    根据您的描述、似乎并非所有数据都可供读取。

    您要发送多少数据、以及如何发送?

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

    感谢你的答复。  

    数据从 USB 接收。  

    ulRead = USBBufferRead (&g_psRxBuffer[0]、&m_ucUSBInputBuffer[0]、MAX_USB_CDC_PACKET_SIZE);

    ulRead 为4。

    UART_buffer_size 128

    这是外部处理器通过 USB 发送数据的方式吗?

    如果这不能改变、在这4个字节非零之后、存储器位置是否可以执行任何操作?

    64位 USB 数据包大小的最后4个字节将打印为 Tiva C 的乱码数据。与 Stellaris 硬件相同的设置没有最后4个乱码字节

    Priya

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

    您好、Priya、

    如果最后一个字节打印成乱码、我认为 USB 应用程序不能正确发送或处理接收数据。 首先、如果您认为在这方面可能会出现问题、我建议尝试查看 USB 线路以查看是否正在传输乱码数据 如果您知道数据还可以(来自 PC 等已知来源)、则需要检查应用程序对接收到的数据的处理情况、以确保您不会尝试打印比接收到的字节更多的字节。

    在确保某些存储器位置为零的情况下、请查看缓冲区的使用情况和初始化情况。 如果在任何时候填充或未初始化为零、这是一个问题、那么您可以将其清零。 但是输出应该基于接收到的字节、如果 USB 接口发送的字节不超过60字节、那么您应该只得到接收到60字节的指示、然后相应地调整输出。