You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
while (pwmState.pwmUpdate) {
if (idle) {
delay(0);
}
MEMBARRIER();
}
from static IRAM_ATTR void _notifyPWM(PWMState *p, bool idle)
from IRAM_ATTR bool _stopPWM_weak(uint8_t pin)
A. This causes a busy wait inside an ISR (#8043).
B. The IRQ for PWM (NMI) does interrupt other ISRs that may be busy-waiting in notifyPWM. OK.
C. Won't any other GPIO interrupt still be blocked by the waiting ISR in A? Therefore, depending on how long PWM needs to clear the ISR in A to continue in _notifyPWM, every GPIO IRQ gets delayed? Does this leave room for acceptable responsiveness?
The text was updated successfully, but these errors were encountered:
dok-net
changed the title
Use of non-IRAM_ATTR function inside IRAM_ATTR function: core_esp8266_waveform_pwm.cpp
Use of busy-wait inside IRAM_ATTR function: core_esp8266_waveform_pwm.cpp
May 18, 2021
@earlephilhower Please check the busy-wait (idle == false)
from
static IRAM_ATTR void _notifyPWM(PWMState *p, bool idle)
from
IRAM_ATTR bool _stopPWM_weak(uint8_t pin)
A. This causes a busy wait inside an ISR (#8043).
B. The IRQ for PWM (NMI) does interrupt other ISRs that may be busy-waiting in notifyPWM. OK.
C. Won't any other GPIO interrupt still be blocked by the waiting ISR in A? Therefore, depending on how long PWM needs to clear the ISR in A to continue in
_notifyPWM
, every GPIO IRQ gets delayed? Does this leave room for acceptable responsiveness?The text was updated successfully, but these errors were encountered: