使用SDK 3.0.6时,使用完全托管的近距离记者项目停止并启动广告导致硬故障。当Proxr_Task使用时,这会发生在以下情况下:
1.直接调用app_adv_stop和app_adv_start。
2.向App_Task发送消息以启动/停止(基于App_Adv_Timer_Handler和App_WakeUp_Handler(App_adv_Timer和App_WakeUp_msg消息)的默认处理程序)。
3.向App_Task发送定时消息以启动/停止。无论超时值如何,都会立即发生硬断层。
在App_adv_Func函数的末尾在App_Adv_FUNC函数的末尾添加到App_adv_timer的唯一作品,该邮件调用app_adv_stop,并向调用app_adv_start的app_wakeup_msg发送定时消息。
控制广告不是来自app_task的正确方法是什么?我们需要通过我们的配置文件任务收到的命令来控制它。
嗨
如果我正确地了解您,您希望在连接状态下向外设发送某些东西时开始或停止广告?或者您只是试图避免广告数据?
由于UART命令,我需要启动和停止广告(我已经实现了一个专有的UART协议,绕过默认的UART协议。到目前为止,这是正确的)。无需更改广告数据,也没有需要在连接状态期间停止广告(有一个单独的命令断开与活动连接))。
在Proxr_Task的上下文中,我收到了一个UART命令来停止或启动广告,并且我需要能够相应地停止或启动广告。
嗨,
上面的选项2应该正常工作(“向App_Task发送消息以启动/停止)。
此通话将执行以下操作:
ke_msg_send_basic(app_adv_done,task_app,task_app);
您需要枚举新的原始App_adv_done(在app_api.h中):
/// app任务消息
enum app_msg.
app_module_init_cmp_evt = ke_first_msg(task_app),
app_adv_done,
您当然需要为该邮件的处理程序定义app_task_handlers.h
{app_adv_done,(ke_msg_func_t)app_adv_done_handler},
定义App_xxx_proj.c中的处理程序(以及在.h文件中的原型):
int app_adv_done_handler(
ke_msg_id_t const msgid,
ke_task_id_t const dest_id,
ke_task_id_t const src_id.
)
{
app_adv_stop();
return(ke_msg_consumed);
}
事实证明,硬故障在不相关的代码中。您建议的代码正常工作,非常感谢您。
嗨,
很高兴听到你解决了这个问题。