我仍然使用DA14695 USB-DevKit并修改了pxp_reporter示例,在这里我修改了main.c并将pxp_reporter_task.c替换为blinker_task.c,您可以在这里看到:
https://gist.github.com/tetrodoxin/34c8a2ef9af80b0d3e30c4d213b5ca40
当我建立一个flash时,我可以启动它,LED闪烁,大约4秒,然后程序似乎冻结,LED保持在一个状态,这取决于使用的计时器延迟。
还有,电话OS_TASK_DELETE (OS_GET_CURRENT_TASK ());In system_init()永远不会返回。我不知道,这是否有关联,但我也不知道从哪里找问题。
有什么建议吗?提前感谢!
设备:
嗨ZephraimMcKladden,
你能在调试模式下运行它并指定它冻结的地方吗?
谢谢,PM_Dialog
不幸的是没有。
正如我在这个主题中所描述的:
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。
我目前无法在我的14695 USB-Kit(不是Pro-DK)上以DebugMode运行我的项目。
当我改变计时器延迟值时,我观察到,这不是执行多少次的问题,而是时间问题(大约4秒),直到它冻结。
关于我的第二个问题
这可能是正常的,任何代码之后OS_TASK_DELETE (OS_GET_CURRENT_TASK ());永远不会执行,因为该调用完全结束了当前任务?
同时我发现:
由于我的示例是基于pxp_reporter的,因此其中有很多BLE内容。如果我重写原始的pxp_reporter,使其始终闪烁LED,就可以了。如果我一步一步地删除BLE函数,它将以函数ble_enable()结束,如果我删除它,冻结将在几秒钟后发生。所以…也许设备会进入某种睡眠状态,这是由BLE功能阻止的??可能吗?
嗨ZephraimMcKladden,
不确定你已经完成了哪些步骤,但很高兴你成功了。是的,SDK的pxp_reporter项目默认使用睡眠模式-请检查pm_sleep_mode_set(pm_mode_extended_sleep);在system_init()中。当系统处于任意一种休眠模式时,所有外设域都将断电。
谢谢,PM_Dialog
我还尝试使用pm_sleep_mode_set(pm_active),但“冻结”仍然发生。
是什么触发了断电?
BLE-Manager是如何预防的?
GPIO引脚仍然上电,即使在延长睡眠模式?
嗨ZephraimMcKladden,
很抱歉耽搁了。你能指出代码冻结的地方吗?
谢谢,PM_Dialog
正如我所说:
这不是一段特殊的代码,它冻结的地方是时间。
所以我猜,它进入了睡眠模式。有没有办法让我完全关闭睡眠模式?
嗨ZephraimMcKladden,
我仍然不能理解你的意思:“这不是一段特殊的代码,它冻结的地方是时间。”
通常,如果您附加了调试器,您应该能够检查它在哪里冻结。是WDOG过期吗?断言?敝中断?
要禁用睡眠模式,应该调用pm_sleep_mode_set(pm_active)。
谢谢,PM_Dialog
我的意思是:
我有一个计时器设置和一个任务,等待计时器通知(OS_TASK_NOTIFY_WAIT后sys_watchdog_suspend)。收到通知后,循环所做的就是切换绿色LED。现在,如果我改变定时器间隔,这个循环可能会运行20次(短间隔)或只运行2次(长间隔),但总的来说,LED闪烁时间不会超过5秒。
因此,我得出结论,不是代码中的单个点/步骤/命令/函数调用导致了睡眠。我猜,设备只是在一段时间后(4-5秒)进入睡眠模式。
我试着pm_sleep_mode_set (pm_mode_active);在system_init任务内部(因为这是一个FreeRTOS项目),但这似乎没有任何影响。
正如我在上面进一步写的,如果我使用函数ble_enable()并因此启用蓝牙功能,这似乎可以防止睡眠。但这是让1469x保持清醒的唯一方法吗?
我遗漏了什么?
同时,我发现,如果我在调试模式下运行示例,它不会进入睡眠状态,因此我观察到的“冻结”不会发生。
这里使用的示例是来自SDK的freertos_retarget项目。我仍然没有线索,如何防止睡眠模式,当使用FreeRTOS。再次:pm_sleep_mode_set (pm_mode_active);什么也不做。
嗨ZephraimMcKladden,
你怎么确认它没有进入睡眠状态?
谢谢,PM_Dialog