aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster/fsm-main.c
diff options
context:
space:
mode:
authorSelene ToyKeeper2019-11-14 19:44:57 -0700
committerSelene ToyKeeper2019-11-14 19:44:57 -0700
commit1a85469b00856020e061170c031d47173f298d93 (patch)
treeb30725c34f27797516f8bc82b49bcf59801b17c8 /spaghetti-monster/fsm-main.c
parentfixed some compile issues related to delay_4ms() (diff)
parentturned off muggle mode on Q8 and MF01S, to make builds small enough again (diff)
downloadanduril-1a85469b00856020e061170c031d47173f298d93.tar.gz
anduril-1a85469b00856020e061170c031d47173f298d93.tar.bz2
anduril-1a85469b00856020e061170c031d47173f298d93.zip
merged irq-refactor branch, which fixes some small but long-standing issues:
- occasional missed button events while asleep - occasional short/aborted frames in aux LED sleep animation - rare case of bogus voltage and/or temperature values - fixed issue where nice_delay_ms() didn't work in setup() - fixed theoretical possibility of extra-noisy buttons causing a hang Also does some other things: - cleans up the ADC code significantly - adds a voltage stabilizer/lowpass option (enabled on t1634 builds) - greatly reduces time spent per interrupt, which might make a future PWM-DSM technique possible - moves most interrupt-handling logic to a non-critical code path, deferring that code until timing doesn't matter as much - sped up button state measurements - turned off muggle mode on a couple builds which were too big
Diffstat (limited to 'spaghetti-monster/fsm-main.c')
-rw-r--r--spaghetti-monster/fsm-main.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/spaghetti-monster/fsm-main.c b/spaghetti-monster/fsm-main.c
index e537a9e..c9ab69b 100644
--- a/spaghetti-monster/fsm-main.c
+++ b/spaghetti-monster/fsm-main.c
@@ -123,7 +123,6 @@ int main() {
#else
delay_4ms(1);
#endif
- empty_event_sequence();
// fallback for handling a few things
#ifndef DONT_USE_DEFAULT_STATE
@@ -160,6 +159,9 @@ int main() {
standby_mode();
}
+ // catch up on interrupts
+ handle_deferred_interrupts();
+
// give the recipe some time slices
loop();
@@ -168,4 +170,22 @@ int main() {
}
}
+
+void handle_deferred_interrupts() {
+ /*
+ if (irq_pcint) { // button pressed or released
+ // nothing to do here
+ // (PCINT only matters during standby)
+ }
+ */
+ if (irq_adc) { // ADC done measuring
+ ADC_inner();
+ // irq_adc = 0; // takes care of itself
+ }
+ if (irq_wdt) { // the clock ticked
+ WDT_inner();
+ // irq_wdt = 0; // takes care of itself
+ }
+}
+
#endif