summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas Schodet2012-05-21 00:31:25 +0200
committerNicolas Schodet2012-05-21 00:31:25 +0200
commite472abd631d23ace75636a352fe2e12407f89dcf (patch)
treed1ca9f0ab79682c46c17f9a24f1bf7bb7c70da9e
parent5f27f7e1f41352cb7e4983de75314639c8928859 (diff)
digital/io-hub/src/guybrush: fix chrono issueeurobot-2012-finals
-rw-r--r--digital/ai/src/utils/chrono.c6
-rw-r--r--digital/ai/src/utils/chrono.h2
-rw-r--r--digital/ai/src/utils/timer.avr.c10
-rw-r--r--digital/ai/src/utils/timer.h2
4 files changed, 12 insertions, 8 deletions
diff --git a/digital/ai/src/utils/chrono.c b/digital/ai/src/utils/chrono.c
index 85dc9483..8560c3e0 100644
--- a/digital/ai/src/utils/chrono.c
+++ b/digital/ai/src/utils/chrono.c
@@ -44,7 +44,7 @@
static uint32_t chrono_tick_left_;
/** Last timer tick value. */
-static uint8_t chrono_last_tick_;
+static uint16_t chrono_last_tick_;
/** Is chrono started? */
static uint8_t chrono_started_;
@@ -62,8 +62,8 @@ chrono_update (void)
{
if (chrono_started_)
{
- uint8_t new_tick = timer_get_tick ();
- uint8_t diff = new_tick - chrono_last_tick_;
+ uint16_t new_tick = timer_get_tick ();
+ uint16_t diff = new_tick - chrono_last_tick_;
chrono_last_tick_ = new_tick;
if (diff > chrono_tick_left_)
chrono_tick_left_ = 0;
diff --git a/digital/ai/src/utils/chrono.h b/digital/ai/src/utils/chrono.h
index 42ee6f9b..085b1a5e 100644
--- a/digital/ai/src/utils/chrono.h
+++ b/digital/ai/src/utils/chrono.h
@@ -30,7 +30,7 @@
*/
/** Duration of a match in milliseconds, with margin. */
-#define CHRONO_MATCH_DURATION_MS (90000 - 5500)
+#define CHRONO_MATCH_DURATION_MS (90000 - 1500)
/** Start chrono count down. */
void
diff --git a/digital/ai/src/utils/timer.avr.c b/digital/ai/src/utils/timer.avr.c
index d00278f8..9a6e3ede 100644
--- a/digital/ai/src/utils/timer.avr.c
+++ b/digital/ai/src/utils/timer.avr.c
@@ -33,7 +33,7 @@
static volatile uint8_t timer_overflow;
/** Incremented when timer overflowed. */
-static volatile uint8_t timer_tick;
+static volatile uint16_t timer_tick;
ISR (TIMER0_OVF_vect)
{
@@ -79,9 +79,13 @@ timer_wait (void)
return late;
}
-uint8_t
+uint16_t
timer_get_tick (void)
{
- return timer_tick;
+ uint16_t tick;
+ intr_flags_t flags = intr_lock ();
+ tick = timer_tick;
+ intr_restore (flags);
+ return tick;
}
diff --git a/digital/ai/src/utils/timer.h b/digital/ai/src/utils/timer.h
index dd71681f..0d597870 100644
--- a/digital/ai/src/utils/timer.h
+++ b/digital/ai/src/utils/timer.h
@@ -62,7 +62,7 @@ uint8_t
timer_wait (void);
/** Get a tick value, incremented at each tick, never reset. */
-uint8_t
+uint16_t
timer_get_tick (void);
#endif /* timer_h */