From a9b05b08842d31b343b5da2239fb583712748d7a Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 17 Jul 2020 12:37:21 +0200 Subject: [PATCH] Change to attachInterruptArg() Change to attachInterruptArg() saving 76 bytes --- tasmota/xsns_01_counter.ino | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/tasmota/xsns_01_counter.ino b/tasmota/xsns_01_counter.ino index 48452752f..dde9a420e 100644 --- a/tasmota/xsns_01_counter.ino +++ b/tasmota/xsns_01_counter.ino @@ -36,6 +36,8 @@ const char kCounterCommands[] PROGMEM = D_PRFX_COUNTER "|" // Prefix void (* const CounterCommand[])(void) PROGMEM = { &CmndCounter, &CmndCounterType, &CmndCounterDebounce, &CmndCounterDebounceLow, &CmndCounterDebounceHigh }; +uint8_t ctr_index[MAX_COUNTERS] = { 0, 1, 2, 3 }; + struct COUNTER { uint32_t timer[MAX_COUNTERS]; // Last counter time in micro seconds uint32_t timer_low_high[MAX_COUNTERS]; // Last low/high counter time in micro seconds @@ -47,8 +49,10 @@ struct COUNTER { uint32_t last_cycle; uint32_t cycle_time; -void ICACHE_RAM_ATTR CounterUpdate(uint8_t index) -{ +//void ICACHE_RAM_ATTR CounterUpdate(uint8_t index) { +void ICACHE_RAM_ATTR CounterIsrArg(void *arg) { + uint32_t index = *static_cast(arg); + uint32_t time = micros(); uint32_t debounce_time; @@ -116,7 +120,7 @@ void ICACHE_RAM_ATTR CounterUpdate(uint8_t index) } } } - +/* void ICACHE_RAM_ATTR CounterUpdate1(void) { CounterUpdate(0); @@ -136,7 +140,7 @@ void ICACHE_RAM_ATTR CounterUpdate4(void) { CounterUpdate(3); } - +*/ /********************************************************************************************/ bool CounterPinState(void) @@ -151,8 +155,8 @@ bool CounterPinState(void) void CounterInit(void) { - typedef void (*function) () ; - function counter_callbacks[] = { CounterUpdate1, CounterUpdate2, CounterUpdate3, CounterUpdate4 }; +// typedef void (*function) () ; +// function counter_callbacks[] = { CounterUpdate1, CounterUpdate2, CounterUpdate3, CounterUpdate4 }; for (uint32_t i = 0; i < MAX_COUNTERS; i++) { if (PinUsed(GPIO_CNTR1, i)) { @@ -160,10 +164,12 @@ void CounterInit(void) pinMode(Pin(GPIO_CNTR1, i), bitRead(Counter.no_pullup, i) ? INPUT : INPUT_PULLUP); if ((0 == Settings.pulse_counter_debounce_low) && (0 == Settings.pulse_counter_debounce_high) && !Settings.flag4.zerocross_dimmer) { Counter.pin_state = 0; - attachInterrupt(Pin(GPIO_CNTR1, i), counter_callbacks[i], FALLING); +// attachInterrupt(Pin(GPIO_CNTR1, i), counter_callbacks[i], FALLING); + attachInterruptArg(Pin(GPIO_CNTR1, i), CounterIsrArg, &ctr_index[i], FALLING); } else { Counter.pin_state = 0x8f; - attachInterrupt(Pin(GPIO_CNTR1, i), counter_callbacks[i], CHANGE); +// attachInterrupt(Pin(GPIO_CNTR1, i), counter_callbacks[i], CHANGE); + attachInterruptArg(Pin(GPIO_CNTR1, i), CounterIsrArg, &ctr_index[i], CHANGE); } } }