diff options
| author | Selene ToyKeeper | 2019-11-24 16:21:40 -0700 |
|---|---|---|
| committer | Selene ToyKeeper | 2019-11-24 16:21:40 -0700 |
| commit | 30510a7948815f3092b8a2eff3321ad85ed5c480 (patch) | |
| tree | 4a1b68628c779bf4092a64ae027917529d03e158 /spaghetti-monster/fsm-main.c | |
| parent | merged changes from fsm branch, including version check and stuck-button safety (diff) | |
| parent | added -fwhole-program gcc flag, suggested by Agro. Signficantly reduces ROM ... (diff) | |
| download | anduril-30510a7948815f3092b8a2eff3321ad85ed5c480.tar.gz anduril-30510a7948815f3092b8a2eff3321ad85ed5c480.tar.bz2 anduril-30510a7948815f3092b8a2eff3321ad85ed5c480.zip | |
merged from upstream fsm branch to get a whole bunch of kernel-level improvements
Diffstat (limited to 'spaghetti-monster/fsm-main.c')
| -rw-r--r-- | spaghetti-monster/fsm-main.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/spaghetti-monster/fsm-main.c b/spaghetti-monster/fsm-main.c index e537a9e..4ad1e16 100644 --- a/spaghetti-monster/fsm-main.c +++ b/spaghetti-monster/fsm-main.c @@ -37,7 +37,7 @@ ISR(TIMER1_COMPA_vect) { #endif #if (ATTINY == 25) || (ATTINY == 45) || (ATTINY == 85) -inline void hw_setup() { +static inline void hw_setup() { // configure PWM channels #if PWM_CHANNELS >= 1 DDRB |= (1 << PWM1_PIN); @@ -69,7 +69,7 @@ inline void hw_setup() { PCMSK = (1 << SWITCH_PIN); // pin change interrupt uses this pin } #elif (ATTINY == 1634) -inline void hw_setup() { +static inline void hw_setup() { // this gets tricky with so many pins... // ... so punt it to the hwdef file hwdef_setup(); @@ -79,22 +79,24 @@ inline void hw_setup() { #endif -#ifdef USE_REBOOT -void prevent_reboot_loop() { +//#ifdef USE_REBOOT +static inline void prevent_reboot_loop() { // prevent WDT from rebooting MCU again MCUSR &= ~(1<<WDRF); // reset status flag wdt_disable(); } -#endif +//#endif int main() { // Don't allow interrupts while booting cli(); - #ifdef USE_REBOOT + //#ifdef USE_REBOOT + // prevents cycling after a crash, + // whether intentional (like factory reset) or not (bugs) prevent_reboot_loop(); - #endif + //#endif hw_setup(); @@ -123,7 +125,6 @@ int main() { #else delay_4ms(1); #endif - empty_event_sequence(); // fallback for handling a few things #ifndef DONT_USE_DEFAULT_STATE @@ -160,6 +161,9 @@ int main() { standby_mode(); } + // catch up on interrupts + handle_deferred_interrupts(); + // give the recipe some time slices loop(); @@ -168,4 +172,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 |
