你好,支持,
简短的版本是,我可以清除BLE_BASETIMECNT而不搞砸BLE核心吗?我注意到在reg_blecore.h中有#define BLE_BASETIMECNT_RESET 0x00000000,我假设这是一个位掩码,可以用来清除计数。这可能吗?
我的设计目前的功能如下:在设备上电,我立即把它放在睡眠通过调用arch_ble_ext_wakeup_on()在我的db初始化回调函数。然后,终端用户可以按下按钮打开设备,然后开始播放广告……我的应用程序的部分需求是公布自标记被激活(使用按钮中断从睡眠中唤醒)以来所经过的时间。问题是调用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检查BLE核心是活跃的,如果它是直接设置定时器使用ke_timer_set以防它不是活跃的刑期向核心时,它发送一个消息集的核心是活跃的它保佑计时器。在内核被唤醒时,没有将处理暂停的等待函数。现在关于第二个方法,您可以尝试在user_on_ble_powered回调中调用lld_evt_time_get,以确保核心是活动的。
由于MT_dialog
我为user_on_ble_powered创建了一个回调,并获得了dame结果,当我调用lld_evt_time_get()时,它还没有从低功率时钟更新时间计数。
你好戴夫,
你是说你得零分?
在5.0.2.1 SDK中(例如在模板中),如果你放置下面的代码片段,只有0从UART ?
Enum arch_main_loop_callback_ret user_on_ble_powered(void)
{
arch_set_pxact_gpio ();
arch_puts(“-”);
arch_printf(“% i -”,lld_evt_time_get ());
arch_puts (" \ n \ r ");
返回GOTO_SLEEP;
}
由于MT_dialog
您使用的是内部RCX时钟还是外部XTAL32时钟?
两种我都试过了,似乎没什么区别。
你好戴夫,
您能在一个新的模板项目或一个像barebone项目这样的新示例上再试一次吗?
由于MT_dialog