0

在 Movesense 平台上获取当前时间(以毫秒为单位)的正确方法是什么?

在模拟器环境中ftime工作正常,但它没有链接到dfu二进制(未定义的引用ftime):

struct time t_start;
ftime(& t_start)

我也试过这个,但我没有得到适当的时间:

struct timeval te; 
gettimeofday(&te, NULL); // get current time
4

1 回答 1

1

请记住,您使用的是嵌入式设备,并非所有功能都可以使用

gettimeofday() 是 CTIME 的一部分,除非您或 Movesense 团队为此平台实施了它,否则可能在 movesense 上不可用。

要获取设备时间,请使用Movesense 团队提供的时间 API 。

启动模块时

whiteboard::ResourceId mTimeResourceId;
getResource("Time",mTimeResourceId); // this returns a status HTTP status code

然后当你想要的时候得到它:

asyncGet(mTimeResourceId);

然后可以通过这种方式收集响应。

void OverskuddService::onGetResult(whiteboard::RequestId requestID,
                               whiteboard::ResourceId resourceId,
                               whiteboard::Result resultCode,
                               const whiteboard::Value& rResultData)
{
    switch(resourceId.localResourceId)
    {
        case WB_RES::LOCAL::TIME::LID:
        {
          if(resultCode == wb::HTTP_CODE_OK)
          {
             int64_t currentTime = rResultData.convertTo<int64_t>();
          }
        }
    }
}

这将返回自 1970 年以来的 uSec 数,因此通过除以 1000 转换为 ms。

另外,请注意,如果在取出电池或芯片进入睡眠模式时未设置时钟,则时钟设置为 2015.01.01。

请注意,不同服务的时间戳是不同的,ms 来自 epoch,us 来自 epoch 秒来自 epoch 等。

编辑:正如user1987093(我认为为 Movesense 团队工作)所提到的,您还可以通过向 /Time/Detailed 发出 GET 请求来获取其他信息,这给出了当前的 UTC 时间 [us],即相对时间。Timestamp [ms since reset](与传感器服务中的 Timestamp 相同)、Resolution [ticks per second] 以及 Accuracy [ppm]

于 2019-04-11T09:55:04.923 回答