动态切换观察者和外设角色

4个职位/ 0个新
最后发表
chris0409
离线
最后看到:4年6天前
加入:2017-01-11 05:59
动态切换观察者和外设角色

你好,
我有一个场景,需要在观察者和外设之间切换设备角色,因为设备需要同时接受连接和侦听广播数据包。现在我使用一个按钮来进行角色转换。我已经根据指南对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函数。

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

设备:
MT_dialog
离线
最后看到:4个月2周之前
工作人员
加入:2015-06-08 34
嗨chris0409,

嗨chris0409,

我不看到一些明显的错误,但是如果敝中断处理程序发生那么它的监督问题,您可以准确地从NMI_Handler检查您的代码需要执行额外的时间和触发机构,要么重新加载机构在这一点上,如果延迟是预期的过程或检查延迟的原因,看门狗最多支持2.4秒。或者你甚至可以删除看门狗和检查取消定义定义CFG_WDOG在da1458x_config_basic.h。

由于MT_dialog

chris0409
离线
最后看到:4年6天前
加入:2017-01-11 05:59
非常感谢,很管用

谢谢,非常感谢,undef CFG_WDOG后工作正常

MT_dialog
离线
最后看到:4个月2周之前
工作人员
加入:2015-06-08 34
嗨chris0409,

嗨chris0409,

没有监督的事实正在表明代码里的某个地方,为了检查为什么出现这种情况你需要检查你的代码补充说,延迟,如果这是你不能避免你应该重新加载机构,只是提到如果你想使用监督functionallity。

由于MT_dialog