SZHY 2021-05-18 09:48 采纳率: 0%
浏览 21

arm开发板使用uint64_t变量获取微秒级时间时出现错误,无法获取所有值

uint64_t get_usec() {
    struct timeval tv;
    gettimeofday(&tv, NULL);
    uint64_t tus = tv.tv_sec * 1000000LL + tv.tv_usec;

    return tus;
}

获取到的微秒时间: tus = 2098365996;

 

这个时间应该是没有到微秒级别。不知道是什么原因?

 

  • 写回答

1条回答 默认 最新

  • 泡沫o0 2023年度博客之星上海赛道TOP 1 2023-06-08 11:17
    关注

    你的代码看上去没有问题,它应该能返回微秒级别的时间。但是你看到的结果似乎并不是你所期待的。这可能是由于以下几个原因:

    1. 整数溢出:在一些环境中,time_t 类型(这是 tv.tv_sec 的类型)可能被定义为 32 位整数,而不是 64 位整数。如果 tv.tv_sec 大于大约 2147 秒(这是 32 位整数可以表示的最大值除以 1000000),那么在执行 tv.tv_sec * 1000000LL 时就会发生溢出,结果将不可预测。为了避免这个问题,你可以尝试将 tv.tv_sec 显式地转换为 uint64_t,然后再进行乘法运算:
    uint64_t tus = ((uint64_t)tv.tv_sec) * 1000000LL + tv.tv_usec;
    
    1. ARM CPU的特性:一些 ARM CPU 默认不支持 64 位整数运算。因此,即使你的代码在其他平台(如 x86)上工作正常,它也可能在 ARM 平台上出现问题。你可能需要检查你的 ARM 编译器和设备的配置,看看是否支持 64 位整数运算。

    2. 系统调用gettimeofday的实现gettimeofday 是系统调用,它的实现和具体的操作系统、硬件等因素有关。在一些环境中,gettimeofday 可能无法提供真正的微秒级别的精度。

    你可以尝试使用其他方式来获取微秒级别的时间,比如使用 clock_gettime() 函数,如果你的系统支持的话。如果问题仍然存在,你可能需要深入调查你的环境和硬件配置。

    评论

报告相同问题?

悬赏问题

  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请