你好支持,
简短的版本是,我可以在不拧紧BLE核心的情况下清除ble_basetimecnt吗?我在reg_blecore.h中注意到#define ble_basetimecnt_reset 0x00000000,我认为这是一个可用于清除计数的bitmask。这可能吗?
我的设计当前的功能如下:在设备电源上,我立即通过在我的DB初始化回调函数中调用Arch_ble_ext_wakeup_on()来入睡。然后,最终用户可以按下按钮将设备打开“ ON”,然后开始广告等...我应用程序的一部分是为了宣传经过的时间,因为该标签已激活(在pushtbutton中断中从睡眠中唤醒))。问题是呼叫lld_evt_time_get()报告自加电源以来的总时间。我想做的是在设备醒来后立即清除ble_basetimecnt寄存器。任何帮助或建议将不胜感激。谢谢。
设备:
嗨,戴夫,
BLE_BASETIMECNT寄存器没有重置位,每次580落入睡眠时,此寄存器也为零,并且该值是从函数lld_sleep_compensate_func_patched()函数中补偿该值的,从而从低功率时钟获得了经过的时间。关于您的实现,您可以使用内核计时器来计数并将内核计时器精确度设置为标签所需的准确性以及时间段时何时将计时器处理程序中的计数器递增。同样,尝试的另一个想法是用lld_evt_time_get测量时间,并保留下一个唤醒中上一个唤醒的值,您可以通过减去当前和上一个唤醒来计算间隔。
谢谢mt_dialog
我已经尝试使用内核计时器,但这不是准确的。我在15个小时内损失了约20秒,计时器设置为每60秒过期。我可以调用一个阻止功能,直到BLE核心完全运行?现在,当设备醒来,然后在此之后的每一分钟之后,我正在更新广告数据。正如您提到的那样,问题是BLE_BASETIMECNT寄存器在唤醒后立即读取时为0。我想尝试您提到的第二种方法,但是我认为它不会起作用(至少现在是我的代码立即站立),除非BLE核心完全活跃。
嗨,戴夫,
我不确定您对阻止功能的含义,直到核心完全运行,如果您在谈论BLE计时器,则在设置计时器的过程中,在SDK5中,SW检查是否均处于活动状态,以及是否处于活动状态它使用ke_timer_set直接设置了计时器,以防其不活动,它会将mesage发送到核心,而当核心处于活动状态时,它将服务于设置BLE计时器的消息。在核心醒来时,没有等待功能可以搁置该过程。现在,关于第二种方法,您可以尝试在user_on_ble_powered回调中调用lld_evt_time_get,以确保核心处于活动状态。
谢谢mt_dialog
我为user_on_ble_power创建了一个回调,并在调用lld_evt_time_get()时获得dame结果,尚未通过低功率时钟的时间计数进行更新。
嗨,戴夫,
你的意思是你要零吗?
在5.0.2.1 SDK中(例如,在模板中),如果将以下摘要放置在UART中仅返回零?
enum Arch_main_loop_callback_ret user_on_ble_powered(void)
{
Arch_set_pxact_gpio();
Arch_puts(“ on-”);
Arch_printf(“%i-”,lld_evt_time_get());
Arch_puts(“ \ n \ r”);
返回goto_sleep;
}
谢谢mt_dialog
您是否使用内部RCX时钟或外部XTAL32?
我已经尝试了两者,这似乎没有什么不同。
嗨,戴夫,
您能否重试新鲜的模板项目或像Barelebone项目这样的新示例?
谢谢mt_dialog