你好,
我有一个需要在观察者和外设之间切换设备角色的情况,因为设备需要接受连接并侦听广播数据包。现在我使用一个按钮来执行角色交换机。我已经在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下。
我做错了什么吗?任何帮助都会很欣赏。
嗨Chris0409,
我没有看到一些明显错误的东西,但是,如果NMI处理程序发生在它的看门狗问题,您可以从NMI_Handler检查,其中您的代码究竟需要额外的时间来执行和触发该看门狗,如果延迟,则重新加载看门狗是预期的过程或检查延迟的原因,看门狗支持高达2.4秒的值。或者您甚至可以删除看门狗,并通过在DA1458x_config_basic.h中拒绝定义CFG_WDOG来检查。
谢谢mt_dialog.
非常感谢,它在undef cfg_wdog之后工作正常
嗨Chris0409,
它在没有看门的情况下工作的事实表明您的代码摊位的某个地方,以检查为什么需要检查代码添加那些延迟的原因,如果这是您无法避免的话,您应该重新加载看门狗那一点,只是提到你想使用看门狗的功能。
谢谢mt_dialog.