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

4个职位/0个新职位
最后一篇文章
克里斯0409
离线
最后一次见到:3年11个月前
已加入:2017-01-11 05:59
在观察者和外围设备之间动态切换角色

你好,
我有一个场景,需要在观察者和外围设备之间切换设备角色,因为设备需要接受连接并同时侦听广播数据包。现在我用一个按钮来切换角色。我已经做了修改的基础上的ble\ u外围样品项目accodring指导https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl....
问题是:设备作为外设启动,工作正常,然后当我按下一个按钮时,根据当前的状态做一些事情,像这样,并改变角色
//切换设备的角色
如果(curRole==GAP\u PERIPHERAL\u SLV)
{

//停止广告并重置gapm
keu state\u t curState=keu state\u get(任务应用程序);
开关(光标)
{
案例应用程序可连接:
应用程序\u easy \u gap \u Advertised \u with \u timeout \u stop();
advEnable=false;
中断;
案例应用程序连接:
应用程序\u轻松\u间隙\u断开(0);
中断;
违约:
中断;
}
curRole=间隙\u播音员\u ADV;

}
else if(curRole==GAP\u BROADCASTER\u ADV)
{
curRole=间隙\u外围\u SLV;
}

//延迟50ms发送重置命令
应用程序\简易\计时器(5,计时器\重置\处理程序);

并在timer\u reset\u处理程序中发送reset cmd
void timer\u reset\u处理程序(void)
{
//创建并向gap任务负责人发送重置消息
struct gapm\u reset\u cmd*cmd=(struct gapm\u reset\u cmd*)KE\u MSG\u ALLOC(gapm\u reset\u cmd,TASK\u gapm,TASK\u APP,gapm\u reset\u cmd);
cmd->operation=GAPM\u RESET;
发送消息(cmd);

}

在gapm_cmp_evt_handler函数中,我使用curRole重新配置了设备角色,我可以到达这里,但是大约2~3秒后,堆栈在u asm(“BKPT#0\n”)崩溃;在函数NMI\u HandlerC下。

我做错什么了吗?任何帮助都将不胜感激。

设备:
MT\u对话框
离线
最后一次见到:3个月5天前
工作人员
已加入:2015-06-08 11:34
嗨,克里斯0409,

嗨,克里斯0409,

我没有看到明显的错误,但是,如果NMI处理程序发生了,那么这是一个看门狗问题,您可以从NMI\U处理程序中检查您的代码在执行和触发看门狗时需要额外的时间,或者在此时重新加载看门狗,如果延迟是预期的过程,或者检查延迟的原因,看门狗支持最多2.4秒的值。或者您甚至可以通过在da1458x\u config\u basic.h中取消定义define CFG\u WDOG来删除看门狗和检查。

谢谢你的对话

克里斯0409
离线
最后一次见到:3年11个月前
已加入:2017-01-11 05:59
谢谢,非常感谢,很管用

非常感谢,在undef CFG\U WDOG之后它工作得很好

MT\u对话框
离线
最后一次见到:3个月5天前
工作人员
已加入:2015-06-08 11:34
嗨,克里斯0409,

嗨,克里斯0409,

它在没有看门狗的情况下工作的事实表明,在某个地方你的代码会暂停,为了检查为什么会发生这种情况,你需要检查你的代码在哪里增加了延迟,如果这是你不能避免的事情,你应该在那一点上重新加载看门狗,只是提到如果你想使用看门狗的功能。

谢谢你的对话