sanitize ISR IRAM_ATTR and global vars
This commit is contained in:
		
							parent
							
								
									c41d44bd7d
								
							
						
					
					
						commit
						69da95cd66
					
				| @ -5,6 +5,7 @@ | ||||
| #include "cyclic.h" | ||||
| #include "qrcode.h" | ||||
| #include "power.h" | ||||
| #include "timekeeper.h" | ||||
| 
 | ||||
| #if (HAS_DISPLAY) == 1 | ||||
| #include <OneBitDisplay.h> | ||||
|  | ||||
| @ -24,7 +24,7 @@ | ||||
| void irqHandler(void *pvParameters); | ||||
| void mask_user_IRQ(); | ||||
| void unmask_user_IRQ(); | ||||
| void doIRQ(int irq); | ||||
| void IRAM_ATTR doIRQ(int irq); | ||||
| 
 | ||||
| extern TaskHandle_t irqHandlerTask; | ||||
| 
 | ||||
|  | ||||
| @ -20,8 +20,9 @@ extern const char timeSetSymbols[]; | ||||
| extern Ticker timesyncer; | ||||
| extern timesource_t timeSource; | ||||
| 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 portMUX_TYPE mux; | ||||
| 
 | ||||
| void IRAM_ATTR CLOCKIRQ(void); | ||||
| void clock_init(void); | ||||
|  | ||||
| @ -317,7 +317,9 @@ void dp_drawPage(bool nextpage) { | ||||
| 
 | ||||
| #if (TIME_SYNC_INTERVAL) | ||||
|     timeState = TimePulseTick ? ' ' : timeSetSymbols[timeSource]; | ||||
|     TimePulseTick = false; | ||||
|     portENTER_CRITICAL(&mux); | ||||
|     TimePulseTick = false; // flip global variable pulse ticker
 | ||||
|     portEXIT_CRITICAL(&mux); | ||||
|     time(&now); | ||||
|     localtime_r(&now, &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) | ||||
| 1 ppsIRQ -> pps clock irq -> 1sec | ||||
| 2 (unused) | ||||
| 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)
 | ||||
| ------------------------------------------------------------------------------- | ||||
| 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
 | ||||
|  | ||||
| @ -19,7 +19,9 @@ static const char TAG[] = __FILE__; | ||||
| // G = GPS / R = RTC / L = LORA / * = no sync / ? = never synced
 | ||||
| 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; | ||||
| TaskHandle_t ClockTask = NULL; | ||||
| hw_timer_t *ppsIRQ = NULL; | ||||
| @ -211,7 +213,9 @@ void IRAM_ATTR CLOCKIRQ(void) { | ||||
| // flip time pulse ticker, if needed
 | ||||
| #ifdef HAS_DISPLAY | ||||
| #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 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user