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.

[参考译文] CC2340R5:蓝牙会导致线程无法正常工作

Guru**** 1821780 points
Other Parts Discussed in Thread: CC2340R5, BLE-STACK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1430492/cc2340r5-bluetooth-causes-thread-not-to-work

器件型号:CC2340R5
Thread 中讨论的其他器件: BLE-STACK

工具与软件:

CCS 版本: 12.7.0.00007.

SDK 版本: simplelink_lowpower_f3_sdk_7_40_00_64

项目: basic_ble_LP_EM_CC2340R5_freertos_ticlang

我创建一个单独的线程的工作的蓝牙,并使用 while (1)让它永远运行,我找到一个问题,当我调用功能的蓝牙.  
螺纹消失没有明显的原因。 将断点放置在任何位置都不会产生中断。 而且我发现、每次 Thread 消失而不工作时、就是调用蓝牙函数后。

我的过程是在 CC2340启动后开始扫描。 如果有扫描、则会建立连接。 否则、请重新启动扫描。

从第二张图片中可以看到、调试模式正在运行、断点已设置、但不会被中断。

下面是我的代码:



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

    您好!

    感谢您联系我们。 我建议使用8.10作为 SDK、因为它有一些其他改进、修复和新功能。 我们将调查您看到的行为、并尽快与您联系。

    此致、

    1月

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

    您好、Jan

    测试后发现、如果连接不成功、但我调用了断开功能、似乎会引起问题。 或者、如果我开始扫描并在暂停扫描之前再次调用开始扫描、则似乎存在问题。 我想确认这是否导致我的线程出现问题?

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

    Ryan、您好!

    我可以问您如何验证是否已建立连接或断开连接? 您使用的是由处理程序回调函数触发的 BLEAPPUTIL_LINK_ISTERNATED_EVENT 还是 BLEAPPUTIL_LINK_Terminated_EVENT?

    BR.

    David。

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

    您好、David

    我测试并发现、当我调用 BLEAppUtil_invokeFunctionNoData 来使线程消失时、TTT 将不等于11、这意味着它在执行 BLEAppUtil_enqueueMsg 后崩溃。

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

    我认为它与连接无关、因为当我调用"开始扫描"和"停止扫描"时会出现此问题。

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

    Ryan、您好!

    我认为问题可能是我们没有在 iCall ()中注册新线程。 ICall BLE-Stack 服务用作 BLE-Stack API 的应用接口。 当应用程序在内部调用 BLE-Stack API 时、ICall 模块会将命令路由到堆栈、并在适当时将消息从堆栈路由到应用程序。 请查看用户指南中关于如何 ICall 注册 task:https://software-dl.ti.com/simplelink/esd/simplelink_lowpower_f3_sdk/8.10.00.55/exports/docs/ble5stack/ble_user_guide/html/freertos/tasks.html?highlight=icall%20register#creating-additional-icall-enabled-tasks 的这一部分。 但是如果情况不是这样、我预计会出现不同的错误、例如 ICall 中止。

    BR.

    David。

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

    您好、David

    在今天的测试之后、我发现这似乎是因为 UART_writeMode 设置为阻塞模式。 在调用大多数蓝牙函数之前、我将使用 UART 传输扫描或连接等的当前阶段 如果我在调用蓝牙后立即调用 UART2_WRITE、则耳塞的函数似乎会引起问题。 我测试了将 writeMode 更改为非阻塞模式。 到目前为止、测试运行正常。 此部件能否帮助我确认?  这是否与您所说的不在 iCall()中注册新线程有关?

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

    Ryan、您好!

    好的、我明白了。 您能否请看一下该主题中的最后一个答案、我认为这些答案可以作为测试(与任务优先级相关)的良好起点:https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1405164/lp-em-cc2340r5-can-uart2_write-and-uart2_read-not-be-used-in-the-same-task/5417015#5417015。此外、如果使用非阻塞模式、请确保您的应用具有正确的缓冲区大小、我想您现在已经认为它按预期工作了。

    如果问题与非寄存器任务有关、我预计会出现与 ICall 中止相关的错误。

    BR、

    David。

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

    尊敬的 David:

    1.根据这篇文章,你是说 UART 中断优先级设置得较低,所以 CC2340 UART 线程就会消失?  


    2.如果将 UART 写模式设置为非块、那么是否还需要增加 TX 环形缓冲区的大小?

    3.iCall_abort ()也发生在我当时,但当时我认为这是因为我没有使用 BLEAppUtil_invokeFunctionNoData ()调用蓝牙相关函数。

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

    Ryan、您好!

    它认为这是任务优先级、而不是 UART 中断优先级。 仅当您目前没有接收到全部数据量时、才需要增加环形缓冲区的大小。

    BR、

    David