sanitize ISR IRAM_ATTR and global vars
This commit is contained in:
parent
c41d44bd7d
commit
69da95cd66
@ -5,6 +5,7 @@
|
|||||||
#include "cyclic.h"
|
#include "cyclic.h"
|
||||||
#include "qrcode.h"
|
#include "qrcode.h"
|
||||||
#include "power.h"
|
#include "power.h"
|
||||||
|
#include "timekeeper.h"
|
||||||
|
|
||||||
#if (HAS_DISPLAY) == 1
|
#if (HAS_DISPLAY) == 1
|
||||||
#include <OneBitDisplay.h>
|
#include <OneBitDisplay.h>
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
void irqHandler(void *pvParameters);
|
void irqHandler(void *pvParameters);
|
||||||
void mask_user_IRQ();
|
void mask_user_IRQ();
|
||||||
void unmask_user_IRQ();
|
void unmask_user_IRQ();
|
||||||
void doIRQ(int irq);
|
void IRAM_ATTR doIRQ(int irq);
|
||||||
|
|
||||||
extern TaskHandle_t irqHandlerTask;
|
extern TaskHandle_t irqHandlerTask;
|
||||||
|
|
||||||
|
@ -20,8 +20,9 @@ extern const char timeSetSymbols[];
|
|||||||
extern Ticker timesyncer;
|
extern Ticker timesyncer;
|
||||||
extern timesource_t timeSource;
|
extern timesource_t timeSource;
|
||||||
extern TaskHandle_t ClockTask;
|
extern TaskHandle_t ClockTask;
|
||||||
extern bool volatile TimePulseTick; // 1sec pps flag set by GPS or RTC
|
extern DRAM_ATTR bool TimePulseTick; // 1sec pps flag set by GPS or RTC
|
||||||
extern hw_timer_t *ppsIRQ;
|
extern hw_timer_t *ppsIRQ;
|
||||||
|
extern portMUX_TYPE mux;
|
||||||
|
|
||||||
void IRAM_ATTR CLOCKIRQ(void);
|
void IRAM_ATTR CLOCKIRQ(void);
|
||||||
void clock_init(void);
|
void clock_init(void);
|
||||||
|
@ -317,7 +317,9 @@ void dp_drawPage(bool nextpage) {
|
|||||||
|
|
||||||
#if (TIME_SYNC_INTERVAL)
|
#if (TIME_SYNC_INTERVAL)
|
||||||
timeState = TimePulseTick ? ' ' : timeSetSymbols[timeSource];
|
timeState = TimePulseTick ? ' ' : timeSetSymbols[timeSource];
|
||||||
TimePulseTick = false;
|
portENTER_CRITICAL(&mux);
|
||||||
|
TimePulseTick = false; // flip global variable pulse ticker
|
||||||
|
portEXIT_CRITICAL(&mux);
|
||||||
time(&now);
|
time(&now);
|
||||||
localtime_r(&now, &timeinfo);
|
localtime_r(&now, &timeinfo);
|
||||||
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
|
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
|
||||||
|
42
src/main.cpp
42
src/main.cpp
@ -48,37 +48,31 @@ Low priority numbers denote low priority tasks.
|
|||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
0 displayIRQ -> display refresh -> 40ms (DISPLAYREFRESH_MS)
|
0 displayIRQ -> display refresh -> 40ms (DISPLAYREFRESH_MS)
|
||||||
1 ppsIRQ -> pps clock irq -> 1sec
|
1 ppsIRQ -> pps clock irq -> 1sec
|
||||||
|
2 (unused)
|
||||||
3 MatrixDisplayIRQ -> matrix mux cycle -> 0,5ms (MATRIX_DISPLAY_SCAN_US)
|
3 MatrixDisplayIRQ -> matrix mux cycle -> 0,5ms (MATRIX_DISPLAY_SCAN_US)
|
||||||
|
|
||||||
|
|
||||||
// Interrupt routines
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
irqHandlerTask (Core 1), see irqhandler.cpp
|
|
||||||
|
|
||||||
fired by hardware
|
|
||||||
DisplayIRQ -> esp32 timer 0
|
|
||||||
CLOCKIRQ -> esp32 timer 1 or external GPIO (RTC_INT or GPS_INT)
|
|
||||||
MatrixDisplayIRQ-> esp32 timer 3
|
|
||||||
ButtonIRQ -> external GPIO
|
|
||||||
PMUIRQ -> PMU chip GPIO
|
|
||||||
|
|
||||||
fired by software
|
|
||||||
TIMESYNC_IRQ -> setTimeSyncIRQ() -> Ticker.h
|
|
||||||
CYCLIC_IRQ -> setCyclicIRQ() -> Ticker.h
|
|
||||||
SENDCYCLE_IRQ -> setSendIRQ() -> xTimer
|
|
||||||
BME_IRQ -> setBMEIRQ() -> Ticker.h
|
|
||||||
|
|
||||||
ClockTask (Core 1), see timekeeper.cpp
|
|
||||||
|
|
||||||
fired by hardware
|
|
||||||
CLOCKIRQ -> esp32 timer 1
|
|
||||||
|
|
||||||
|
|
||||||
// External RTC timer (if present)
|
// External RTC timer (if present)
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
triggers pps 1 sec impulse
|
triggers pps 1 sec impulse
|
||||||
|
|
||||||
|
|
||||||
|
// Interrupt routines
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ISRs fired by CPU or GPIO:
|
||||||
|
DisplayIRQ <- esp32 timer 0
|
||||||
|
CLOCKIRQ <- esp32 timer 1 or GPIO (RTC_INT or GPS_INT)
|
||||||
|
MatrixDisplayIRQ<- esp32 timer 3
|
||||||
|
ButtonIRQ <- GPIO <- Button
|
||||||
|
PMUIRQ <- GPIO <- PMU chip
|
||||||
|
|
||||||
|
Application IRQs fired by software:
|
||||||
|
TIMESYNC_IRQ <- setTimeSyncIRQ() <- Ticker.h
|
||||||
|
CYCLIC_IRQ <- setCyclicIRQ() <- Ticker.h
|
||||||
|
SENDCYCLE_IRQ <- setSendIRQ() <- xTimer
|
||||||
|
BME_IRQ <- setBMEIRQ() <- Ticker.h
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Basic Config
|
// Basic Config
|
||||||
|
@ -19,7 +19,9 @@ static const char TAG[] = __FILE__;
|
|||||||
// G = GPS / R = RTC / L = LORA / * = no sync / ? = never synced
|
// G = GPS / R = RTC / L = LORA / * = no sync / ? = never synced
|
||||||
const char timeSetSymbols[] = {'G', 'R', 'L', '*', '?'};
|
const char timeSetSymbols[] = {'G', 'R', 'L', '*', '?'};
|
||||||
|
|
||||||
DRAM_ATTR bool volatile TimePulseTick = false;
|
portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;
|
||||||
|
|
||||||
|
DRAM_ATTR bool TimePulseTick = false;
|
||||||
timesource_t timeSource = _unsynced;
|
timesource_t timeSource = _unsynced;
|
||||||
TaskHandle_t ClockTask = NULL;
|
TaskHandle_t ClockTask = NULL;
|
||||||
hw_timer_t *ppsIRQ = NULL;
|
hw_timer_t *ppsIRQ = NULL;
|
||||||
@ -211,7 +213,9 @@ void IRAM_ATTR CLOCKIRQ(void) {
|
|||||||
// flip time pulse ticker, if needed
|
// flip time pulse ticker, if needed
|
||||||
#ifdef HAS_DISPLAY
|
#ifdef HAS_DISPLAY
|
||||||
#if (defined GPS_INT || defined RTC_INT)
|
#if (defined GPS_INT || defined RTC_INT)
|
||||||
TimePulseTick = !TimePulseTick; // flip pulse ticker
|
portENTER_CRITICAL(&mux);
|
||||||
|
TimePulseTick = !TimePulseTick; // flip global variable pulse ticker
|
||||||
|
portEXIT_CRITICAL(&mux);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user