跳过主要内容

中央锁在断开

DA14580

5年前

发布的pnndra0点 2回答
0的问题

亲爱的先生们,
我们在sps_host (project da14580_dsps_3.150.2 __13_2_2015)的代码上遇到了麻烦。我们正在做的是添加一些计时器来运行后台任务,它应该能在断开连接后存活。如果我们保持代码不变,当断开连接事件发生时,函数app_disconnect_func(文件app_task.c)会重置(见下面的代码片段)系统状态,我们再也不会得到事件了:

app_reset_app ();//链路丢失(定时器超时)//重置更高的层

//重置环境**这是重要的,因为配置文件att数据库将不会被重新启动**
memset (&app_env 0 sizeof (app_env));

//初始化要添加到数据库中的第一个服务的next_prf_init值
app_env。next_prf_init = APP_PRF_LIST_START + 1;

如果我们将此注释掉,系统在断开或重新连接时随机崩溃(硬故障处理程序)。

有没有办法在不杀死其他计时器的情况下重置应用程序?
另外,如何测试主机代码的连接/断开?我们有一种感觉,当重置一切时,同样的崩溃也可能发生。

5年前

pnndra 0点

你好,
今天,我们已经测试了原始的sps_host代码。在几个连接/断开事件后,代码崩溃了,就像我们的代码一样。在检查堆栈时,在崩溃之前代码的地址是0x322be,根据映射文件可以是ke_malloc函数的地址。你知道问题在哪吗?

提前表示感谢,并致以良好的问候

5年前

MT_dialog -30点

嗨pnndra,

app_reset_app()发送一个GAPM_RESET ?您正在设置的计时器是内核计时器吗?如果是这种情况,则重置BLE堆栈会取消计时器。如果你
想要定时器保持他们的状态后重置,你可以尝试使用硬件定时器(bare in mind,他们不操作时,设备处于睡眠模式)。也
在RESET之后,不要重置环境并开始配置文件初始化,系统重新启动,应该得到一个GAMP_CMP_EVT,表明重新启动完成
处理程序你的设备将被重新配置,当它完成时,你的设备将开始实例化app_on_set_dev_config_complete()中的数据库。的环境
不会重置(重置后,代码不会通过app_init),所以如果需要,你将不得不这样做。关于DSPS中心不需要或实现任何
重置操作(SDK5 DSPS),因此没有对此类操作进行测试。SDK3 DSPS实现了断开连接后的重置,我们没有报告任何问题。

我已经改变了DSPS设备的定时器,在与主机的连接事件2秒后发出断开连接,我看不到SDK5连接和断开超过3小时的任何问题,每5秒,设备连接和断开正确而不会导致主机崩溃。

由于MT_dialog