嗨对话小组,
我读了http://support.dialog-semicondiondiondum/faq/how-use-ketimer-during-wakeu ...。
并按照我的项目指示
1)在app_timer_set中添加BLE Activity Check
2)在app_timer_set中添加BLE Force Wakeup过程
3)在Task_app中添加新消息处理程序,以处理新计时器的创建
但它仍然无法正确创建计时器(有时工作,但在大多数情况下失败),DA14580_Beacon_3.40.6中需要任何缺少的更改?
只是想知道信标参考样品中是否需要任何其他更改?
设备:
嗨Hardy.chen,
我不知道任何需要信标在实现外部唤醒时有额外的东西。您是否尝试过类似干净的模板项目?
谢谢mt_dialog.
嗨mt_dialog,
简单只是为了具有不同的广告频率与外部事件,即按下按钮或检测移动。
我不尝试其他模板项目(假设您提到了SDK 5.0.x.x),我相信如果没有内核定时器问题,它应该很好,因为它在重组API和堆栈架构后更加完整。对我来说毫无意义,因为我需要我的项目是通过基于信标参考设计开发的。
我检查了其他参考设计'HID',它确实有一些其他更改*钩子#2 *'app_asynch_proc',您是否可以通过基于信标参考设计通过外部中断更加了解唤醒BLE核心?
嗨对话小组,
根据您的FAQ检查我的“App_timer_Set”修改如下。
我知道在通过'app_ble_force_wakeup'和'app_ble_ext_wakeup_off'唤醒ble之后有效地将内核消息(KE_MSG_SEND)有效地发送到任务以进行调度。
在发送内核消息之前,我应该等待BLE的任何信号吗?
-
void app_timer_set(ke_msg_id_t const timer_id,ke_task_id_t const task_id,uint16_t延迟)
{
//延迟不得超过最大允许
if(delay> ke_timer_delay_max)
{
delay = ke_timer_delay_max;
}
//延迟不应为零
否则if(delay == 0)
{
延迟= 1;
}
//参考http://support.dialog-semicondiondiondum/faq/how-use-ketimer-during-wakeu ...
if(app_check_ble_active()))
{
ke_timer_set(timer_id,task_id,延迟);
}
别的
{
app_ble_force_wakeup();// key_up ble.
app_ble_ext_wakeup_off();
//在执行之前发送消息等待BLE在执行之前醒来
struct create_new_timer_struct * req = ke_msg_alloc(app_create_new_timer,task_app,task_app,
create_new_timer_struct);
req->延迟=延迟;
req-> task_id = task_id;
req-> timer_id = timer_id;
KE_MSG_SEND(REQ);
}
}
-
嗨Hardy.chen,
发送消息时,它将最终到达队列,当操作系统处于活动状态时,它将从队列中获取消息并在运行时立即服务。这就是避免在唤醒中断中放置内核定时器的设置的原因,因为为了设置内核定时器,您需要将BLE处于活动状态,以便为时钟同步,并且在A处发生计时器的时间有效时刻及时。
谢谢mt_dialog.
谢谢,并注意到了!