DA14580在连接时立即复位

5个职位/0个新职位
最后一篇文章
哈代·陈
离线
最后一次见到:1年10个月前
已加入:2015-03-13 04:20
DA14580在连接时立即复位

嗨,对话小组,

这是我最近发现的一个非常棘手的问题。当我尝试连接时,我的设备自动复位了。
我的应用程序是基于DA14580\ U BEACON\ U 3.40.6的。请告知我还应该为这个问题做些什么。

以下是一些调查结果供您参考:

1) 当我让我的设备运行而不创建额外的应用程序计时器时,它工作得很好(连接成功而不需要自己重置)。
2) 如果在以下任一时间之后创建此附加计时器,则会发生此问题:
a) 断开连接[我使用GATT命令触发它]或
b) 电源循环[将配置保存在非易失性存储器中,以便下次启动时触发它]

3) 我试着用我自己的包装器“wrap\u platform\u reset”替换platform\u func来检查调试跟踪,结果发现
a) 应用程序函数“app\u connection\u func(struct gapc\u connection\u req\u ind const*param)”在其自身重置之前甚至没有被调用(我在这里也设置了断点,但没有停止)
b) 在函数“wrap\u platform\u reset”处设置的断点被停止,调用堆栈如下所示:

-换行\u平台\u重置0x20000CEE void f(unsigned int)
|-错误0xf2param-无符号int
-重置\u处理程序0x00000000 void f()


无效包装平台重置(uint32错误)
{
#ifdef CFG\u FORCE WDRST命令
//启动外围设备的电源域
SetBits16(PMU\u CTRL\u REG,PERIPH\u SLEEP,0);
而((GetWord16(SYS\u STAT\u REG)&PER\u IS\u UP);

spi_flash_enable(spi_GPIO_端口,spi_CS_引脚);//使spi闪存退出掉电模式,以便下次启动
spi_flash_wait_until_ready();
#其他
断言警告(1);
#结束

平台复位功能(错误);
}

设备:
MT\u对话框
离线
最后一次见到:2个月2周前
工作人员
已加入:2015-06-08 11:34
嗨,陈先生,

嗨,陈先生,

我在app\u disconnect\u func中的断开连接事件后放置了一个额外的计时器,以便触发广告过程,设备正常地保持广告。0xf2f2意味着在某个时刻,应用程序被要求分配内存,但由于资源有限,分配失败。检查是否有内存泄漏的任何地方,你发送任何通知,你没有释放的消息。您是否在计时器处理程序执行后返回(keu MSG\u CONSUME)以及通常在所有处理函数中返回(keu MSG\u CONSUME)?

谢谢你的对话

哈代·陈
离线
最后一次见到:1年10个月前
已加入:2015-03-13 04:20
嗨,MT\u dialog,

嗨,MT\u dialog,

我已经检查了所有在执行后返回KE\u MSG\u CONSUME的处理程序。

我们是否有其他方法在运行时检查剩余的内存空间?

MT\u对话框
离线
最后一次见到:2个月2周前
工作人员
已加入:2015-06-08 11:34
嗨,陈先生,

嗨,陈先生,

目前无法在运行时检查内存空间。您是否在程序中使用arch\u printf()函数来打印项目中的数据?使用arch\u printf()打印太多数据是获取此类错误的常见原因。

谢谢你的对话

哈代·陈
离线
最后一次见到:1年10个月前
已加入:2015-03-13 04:20
嗨,MT\u Dialog,

嗨,MT\u Dialog,

我的应用程序中不使用任何调试打印。
现在,我只是有一个变通办法,利用另一个现有的计时器为我的案件。而且不用额外的定时器,现在就可以正常工作了。
但是,很明显,我建议使用调试工具来分析崩溃问题。
到目前为止,我发现了两个奇怪的崩溃/重置问题:
1) 在我的应用程序中添加新计时器
2) 快速发送OTA数据包(无响应写入)

对于案例1),利用现有计时器的解决方法
案例2)。使用write-with-response的变通方法,将显著降低升级性能

我们可以结束这个话题。

主题已锁定