动态切换观察者和外围设备之间的角色

4个帖子/ 0新
最后一篇
Chris0409.
离线
最后一次露面:3年10个月前
加入:2017-01-11 05:59
动态切换观察者和外围设备之间的角色

你好,
我有一个需要在观察者和外设之间切换设备角色的情况,因为设备需要接受连接并侦听广播数据包。现在我使用一个按钮来执行角色交换机。我已经在BLE_PERITELAL样本项目上进行了修改基础,用于指导https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...
问题是:设备启动作为外设,其工作正常,然后按一个按钮时,根据像这样的当前状态做某事,然后更改角色
//切换设备的角色
if(currole == gap_peripheral_slv)
{

//停止广告并重置GAPM
ke_state_t curstate = ke_state_get(task_app);
开关(曲线)
{
案例app_connectable:
app_easy_gap_advertise_with_timeout_stop();
advenable = false;
休息;
案例app_connected:
app_easy_gap_disconnect(0);
休息;
默认:
休息;
}
curle = gap_broadcaster_adv;

}
否则if(currole == gap_broadcaster_adv)
{
crerole = gap_peripheral_slv;
}

//延迟50ms以发送重置cmd
app_easy_timer(5,timer_reset_handler);

并在Timer_Reset_Handler中发送重置CMD
void timer_reset_handler(void)
{
//创建并向间隙任务HANLDER发送重置消息
struct gapm_reset_cmd * cmd =(struct gapm_reset_cmd *)ke_msg_alloc(gapm_reset_cmd,task_gapm,task_app,gapm_reset_cmd);
cmd->操作= gapm_reset;
ke_msg_send(cmd);

}

在函数gapm_cmp_evt_handler中,我使用crulo来重新配置设备角色,我可以在这里到达,但大约2〜3秒堆栈崩溃__asm(“bkpt#0 \ n”);在函数nmi_handlerc下。

我做错了什么吗?任何帮助都会很欣赏。

设备:
mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨Chris0409,

嗨Chris0409,

我没有看到一些明显错误的东西,但是,如果NMI处理程序发生在它的看门狗问题,您可以从NMI_Handler检查,其中您的代码究竟需要额外的时间来执行和触发该看门狗,如果延迟,则重新加载看门狗是预期的过程或检查延迟的原因,看门狗支持高达2.4秒的值。或者您甚至可以删除看门狗,并通过在DA1458x_config_basic.h中拒绝定义CFG_WDOG来检查。

谢谢mt_dialog.

Chris0409.
离线
最后一次露面:3年10个月前
加入:2017-01-11 05:59
非常感谢,非常有效

非常感谢,它在undef cfg_wdog之后工作正常

mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨Chris0409,

嗨Chris0409,

它在没有看门的情况下工作的事实表明您的代码摊位的某个地方,以检查为什么需要检查代码添加那些延迟的原因,如果这是您无法避免的话,您应该重新加载看门狗那一点,只是提到你想使用看门狗的功能。

谢谢mt_dialog.