嗨对话小组,
这是我最近发现的一个有线问题。当我尝试连接它时,我的设备自身重置。
我的应用程序基于DA14580_BEACON_3.40.6。请建议我应该尝试什么。
以下是您参考的一些调查结果:
1)当我将设备运行时,它运行良好(连接成功而不复位而不复位,而不会创建其他应用程序计时器。
2)此问题发生在此额外的计时器之后
a)断开连接[我使用gatt命令触发它]或
b)电源循环[保存在非易失性存储中的配置进行下一步启动以触发它]
3)我试图通过用自己的包装器'wrap_platform_reset'替换platform_reset_func来检查调试跟踪,如下所示
a)应用程序函数'app_connection_func(struct gapc_connection_req_ind const const consa param)甚至甚至不能在它自行重置之前调用(我在这里设置断点,但没有停止)
b)停止函数'Wrap_platform_Reset'的断点设置,呼叫堆栈如下:
- WRAP_PLATFORM_RESET 0x2000CEE void f(无符号int)
| - 错误0xF2F2F2F2 Param - 无符号int
- reset_handler 0x00000000 void f()
void wrap_platform_reset(UINT32_T错误)
{
#ifdef cfg_force_wdrst.
//上电外围设备的电源域
setBits16(PMU_CTRL_REG,PERIPH_SLEEP,0);
而(!(getword16(sys_stat_reg)&per_is_up));
spi_flash_enable(spi_gpio_port,spi_cs_pin);//将SPI闪烁从下一个启动的下载模式
spi_flash_wait_till_ready();
#别的
assert_warning(1);
#万一
platform_reset_func(错误);
}
嗨Hardy.chen,
在App_disconnect_func中的断开事件后,我将额外的计时器放在App_disconnect_func中,以触发广告验证,该设备通常保持在广告上。0xF2F2F2F2意味着在某些时候,将要求应用程序分配内存,并且由于资源有限,分配失败。检查是否存在内存泄漏,您发送任何通知,您不会释放邮件。在计时器处理程序在所有处理功能中返回(KE_MSG_CONSUME)后,您是否返回(KE_MSG_CONSUME)?
谢谢mt_dialog.
嗨mt_dialog,
我已经检查了所有处理程序,在执行后返回KE_MSG_CONSUME。
我们是否有其他方法可以在运行时检查剩余的内存空间?
嗨Hardy.chen,
目前无法在运行时检查内存空间。您是否在程序中使用ARCH_PRINTF()函数才能从项目中打印数据?使用ARCH_PRINTF()打印太多数据是获取此类错误的通常原因。
谢谢mt_dialog.
嗨mt_dialog,
我在我的应用程序中不使用任何调试打印。
目前,我刚刚对我的案件的另一个存在的计时器进行了解决方法。而且没有使用额外的计时器,它现在正常工作。
但显然,我建议使用调试工具来分析崩溃问题。
到目前为止,我观察到了2个奇怪的崩溃/重置问题:
1)在我的应用程序上添加新计时器
2)快速发送OTA数据包(无需响应)
对于案例1),利用存在定时器的解决方法
案例2)。使用响应的写入替代方法,它将大大减慢升级性能
我们可以关闭这个主题。