From aeccb59f552d2b2285e70ec9ba901bd49a2ba4d2 Mon Sep 17 00:00:00 2001 From: Verkehrsrot Date: Sun, 3 Mar 2019 13:07:48 +0100 Subject: [PATCH] irq code sanitizations --- src/configmanager.cpp | 2 +- src/main.cpp | 32 +++++++++++++++----------------- src/paxcounter.conf | 2 +- src/payload.cpp | 2 +- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/configmanager.cpp b/src/configmanager.cpp index 419246ae..583377a8 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -19,7 +19,7 @@ void defaultConfig() { cfg.screenon = 1; // 0=disabled, 1=enabled cfg.countermode = 0; // 0=cyclic, 1=cumulative, 2=cyclic confirmed cfg.rssilimit = 0; // threshold for rssilimiter, negative value! - cfg.sendcycle = SEND_CYCLE; // payload send cycle [seconds/2] + cfg.sendcycle = SENDCYCLE; // payload send cycle [seconds/2] cfg.wifichancycle = WIFI_CHANNEL_SWITCH_INTERVAL; // wifi channel switch cycle [seconds/100] cfg.blescantime = diff --git a/src/main.cpp b/src/main.cpp index 74094336..ff0d5e4b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,10 +45,8 @@ Tasks using i2c bus all must have same priority, because using mutex semaphore // ESP32 hardware timers ------------------------------------------------------------------------------- - 0 displayIRQ -> display refresh -> 40ms (DISPLAYREFRESH_MS in paxcounter.conf) - 1 ppsIRQ -> pps clock irq -> 1sec - 2 unused - 3 unused + 0 displayIRQ -> display refresh -> 40ms (DISPLAYREFRESH_MS in +paxcounter.conf) 1 ppsIRQ -> pps clock irq -> 1sec 2 unused 3 unused // Interrupt routines @@ -316,15 +314,6 @@ void setup() { strcat_P(features, " OLED"); DisplayState = cfg.screenon; init_display(PRODUCTNAME, PROGVERSION); // note: blocking call - - // setup display refresh trigger IRQ using esp32 hardware timer - // https://techtutorialsx.com/2017/10/07/esp32-arduino-timer-interrupts/ - // prescaler 80 -> divides 80 MHz CPU freq to 1 MHz, timer 0, count up - displayIRQ = timerBegin(0, 80, true); - // interrupt handler DisplayIRQ, triggered by edge - timerAttachInterrupt(displayIRQ, &DisplayIRQ, true); - // reload interrupt after each trigger of display refresh cycle - timerAlarmWrite(displayIRQ, DISPLAYREFRESH_MS * 1000, true); #endif // show payload encoder @@ -395,16 +384,25 @@ void setup() { } #endif + // starting timers and interrupts assert(irqHandlerTask != NULL); // has interrupt handler task started? - // start timer triggered interrupts ESP_LOGI(TAG, "Starting Timers..."); + + // display interrupt #ifdef HAS_DISPLAY + // https://techtutorialsx.com/2017/10/07/esp32-arduino-timer-interrupts/ + // prescaler 80 -> divides 80 MHz CPU freq to 1 MHz, timer 0, count up + displayIRQ = timerBegin(0, 80, true); + timerAttachInterrupt(displayIRQ, &DisplayIRQ, true); + timerAlarmWrite(displayIRQ, DISPLAYREFRESH_MS * 1000, true); timerAlarmEnable(displayIRQ); #endif - sendcycler.attach(SEND_CYCLE * 2, sendcycle); + + // cyclic function interrupts + sendcycler.attach(SENDCYCLE * 2, sendcycle); housekeeper.attach(HOMECYCLE, housekeeping); -// start button interrupt +// button interrupt #ifdef HAS_BUTTON #ifdef BUTTON_PULLUP attachInterrupt(digitalPinToInterrupt(HAS_BUTTON), ButtonIRQ, RISING); @@ -424,7 +422,7 @@ void setup() { #if defined HAS_IF482 || defined HAS_DCF77 #ifndef TIME_SYNC_INTERVAL -#error you must define TIME_SNYC_INTERVAL in paxcounter.conf +#error for clock controller function TIME_SNYC_INTERVAL must be defined in paxcounter.conf #endif ESP_LOGI(TAG, "Starting Clock Controller..."); clock_init(); diff --git a/src/paxcounter.conf b/src/paxcounter.conf index a4efffeb..6d47a438 100644 --- a/src/paxcounter.conf +++ b/src/paxcounter.conf @@ -10,7 +10,7 @@ #define VERBOSE 1 // comment out to silence the device, for mute use build option // Payload send cycle and encoding -#define SEND_CYCLE 30 // payload send cycle [seconds/2], 0 .. 255 +#define SENDCYCLE 30 // payload send cycle [seconds/2], 0 .. 255 #define PAYLOAD_ENCODER 2 // payload encoder: 1=Plain, 2=Packed, 3=Cayenne LPP dynamic, 4=Cayenne LPP packed // Set this to include BLE counting and vendor filter functions diff --git a/src/payload.cpp b/src/payload.cpp index ea3faf5d..45d7e6e3 100644 --- a/src/payload.cpp +++ b/src/payload.cpp @@ -457,7 +457,7 @@ void PayloadConvert::addButton(uint8_t value) { void PayloadConvert::addTime(time_t value) { #if (PAYLOAD_ENCODER == 4) uint32_t t = (uint32_t)value; - uint32_t tx_period = (uint32_t)SEND_CYCLE * 2; + uint32_t tx_period = (uint32_t)SENDCYCLE * 2; buffer[cursor++] = 0x03; // set config mask to UTCTime + TXPeriod // UTCTime in seconds buffer[cursor++] = (byte)((t & 0xFF000000) >> 24);