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

4个职位/ 0个新职位
最后发表
chris0409
离线
最后看到:2个星期前
加入: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_broad_adv)

curRole = GAP_PERIPHERAL_SLV;

//延迟50ms发送复位CMD
timer_reset_handler app_easy_timer(5日);

并在timer_reset_handler中发送一个重置CMD
空白timer_reset_handler(空白)

//创建一个重置MSG到gap任务处理程序
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个月3个星期前
工作人员
加入:2015-06-08 34
嗨chris0409,

嗨chris0409,

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

由于MT_dialog

chris0409
离线
最后看到:2个星期前
加入:2017-01-11 05:59
非常感谢,很管用

非常感谢,它在undef CFG_WDOG之后工作得很好

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

嗨chris0409,

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

由于MT_dialog