你好,
我有一个场景,需要在观察者和外设之间切换设备角色,因为设备需要同时接受连接和侦听广播数据包。现在我使用一个按钮来进行角色转换。我已经根据指南对ble_peripheral样例项目做了修改https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。.
问题是:设备作为外设启动,工作正常,然后当我按下一个按钮,根据当前的状态做一些事情,像这样,并改变角色
//切换设备角色
if(curRole == GAP_PERIPHERAL_SLV) / /设置角色
{
//停止发布并重置gapm
ke_state_t curState = ke_state_get(TASK_APP);
开关(curState)
{
案例APP_CONNECTABLE:
app_easy_gap_advertise_with_timeout_stop ();
advEnable = false;
打破;
案例APP_CONNECTED:
app_easy_gap_disconnect (0);
打破;
默认值:
打破;
}
curRole = GAP_BROADCASTER_ADV;
}
else if (curRole == gap_broadcast_adv)
{
curRole = GAP_PERIPHERAL_SLV;
}
//delay 50ms发送重置CMD
timer_reset_handler app_easy_timer(5日);
并在timer_reset_handler中发送一个重置CMD
空白timer_reset_handler(空白)
{
//创建并发送一个重置MSG到一个间隙任务处理程序
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中,我使用curRole重新配置设备角色,我可以得到这里,但大约2~3秒堆栈崩溃在__asm(“BKPT #0\n”);在NMI_HandlerC函数。
我做错什么了吗?任何帮助都将不胜感激。
嗨chris0409,
我不看到一些明显的错误,但是如果敝中断处理程序发生那么它的监督问题,您可以准确地从NMI_Handler检查您的代码需要执行额外的时间和触发机构,要么重新加载机构在这一点上,如果延迟是预期的过程或检查延迟的原因,看门狗最多支持2.4秒。或者你甚至可以删除看门狗和检查取消定义定义CFG_WDOG在da1458x_config_basic.h。
由于MT_dialog
谢谢,非常感谢,undef CFG_WDOG后工作正常
嗨chris0409,
没有监督的事实正在表明代码里的某个地方,为了检查为什么出现这种情况你需要检查你的代码补充说,延迟,如果这是你不能避免你应该重新加载机构,只是提到如果你想使用监督functionallity。
由于MT_dialog