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.

[参考译文] LAUNCHXL-CC2640R2:连接可阻止应用多角色中的事件挂起

Guru**** 2589810 points
Other Parts Discussed in Thread: CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/607387/launchxl-cc2640r2-connection-blocks-the-event-pend-in-the-application-multi-role

器件型号:LAUNCHXL-CC2640R2
主题中讨论的其他器件:CC2640R2F

大家好、

我将使用 multi_role 示例作为项目基础、在 CC2640R2F Launchpad 上开发一个项目。 我添加了 sdiTask、因为我想使用 SPP 配置文件。 我还添加了 UART 消息的队列。 我有两个可以连接的大问题:

1.当我使用双扫描仪应用程序将我的设备与 Android 或 IOS 设备连接时,连接会在30秒后中断,无论是否有消息交换,都是如此。

2.在连接期间、multi_role 任务函数似乎被阻止:我是说、我在 UART 终端上编写一条消息以通过蓝牙方式发送、但在断开连接之前不会发布 UART 队列的事件。 此事件由"SDITASK_registerIncomingRXEventAppCB (multi_role_enqueueUARTMsg)"调用的 multi_role_enqueuartMessage 设置。 相反、如果我将一条消息从手机写入设备、它就可以正常工作、并且我可以在终端上看到该消息。  

我不理解这些制造行为

有人可以帮帮我吗? 紧急

谢谢你

Moniaga

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

    在第1种情况下、似乎您遇到了超时-可能是控制过程或 ATT 超时。

    如果你有一个嗅探器、原因将会非常直接-你能得到一个吗?

    对于第2种情况、我会将此情况转发给我们的 SDI/SPPBLE 专家、我不确定相应的行为是什么。

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

    我能看到 multi_role_enqueueUartMessage()函数的实现吗? 我假设您创建了一个单独的 sdiTask 吗? 您能否在调试中使用 ROV 检查任务堆栈大小: software-dl.ti.com/.../gen-debugging.html


    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    这是我的实现方式:

    void multi_role_enqueueUARTMsg (uint8_t 事件、uint8_t *数据、uint8_t len)

    mrUARTEvt_t *pMsg;
    queueRec_t *精密;

    //创建消息的动态指针。
    if (pMsg = iCall_malloc (sizeof (mrUARTEvt_t))))

    pMsg->EVENT = EVENT;
    memcpy(pMsg->data、data、len);
    pMsg->length = len;

    //将消息排队。
    if (精密= iCall_malloc (sizeof (queueRec_t)))) //SIM-BLE:此部件不存在... 现在可能已经有所改进

    精密->pData =(uint8*) pMsg;
    //这是一个原子操作
    Queue_enqueue (appUARTMsgQueue、&precense->_elem);
    EVENT_POST (synctEvent、MR_UART_queue_EVT);

    其他

    调试("appUARTMsgQueue 错误");
    iCall_free (pMsg);





    我使用了 CCS 的 ROV 工具,我发现即使 main.c 中有 SDITASK_createTask(),SDI_TASK 也不会被识别为任务 这是怎么可能的? 我使用了 simplelink_cc2640r2_sdk_1_35中存在的 SDI 文件夹。 我将此文件夹复制到我的应用项目中,在 main.c 中添加了预定义符号 SDI_USE_UART 和 SDITASK_createTask() 但这并不是一项新任务。
    我该怎么做?

    谢谢