mirror of https://github.com/ArduPilot/ardupilot
AP_HAL: support micros64() and millis64() on all platforms
this will allow for 64 bit timestamps in DF logs (Peter is working on that)
This commit is contained in:
parent
c65f5a1bda
commit
df21c6c68d
|
@ -15,11 +15,8 @@ public:
|
||||||
virtual void delay(uint16_t ms) = 0;
|
virtual void delay(uint16_t ms) = 0;
|
||||||
virtual uint32_t millis() = 0;
|
virtual uint32_t millis() = 0;
|
||||||
virtual uint32_t micros() = 0;
|
virtual uint32_t micros() = 0;
|
||||||
#if HAL_CPU_CLASS >= HAL_CPU_CLASS_150
|
|
||||||
// offer non-wrapping 64 bit versions on faster CPUs
|
|
||||||
virtual uint64_t millis64() = 0;
|
virtual uint64_t millis64() = 0;
|
||||||
virtual uint64_t micros64() = 0;
|
virtual uint64_t micros64() = 0;
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
delay for the given number of microseconds. This needs to be as
|
delay for the given number of microseconds. This needs to be as
|
||||||
|
|
|
@ -66,6 +66,24 @@ uint32_t AVRScheduler::millis() {
|
||||||
return _timer.millis();
|
return _timer.millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
64 bit version of millis(). This wraps at 32 bits on AVR
|
||||||
|
*/
|
||||||
|
uint64_t AVRScheduler::millis64() {
|
||||||
|
return millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
64 bit version of micros(). This wraps when 32 bit millis() wraps
|
||||||
|
*/
|
||||||
|
uint64_t AVRScheduler::micros64() {
|
||||||
|
// this is slow, but solves the problem with logging uint64_t timestamps
|
||||||
|
uint64_t ret = millis();
|
||||||
|
ret *= 1000ULL;
|
||||||
|
ret += micros() % 1000UL;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void AVRScheduler::delay_microseconds(uint16_t us) {
|
void AVRScheduler::delay_microseconds(uint16_t us) {
|
||||||
_timer.delay_microseconds(us);
|
_timer.delay_microseconds(us);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,8 @@ public:
|
||||||
void delay(uint16_t ms);
|
void delay(uint16_t ms);
|
||||||
uint32_t millis();
|
uint32_t millis();
|
||||||
uint32_t micros();
|
uint32_t micros();
|
||||||
|
uint64_t millis64();
|
||||||
|
uint64_t micros64();
|
||||||
void delay_microseconds(uint16_t us);
|
void delay_microseconds(uint16_t us);
|
||||||
void register_delay_callback(AP_HAL::Proc, uint16_t min_time_ms);
|
void register_delay_callback(AP_HAL::Proc, uint16_t min_time_ms);
|
||||||
|
|
||||||
|
|
|
@ -103,6 +103,18 @@ uint32_t FLYMAPLEScheduler::micros() {
|
||||||
return libmaple_micros();
|
return libmaple_micros();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t FLYMAPLEScheduler::millis64() {
|
||||||
|
return millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t FLYMAPLEScheduler::micros64() {
|
||||||
|
// this is slow, but solves the problem with logging uint64_t timestamps
|
||||||
|
uint64_t ret = millis();
|
||||||
|
ret *= 1000ULL;
|
||||||
|
ret += micros() % 1000;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void FLYMAPLEScheduler::delay_microseconds(uint16_t us)
|
void FLYMAPLEScheduler::delay_microseconds(uint16_t us)
|
||||||
{
|
{
|
||||||
delay_us(us);
|
delay_us(us);
|
||||||
|
|
|
@ -30,6 +30,8 @@ public:
|
||||||
void delay(uint16_t ms);
|
void delay(uint16_t ms);
|
||||||
uint32_t millis();
|
uint32_t millis();
|
||||||
uint32_t micros();
|
uint32_t micros();
|
||||||
|
uint64_t millis64();
|
||||||
|
uint64_t micros64();
|
||||||
void delay_microseconds(uint16_t us);
|
void delay_microseconds(uint16_t us);
|
||||||
void register_delay_callback(AP_HAL::Proc,
|
void register_delay_callback(AP_HAL::Proc,
|
||||||
uint16_t min_time_ms);
|
uint16_t min_time_ms);
|
||||||
|
|
Loading…
Reference in New Issue