停止和启动广告将导致Hard Fault

6个员额/ 0个新员额
最后发表
eli.iser
离线
最后看到:6年3个月前
加入:2014-04-13 07:54
停止和启动广告将导致Hard Fault

当使用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_TASK中,在app_adv_func函数的末尾添加一个定时消息到APP_ADV_TIMER(调用app_adv_stop),并向APP_WAKEUP_MSG(调用app_adv_start)发送一个定时消息。

什么是不从APP_TASK控制广告的正确方法?我们需要通过profile任务接收到的命令来控制它。

MHv_Dialog
离线
最后看到:4周1天前
工作人员
加入:15 2013-12-06

如果我理解正确的话,您希望在连接状态下开始或停止广告,以发送一些东西到外设?或者你只是想改变广告数据?

eli.iser
离线
最后看到:6年3个月前
加入:2014-04-13 07:54
我需要启动和停止

作为UART命令的结果,我需要启动和停止广告(我实现了绕过默认UART协议的专有UART协议)。到目前为止,这是正确的)。不需要更改广告数据,也不需要在连接状态期间停止广告(有一个单独的命令用于从活动连接断开)。
我接收到一个UART命令,在PROXR_TASK的上下文中停止或启动广告,我需要能够相应地停止或启动广告。

MHv_Dialog
离线
最后看到:4周1天前
工作人员
加入:15 2013-12-06
你好,

你好,

上面的选项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

(ke_msg_func_t) app_adv_done_handler}, {APP_ADV_DONE

在你的app_xxx_project .c中定义处理程序(并在.h文件中定义原型):

int app_adv_done_handler (
ke_msg_id_t const是否,
ke_task_id_t const dest_id,
ke_task_id_t const src_id


app_adv_stop ();
返回(KE_MSG_CONSUMED);

eli.iser
离线
最后看到:6年3个月前
加入:2014-04-13 07:54
事实证明,这很难

事实证明,硬错误是在一个不相关的代码段中。您建议的代码运行正常,非常感谢。

MHv_Dialog
离线
最后看到:4周1天前
工作人员
加入:15 2013-12-06
你好,

你好,

很高兴听到你解决了问题。