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.

[参考译文] CC2640:解决所有任务被阻止的问题

Guru**** 2560390 points
Other Parts Discussed in Thread: CC2640, SYSBIOS

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/584306/cc2640-troubleshooting-a-problem-with-all-tasks-blocked

部件号:CC2640
“Thread: SysBIOS”中讨论的其它部件

我们的CC2640 BLE应用程序已经启动并运行了一段时间,我们已经准备好发货,但我们偶尔会遇到东西冻结的情况,唯一的等待是通过拉动电池循环供电。 我们的(外围设备)应用程序通过BLE持续传输简单消息,速度约为40 /秒,并且可以保持较长一段时间,然后才能受到冻结的影响。

我花了很多时间使用CCS调试器,当我们挂起所有任务时,包括iCall,显示为已阻止,因此我想知道BLE堆栈是否由于某些不幸的原因而被阻止。 CCS没有给我很好的堆栈跟踪,因此我看不到BLE堆栈可能在等待的位置。 我尝试跟随帧指针,它导致了一个包含所有"20 20 20 ..."说明的RAM区域,这对我来说毫无意义。

我还研究了堆栈大小,BIOS扫描错误,堆内存,Hwi等,没有任何东西会对我造成问题。 我尝试禁用节能功能,添加了各种断言以检查我们是否错误调用BLE堆栈,添加了错误检查等,但没有什么绝对麻烦。 查看BIOS "Scan for errors...(扫描错误...)",我收到一些消息"Error fetching Hwi stack info!(获取Hwi堆栈信息时出错!)",但当事情正常运行时,也会出现相同的消息。

我尝试设置BIOS.assertsEnabled,Task.initStackFlag和Task.checkStackFlag,但无法执行,因为RTOS正在PROM中运行。

我开始没有想法了。 是否有人对解决此问题有任何建议? 谢谢!

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

    很难判断描述中发生了什么。 iCall (协议堆栈)任务的标称行为被阻止,因为它将在没有活动时在事件/信号量上挂起。

    在此状态下观察到的电流消耗是多少? 是否可以运行定期计时器/事件以确认RTOS仍处于活动状态?

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢JXS,将查看消耗并尝试按照您的建议设置定期计时器。

    我们最初以为MCU正在休眠,无法正常恢复,所以我们禁用了节电功能

    1)设置PowerCC26XX_config.enablePolicy = false
    2)将应用程序和堆栈的POWER_Saving更改为xPOWER_Saving

    这些更改是否足以防止微型电脑休眠?

    此外,当我们通过CCS调试器来查看事物时,是否有任何方法可以告诉我们微处理器处于休眠状态?

    再次感谢,

    Hector
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    JXS,我认为这可能是时钟/计时器问题。 当发生冻结时,时钟模块显示tick字段被卡住。 通常,我们应用程序中的设置/配置应该正确,因为我们可以在达到此冻结之前运行一段时间,所以这肯定是一个非常依赖时间的错误。 您建议我如何解决此问题? 谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仍在努力解决这一问题。 任何帮助/提示都将非常感谢。

    下面是我目前拥有的内容:
    我有两种模式“好”和“坏”。 在良好模式下,所有组件都运行良好,但CC2640在某种程度上会进入不良模式并失去响应。
    -在坏模式下,CCS调试器显示时钟模块中的tick字段被卡住,在暂停并恢复调试器后不移动。 在良好模式下,当我暂停/恢复调试器时,tick字段会很好地上升。
    -在良好模式下,我总是看到ISRPENDING 1和VECTPENDING 1万 (16)
    -在坏模式下,我总是看到ISRPENDING 1和VECTPENDING 0万 (0)
    调试器还显示tickSource = ti.SysBIOS.KNL.Clock.TickSource_timer
    我很确定我们在中断20时使用AON_RTC (始终开启计时器)
    我不认为我正在使用内置的Systick计时器,因为STCSR中的启用位设置为0,并且STRVR和STCVR也是零。
    -在良好模式下,hwi显示所有已启用的中断,其中一个挂起的中断16
    -在坏模式下,hwi显示所有已启用的中断,无待处理的中断
    -在坏模式下,我们总是看到1个或2个指向ROM的IRP
    -在良好模式下,我们很少看到IRP指向ROM
    -Hwi表示所有中断都以相同的优先级255运行
    -在正常和模式下,中断20时的计时器在计时器模块中显示为禁用
    -我们使用地址0x4.00092亿上的AON_RTC (始终开启计时器)
    -在良好模式下,计时器模块将显示“预防阈值”字段,该字段将正常移动
    -在坏模式下,计时器模块显示“预防阈值”字段被卡住

    问题:
    1)为什么定时器模块在良好和不良模式下都显示"已禁用"状态? 是因为调试器停止时钟?
    2)什么会导致计时器卡住?
    3)我们是否可能收到太多堆栈中断,并且我们正在中断堆栈或从ISR中获得坏的回报?

    同样,任何想法都将受到高度赞赏。 谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于我在这个论坛上没有得到太多的关注,我要结束这个论坛, 转到TI-RTOS论坛