嗨,每个人,
我在读嗯- b - 006实现funcionality睡我的项目。
我希望该应用程序修改dinamically睡眠模式,所以在符合医生,da1458_config。h:
/ * * /睡眠模式
# undef CFG_EXT_SLEEP
#定义CFG_DEEP_SLEEP
当应用程序首次启动时,睡眠模式必须设置为扩展,所以在app_set_dev_config_complete_func我把这个:app_set_extended_sleep ();
我读段关于主循环结构处理睡觉,但现在我已经完成配置后,我不明白我怎么可以把设备的睡眠。arch_main。c文件我看到这张支票:
如果(sleep_mode = = mode_ext_sleep | | sleep_mode = = mode_deep_sleep)
什么信息或功能我需要发送或开始制定正确sleep_mode吗?
而且....在doc BLE计时器可以用于唤醒设备。如果计时器是由app_timer_set(),一个中断将自动发送消息将被发送计时器结束时什么时候?因此,主处理器退出WIF () ?
如果关掉收音机和祝福,祝福如何定时发送一个中断?
如果GLOBAL_INT_STOP()在主循环执行如(),所以所有中断都是禁用的,主处理器如何退出,如()和一个中断?
睡眠模式和调试器正常工作还吗?我怎么可以配置和调试器的代码使睡眠吗?
设备:
嗨,朱塞佩,
检查文档嗯- b - 006章7应用程序编程接口,与API你可以改变动态应用程序app_set_extended_sleep和app_set_deep_sleep的睡眠模式。是的软件定时器也可以被用来唤醒设备,timer_set后你的设备会唤醒并执行注册处理程序为特定的计时器。da陷入睡眠之前安排接下来的唤醒和低功率时钟计数到。当中断停止它意味着不执行的isr和中断是悬而未决,注射后如果有等待中断处理器继续执行。不,当da在睡眠模式下,你不能调试您的程序,当处理器睡部队调试器detouch和没有解决这个问题的方法。
由于MT_dialog
对不起,我有点糊涂了。
嗯- b - 006我看到主循环结构用钩子的同步异步睡眠前后操作,所以如果我在配置文件中定义exthended睡眠模式假设处理器执行一个循环的主循环,执行所有操作,最后进入睡眠(关机广播和外围设备,在停止注射用水指令)。这是对吗?
在主循环这个指令执行顺序:
GLOBAL_INT_STOP():“全球系统中禁用中断。”
注射用水():“调用等待中断程序的处理器。”
GLOBAL_INT_START():“全球系统中启用中断。”
首先主循环运行GLOBAL_INT_STOP注射后,现在在禁用中断和处理器停止,等待中断。这是对吗?
现在让处理器从停止状态(注射用水中的()行代码)怎么做?是什么事件,除了禁用中断,注射用水,允许处理器退出吗?
嗨guiseppe,
当您在配置文件中设置睡眠和da没有等待操作它睡根据模式定义在你的配置文件,并等待一个中断发生,以唤醒。是的,等待中断处理器,如果有任何等待中断处理器会唤醒并继续。只有中断可以唤醒处理器以注射用水退出。
由于MT_dialog
请检查这段代码:
上电处理程序。函数唤醒设备如果续< 60,设置读取标志= 1,自称在300 ms和激活延长睡眠。
int myproject_power_on_handler (ke_msg_id_t const是否,const void *参数,ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
如果(app_env.cont < 60) {
app_force_active_mode ();
app_ble_force_wakeup ();
app_ble_ext_wakeup_off ();
}
app_env.read = 1;
app_timer_set (TRELETTRA_POWER_ON TASK_APP 30);
app_set_extended_sleep ();
返回(KE_MSG_CONSUMED);
}
阅读处理程序。app_env时调用。阅读= = 1,增量控制和远程设备发送通知。
int myproject_read_handler (ke_msg_id_t const是否,const void *参数,ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
app_env.cont + +;
发送通知代码.....
返回(KE_MSG_CONSUMED);
}
app_asynch_proc。由主循环。它允许myproject_read_handler app_env_read = = 1时,当祝福核心不是睡眠模式。
静态内联bool app_asynch_proc(空白)
{
bool ret = false;
如果(! app_ble_ext_wakeup_get ()) {
如果(app_env.read = = 1) {
ke_msg_send_basic (MYPROJECT_READ TASK_APP TASK_APP);
app_env.read = 0;
}
}
返回受潮湿腐烂;
}
这段代码的系统通知发送到远程设备间隔300毫秒,在18秒(cont > 60;60 * 0.3 = 18岁)女士应该不再发送通知。但是它总是发送通知。为什么BLE核心没有仍在睡眠模式后app_set_extended_sleep () ?
嗨,朱塞佩,
你的意思是它不睡觉?你想让你的设备cenral断开,分为永久睡眠?或者你可以看到smartsnippets不落入睡眠和醒来在每一个幸运的事件吗?
由于MT_dialog
从smartsnippets我看不到,因为我使用usb软件狗进行调试。我希望延长设备保持在永恒的睡眠。检查我发布的代码。续> = 60后设备仍在延长睡眠因为唤醒不再执行的指令。因此app_sync_proc()不能发送了通知远程设备因为app_ble_ext_wakeup_get()返回true。
然而,继续发送通知显然是因为app_ble_ext_wakeup_get返回false (dafault模式)。为什么?
如果(! app_ble_ext_wakeup_get ()) {
如果(app_env.read = = 1) {
ke_msg_send_basic (MYPROJECT_READ TASK_APP TASK_APP);
app_env.read = 0;
}
嗨guiseppe,
app_ble_ext_wakeup_get()返回false,因为你不设置你的设备在永恒的睡眠(你不调用函数app_ble_ext_wakeup_on()至少我斜面看到它在你的代码)。检查嗯- b - 006。在第12页的pdf。”app_ble_ext_wakeup_on()就是为了把祝福永久睡眠唤醒等待力量”。的app_ble_ext_wakeup_on()函数在SmartTag ref设计在过去其他app_adv_timer_handler。
由于MT_dialog
我修改了代码如下:
int myproject_read_handler (ke_msg_id_t const是否,const void *参数,ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
....发送.NOTIFICATIONS代码....
app_timer_set (MYPROJECT_POWER_OFF TASK_APP 0);
/ / app_timer_set (MYPROJECT_POWER_ON TASK_APP 30);/ /禁用
app_timer_set (MYPROJECT_READ TASK_APP, 31);
返回(KE_MSG_CONSUMED);
}
Int myproject_power_on_handler (ke_msg_id_t const是否,const void *参数,ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
app_force_active_mode ();
app_ble_force_wakeup ();
返回(KE_MSG_CONSUMED);
}
int myproject_power_off_handler (ke_msg_id_t const是否,const void *参数,ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
app_set_extended_sleep ();
app_ble_ext_wakeup_on ();
返回(KE_MSG_CONSUMED);
}
我删除了app_ble_ext_wakeup_get()测试。现在在启动时,阅读由app_set_dev_config_complete_func函数被调用。
读函数将通知发送到远程设备最后扩展设置睡眠模式,把祝福通过调用myproject_power_off_handler永久的睡眠。调用power_on_handler评论是在上面的代码中,所以下一个调用读函数不能发送通知,因为祝福不能详尽的信息,需要一个更新的特点。但是它!为什么?BLE唤醒时自动获得一个新事件?
嗨,朱塞佩,
如果da连接将忽略app_ble_wakeup_on()和将安排在下一醒来连接时间间隔。如果你断开(你从外围可以发出断开命令)然后你的设备将会在永久的睡眠。只要你连接将继续安排BLE事件。
由于MT_dialog
我重写代码。
CFG_EXT_SLEEP戴恩。
当我打开电源正确的广告开始。当前的消费大约是250 ua。
6秒之后app_force_active_mode()和当前执行consumpiton大约是700 ua。Da发送广告。
10秒后app_set_extended_sleep()执行但当前消费保持700 ua(无线电仍然总是吧! ?)
为什么电流250 ua当启动系统和700 ua app_set_extended_sleep后()?我如何出局/普京在延长睡眠在代码设备操作吗?
如果我使用app_restore_sleep_mode电流返回250 ua。为什么系统app_set_extended_sleep同样不返回当前消费吗?
嗨,朱塞佩,
您使用的是开发工具包或一个自定义的板吗?你能检查你的设备是否通过使用智能片段睡觉?你可以改变睡眠模式时执行代码通过使用app_set_extended_sleep()函数。也许在你的代码是禁用设置扩展睡眠这是为什么你的设备不睡眠。
由于MT_dialog
定制的董事会。
当我打开电源正确的广告开始,当前的消费大约是250 ua(1没有j-link ua)。当app_force_active_mode()执行能耗变成700 ua (500 ua没有j-link连接)。当我执行app_restore_sleep_mode当前消费回归250 ua / ua,如果我执行app_set_extended_sleep当前仍然是700 ua / 500 ua。为什么?可能会出现什么问题?
嗨guiseppe,
app_force_active_mode()禁用睡眠,记得最后睡眠配置,你不可以设置你的设备与app_set_extended_sleep睡眠模式。当app_force_active_mode叫做sleep_md变量设置,当你叫app_set_extended睡眠设备落在睡眠只有sleep_md = = 0。这样做是为了避免任何模块设置设备睡眠时指示来保持清醒。
由于MT_dialog
所以如果你想关掉延长睡眠然后恢复之后,我必须改变sleep_md。好的。
嗨guiseppe,
这个想法并不是惹sleep_md但还原以前的配置。如果你调用app_force_active_mode(),那么您应该调用app_restore_sleep_mode()为了得到延长睡眠。
由于MT_dialog