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:如何通过 cc2640#39;s UART 发送/接收超过32个字节?

Guru**** 2587365 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/594944/rtos-how-to-send-receive-more-then-32-bytes-through-cc2640-s-uart

工具/软件:TI-RTOS

我的 tirtos 版本是 tirtos_simplelink_2_13_00_06、我使用 NPI_ti_UART 作为参考、问题是

我无法使用以下 API 函数发送超过32个字节的数据

NPITLUT_writeTransport ()

有人对此问题有任何了解?

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

    此 API 不能直接从应用程序调用。 通常、NPI API 被设计为从 NPI 任务调用。

    您可以使用 NPITEK_sendToHost()对 NPI 任务消息排队。

    但是、如果您确实需要所有这些复杂性、我建议您直接从应用程序设置和调用驱动程序。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好  

    有关在 CC26xx 的 UART 上读取/写入数据的示例代码

    uint8_t UART_Tx = 0;
    uint8_t UART_Rx = 0;
    void FIOT_UART_Serial_Rx_CB (UART_Handle iHandle、void * OData、size_t count)
    {
    //!*********
    //!将 UART_Rx_Buf 复制到 UART_Tx_Buf
    //!*********
    UART_Tx = UART_Rx;
    //!*********
    //!将任务唤醒以处理
    //!*********
    Semaphore_post (UART_hSem);
    }
    /*********
    *职能-任务
    /*
    !
    秘书长的报告
    *@fn void FIOT_UART_CreateTask (void)
    *
    *@协议的简短任务创建函数
    *
    @param None
    *
    @return None
    *
    ******** /
    void FIOT UART_CreateTask (void)
    {
    Task_Params TaskParams;
    //!*********
    //!配置任务
    //!*********
    Task_Params_init (&TaskParams);
    TaskParams.stack= UART_TaskStack;
    TaskParams.STACKSIZE= UART_TASK_STACK_SIZE;
    TaskParams.priority= UART_TASK_priority;
    
    Task_con构(&UART_TaskStructure, FIOT_UART_TaskFxn、&TaskParams、NULL);
    }
    /*!
    秘书长的报告
    *@fn void FIOT_UART_InitTask (void)
    *
    *@简要利用 UART 层
    *
    *@param None
    *
    @return None
    *
    ******** /
    void FIOT_UART_InitTask (void)
    {
    //!*********
    //!初始化 UART
    //!*********
    UART_Params uParams;
    
    UART_Params_init (uParams);
    
    uParams.writeDataMode = UART_DATA_binary;
    uParams.readDataMode = UART_DATA_binary;
    uParams.readReturnMode = UART_return_full;
    uParams.readMode = UART_MODE_CALLBACK;
    uParams.readCallback = FIOT_UART_Serial_Rx_CB;
    
    UART_uHandle = UART_OPEN (Board_UART、&uParams);
    //!*********
    //!利用信标
    //!*********
    Semaphore_Params sParams;
    Semaphore_Params_init (&sParams);
    sParams.mode = Semaphore_Mode_binary;
    
    Semaphore_construction (&UART_sSem、0、 sParams);
    UART_hSem = Semaphore_handle (&UART_sSem);
    }
    /*!
    秘书长的报告
    *@fn void FIOT_UART_TaskFxn (UARg a0、UARg A1)
    *
    @协议的简短应用任务入口点。
    *
    *@param a0、A1 -未使用。
    *
    *@无返回
    *
    ******** /
    void FIOT UART_TaskFxn (UArg0、UArg1)
    {
    //!*************
    //!初始化 UART 层
    //!*********
    FIOT_UART_InitTask ();
    //!*********
    //!UART 层的循环
    //!*********
    对于(;;)
    {
    //!*********
    //!refesh 以读取新数据
    //!*********
    UART_READ (UART_uHandle、&UART_Rx、1);
    
    Semaphore_pend (UART_hSem、BIOS_wait_forever);
    //!*********
    //!Echo 数据
    //!*********
    UART_WRITE (UART_uHandle、&UART_Tx、1);
    }
    } 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sean2

    感谢您的回复、很抱歉耽误您的回复。
    是的,你是对的,但我认为即使我们使用来自 NPI 任务的此 API,32字节的限制仍然存在,所以我的观点是我们如何解决
    这个问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Luu

    谢谢、您的示例似乎永远不会像我所提到的那样遇到32字节限制问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、user4070599、

    是的。 您可以设置 Rx 缓冲器的长度。 如果您确切知道数据长度、则可以在 UART_READ (UART_uHandle、&UART_Rx、1)中设置 Rx 回调的长度;