你好,
我们使用的是DA14580 SDK 5.0.4。
我们需要一种以秒为单位获取全局时间戳的方法。
简单的方法是设置一个计时器每分钟运行一次,并将计数器增加60——这样就会得到一个不准确的测量值(分钟的准确度)。
如果我们需要以秒为单位的时间戳呢?我们需要每时每刻都醒来吗?
是否有一些寄存器\内存地址只是读取一个时间戳(在一些单位)?
如果我们只是从一个计时器中醒来,这将是简单的-如果计时器是X秒,我们将增加X的计数器,每次我们醒来。
但是,我们也可以从按钮中唤醒,并需要获取时间戳。
我看到systick计时器有一个systick_value()函数来获取剩余时间,但是不推荐使用systick计时器。
app_easy_timers是否有类似的"value"函数?还剩多少时间?这可以解决我的问题——创建一个重复的5分钟计时器来增加计数器,每当点击按钮时,从counter * 5分钟+(5分钟- time_left_to_timer)获取当前时间。
问候,
奥伦
关键词:
设备:

嗨,奥伦,
关于systick计时器注意,为了使用计时器设备需要清醒,如果设备睡觉计时器将停止计算,对于app_easy_timers()他们不该有functionallity,您可以查看时间,其为了消逝。580已经可用,您可以使用什么(当然这取决于你想在你的时间戳)的准确率是lld_evt_time_get(),这个函数返回的值BASETIMECNT值的设备启动和运行的时间在625年我们扫描基线。因此,通过读取这个计数器,你将能够计算出你的设备运行了多长时间,因此,当设备处于休眠状态时,当你按下按钮,设备醒来时,你可以轮询该寄存器,并将其时间基准转换为秒。还要注意,为了从该寄存器获得一个有效值,BLE应该启动并运行,因此要在app_on_ble_powered回调中读取寄存器,而不是在计时器回调中。
由于MT_dialog
不知道“设备启动运行时间”是什么意思。
例如,如果我的程序以广告开始10秒,然后停止广告并进入睡眠(深度睡眠\延长睡眠)10秒,然后从计时器回调和调用中醒来:lld_evt_time_get()。
值是32000吗?(32000 * 625us = 20000000us = 20秒)。
我也不确定为什么它要紧,如果我调用它在app_on_ble_powered回调,而不是在easy-timer回调。我还需要能够调用函数时,程序不是广告-
例如,不要在重复的深度睡眠模式(游戏邦注:即每5分钟醒来一次进行一些计算并等待外部唤醒)中进行广告宣传。当我从按钮中醒来时,我需要能够得到准确的时间戳。
问候,
奥伦
嗨,奥伦,
当设备启动fw时,lld_evt_time_get()读取的寄存器正在计数,是的,你应该得到的值应该大约是20秒。
关于为什么你应该把功能app_on_ble_powered调我认为我以前我在文章中提到过,为了得到一个有效价值登记BLE核心需要启动和运行,所以为了确保您应该将我已经提到的回调函数。如果你正在使用app_easy_timer() API,你应该不会有问题,但我假设当设备通过唤醒计时器唤醒时,你会有问题。你可以在设备没有广告的时候调用这个函数,你只需要唤醒它,要么通过BLE定时器和轮询寄存器,要么通过唤醒中断。
由于您将使用唤醒中断,您将不得不使用相应的函数arch_ble_force_wakeup()强制BLE唤醒;问题是,当你这样做时,BLE不会立即醒来,为了确保它是清醒的,你将不得不把寄存器的读取在提到的回调。或者,如果你不想这样做,你可以尝试使用app_easy_wakeup_set() API来设置唤醒回调。您可以在ble_app_sleepmode中找到一个关于如何使用该API的示例。
由于MT_dialog