我可以清除BLE_BASETIMECNT吗

9个员额/ 0个新员额
最后发表
戴夫。意甲首轮
离线
最后看到:2年11个月前
加入:2015-10-08 13:21
我可以清除BLE_BASETIMECNT吗

你好,支持,

简短的版本是,我可以清除BLE_BASETIMECNT而不搞砸BLE核心吗?我注意到在reg_blecore.h中有#define BLE_BASETIMECNT_RESET 0x00000000,我假设这是一个可以用来清除计数的位掩码。这是可能的吗?

我的设计目前的功能如下:设备上电,我立即把它睡眠通过调用arch_ble_ext_wakeup_on()在我的db初始化回调函数。然后终端用户可以按下一个按钮来打开设备,然后它就会开始广告等等。我的应用程序的部分要求是公布自标记被激活(用按钮中断从睡眠中唤醒)以来所经过的时间。问题是,调用lld_evt_time_get()会报告自启动以来的总时间。我希望能够在设备醒来后立即清除BLE_BASETIMECNT寄存器。任何帮助或建议将非常感谢。谢谢。

设备:
MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 34
你好戴夫,

你好戴夫,

BLE_BASETIMECNT寄存器没有复位位,而且每次580进入休眠时该寄存器都为零,该值由lld_sleep_compensate_func_patched()函数补偿,该函数从低功耗时钟获取经过的时间。关于您的实现,您可以使用一个内核计时器来计数,并将内核计时器的准确性设置为您的标记需要的准确性,当时间流逝时,在计时器处理程序中增加一个计数器。另一种方法是使用lld_evt_time_get度量时间,并在下一次唤醒中保留前一次唤醒的值,您可以通过减去当前唤醒和前一次唤醒来计算间隔。

由于MT_dialog

戴夫。意甲首轮
离线
最后看到:2年11个月前
加入:2015-10-08 13:21
我尝试过使用内核

我尝试过使用内核计时器,但它不准确。我在15个小时里损失了20秒,计时器设置为每60秒过期一次。是否有一个阻塞函数,我可以调用它将阻塞直到ble核心完全运行?现在,我正在更新广告数据,当设备醒来的时候,以及之后的每一分钟。问题是,正如您提到的,当BLE_BASETIMECNT寄存器在唤醒后立即读取时,它的读数为0。我想尝试你提到的第二种方法,但我不认为它会工作(至少我的代码现在),除非ble核心是完全活跃的。

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 34
你好戴夫,

你好戴夫,

我不确定你说的阻塞功能是什么意思,直到核心完全运行,如果你说的是BLE定时器,SDK5中设置一个计时器sw检查程序ble核心是活跃的,如果它是直接设置定时器使用ke_timer_set以防它不是活跃的刑期向核心时,它发送一个消息集的核心是活跃的它保佑计时器。没有等待函数在核心唤醒时暂停处理。现在,关于第二个方法,您可以尝试在user_on_ble_powered回调中调用lld_evt_time_get,以确保核心是活动的。

由于MT_dialog

戴夫。意甲首轮
离线
最后看到:2年11个月前
加入:2015-10-08 13:21
我为user创建了一个回调

我为user_on_ble_powered创建了一个回调函数,并得到dame结果,当我调用lld_evt_time_get()时,它还没有从低功率时钟的时间计数更新。

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 34
你好戴夫,

你好戴夫,

你的意思是你得零分?

在5.0.2.1 SDK中(例如在模板中),如果您放置以下代码片段,UART ?

enum arch_main_loop_callback_ret user_on_ble_powered(空白)

arch_set_pxact_gpio ();
arch_puts(“-”);
arch_printf(“% i -”,lld_evt_time_get ());
arch_puts (" \ n \ r ");

返回GOTO_SLEEP;

由于MT_dialog

Joacimwe
离线
最后看到:1年10个月前
大师
加入:2014-01-14 06:45
你在用内部的吗

你使用内部的RCX时钟还是外部的XTAL32时钟?

戴夫。意甲首轮
离线
最后看到:2年11个月前
加入:2015-10-08 13:21
这两种我都试过了

两种我都试过了,似乎没什么区别。

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 34
你好戴夫,

你好戴夫,

你能不能在一个新的模板项目上再试一次,或者在一个新的例子上,比如barebone项目?

由于MT_dialog