|
@@ -2,26 +2,40 @@
|
|
|
|
|
|
#include "timer.h"
|
|
|
|
|
|
-void timer_init(void) {}
|
|
|
+static systime_t last_systime = 0;
|
|
|
+static systime_t overflow = 0;
|
|
|
+static uint32_t current_time_ms = 0;
|
|
|
|
|
|
-void timer_clear(void) {}
|
|
|
+void timer_init(void) {
|
|
|
+ timer_clear();
|
|
|
+}
|
|
|
+
|
|
|
+void timer_clear(void) {
|
|
|
+ last_systime = chVTGetSystemTime();
|
|
|
+ overflow = 0;
|
|
|
+ current_time_ms = 0;
|
|
|
+}
|
|
|
|
|
|
-uint16_t timer_read(void)
|
|
|
-{
|
|
|
- return (uint16_t)ST2MS(chVTGetSystemTime());
|
|
|
+uint16_t timer_read(void) {
|
|
|
+ return (uint16_t)timer_read32();
|
|
|
}
|
|
|
|
|
|
-uint32_t timer_read32(void)
|
|
|
-{
|
|
|
- return ST2MS(chVTGetSystemTime());
|
|
|
+uint32_t timer_read32(void) {
|
|
|
+
|
|
|
+ systime_t current_systime = chVTGetSystemTime();
|
|
|
+ systime_t elapsed = current_systime - last_systime + overflow;
|
|
|
+ uint32_t elapsed_ms = ST2MS(elapsed);
|
|
|
+ current_time_ms += elapsed_ms;
|
|
|
+ overflow = elapsed - MS2ST(elapsed_ms);
|
|
|
+ last_systime = current_systime;
|
|
|
+
|
|
|
+ return current_time_ms;
|
|
|
}
|
|
|
|
|
|
-uint16_t timer_elapsed(uint16_t last)
|
|
|
-{
|
|
|
- return (uint16_t)(ST2MS(chVTTimeElapsedSinceX(MS2ST(last))));
|
|
|
+uint16_t timer_elapsed(uint16_t last) {
|
|
|
+ return timer_read() - last;
|
|
|
}
|
|
|
|
|
|
-uint32_t timer_elapsed32(uint32_t last)
|
|
|
-{
|
|
|
- return ST2MS(chVTTimeElapsedSinceX(MS2ST(last)));
|
|
|
+uint32_t timer_elapsed32(uint32_t last) {
|
|
|
+ return timer_read32() - last;
|
|
|
}
|