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/EK-TM4C123GXL:使用多个时钟时、USB 将数据缓冲

Guru**** 2465700 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/662203/rtos-ek-tm4c123gxl-usb-buffering-the-data-when-multiple-clocks-are-used

器件型号:EK-TM4C123GXL

工具/软件:TI-RTOS

您好!

我正在为使用 TM4C123G 微控制器多个 UART (3个 UART 通道)从3个模块收集数据并使用 USB 传输数据的单元进行编码。 传感器模块以每包20字节(每秒50个数据包)的形式以1Kbps 的速率(3个模块总共3Kbps)单独传输数据。 我将使用两个时钟和一个回调函数、该回调函数在每4毫秒和每9毫秒中断一次(例如)。 现在、当我通过 USB 推送数据时、它会连续缓冲相同的数据。 我是否可以知道为什么会发生这种情况? 我假设访问数据的速度比我想象的快得多、但对于1Kbps、我可以配置的时钟为每毫秒一次。 我请求一些人来帮助我、我还将代码与此线程连接起来(我已在 USB 串行器件示例中进行了更改)。  

提前感谢。  

此致、

镍薄型

e2e.ti.com/.../new-1.c

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

    gpioButtonFxn 和 gpioButtonFxn1任务正在运行、然后终止(因为它们已退出函数)。 因此、uart1和 uart4只被读取一次。

    注意:我也要更改函数的名称。 gpioButtonFxn 是我们用于在 Hwi 上下文中调用的 GPIO 回调的名称。 这有点令人困惑。 我会使用 uart1Receiver 或类似的名称。

    BTW...传递到 XXX_OPEN、XXX_CREATE 和 XXX_STAC构建 的参数不需要持久。 因此可以重复使用。 这将使您的应用变得更小、更易于阅读。 例如

    静态空 UART_MULTIPLE_INIT()

    //创建数据处理关闭的 UART。
    UART_PARAMS_INIT (uartParams);
    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readReturnMode = UART_return_full;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudrate = 115200;
    UART = UART_OPEN (Board_UART0、uartParams);

    if (UART == NULL){
    System_printf ("未打开");
    system_flush();
    //打开用户 LED
    GPIO_WRITE (Board_LED0、Board_LED_ON);
    System_abort ("打开 UART 时出错");


    //重复使用上面设置的 uartParams。
    uart1 = UART_OPEN (Board_UART1、uartParams);


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

    感谢您的建议、我对回调函数进行了必要的更改。 我必须了解回调仅运行一次的事实、但我打算如何定期运行或将其放入循环中?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只需将其放入一个循环中。

    void gpioButtonFxn (UArg0)

    while (1){
    Semaphore_pend (sem1Serial、BIOS_wait_forever);
    //GPIO_WRITE (Board_LED0、1);
    RxBytes1 = UART_Read (uart1、b、sizeof (b)));