ardupilot 系统时间见解

1. 无法使用usleep函数

usleep() 是 Unix 和 Linux 平台下的一个函数, 使用usleep函数会报错,即使引用了头文件<unistd.h>

undefined reference to `usleep'

ArduPilot 的任务调度是通过定时器定时调度一系列任务来实现的,它本身并没有直接设置休眠时间的具体方法

2. 使用任务调度延迟

一种常见的方法是使用相关的硬件模块,例如实时时钟(RTC)来控制设备的休眠和唤醒。
通过设置 RTC 的定时功能,在指定的时间间隔后唤醒设备。
另外,具体的实现方式还可能涉及到对设备代码的修改和调试。这需要一定的编程知识和对 ArduPilot 系统的了解。
可以使用以下两个函数获得usleep的效果,都是通过调度器来实现的

// 参数是uint16类型,最大为65535
hal.scheduler->delay(100);  //休眠100毫秒
hal.scheduler->delay_microseconds(1000) // 休眠1微秒

注意:

  1. 过度使用短时间的延迟可能会影响系统的实时性能,特别是在对时间敏感的任务中。
  2. 确保延迟的时间符合您的实际需求,避免不必要的等待。

3.获取系统时间戳

pixhawk一般是没有RTC模块的,也无网络,获取实时时间并不可靠
但是pixhawk上电后会有个启动时间,可以通过计算时间差来获取相对时间
在ArduPilot中,micros()函数返回Arduino板开始运行当前程序时的微秒数。该数字在大约70分钟后溢出,即回到零。

uint32_t now = AP_HAL::micros(); // 单位微秒

在16MHz Arduino板(例如Duemilanove和Nano)上,此函数的分辨率为4微秒(即返回值总是4的倍数)。在8MHz Arduino板(例如LilyPad)上,此函数的分辨率为8微秒。
在进行时间比较或计算时,也需要考虑溢出的情况,可以使用无符号长整型进行减法运算,然后判断结果是否小于期望的时间间隔。

相关推荐

  1. ardupilot 系统时间见解

    2024-07-17 01:00:02       17 阅读
  2. ArduPilot开源代码之AP_DAL研读系列

    2024-07-17 01:00:02       14 阅读
  3. 硬件时间系统时间同步

    2024-07-17 01:00:02       51 阅读
  4. Linux如何查看系统时间

    2024-07-17 01:00:02       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 01:00:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 01:00:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 01:00:02       58 阅读
  4. Python语言-面向对象

    2024-07-17 01:00:02       69 阅读

热门阅读

  1. EFFICIENT MODULATION FOR VISION NETWORKS

    2024-07-17 01:00:02       16 阅读
  2. 里氏替换原则

    2024-07-17 01:00:02       22 阅读
  3. 网络安全-网络安全及其防护措施2

    2024-07-17 01:00:02       22 阅读
  4. Git 的基本概念和使用方式

    2024-07-17 01:00:02       25 阅读
  5. 常见的SQL MODE及其解释

    2024-07-17 01:00:02       23 阅读
  6. [C++]类作用域

    2024-07-17 01:00:02       22 阅读
  7. 入门C语言只需一个星期(星期一)

    2024-07-17 01:00:02       27 阅读