Skip to content

Use of busy-wait inside IRAM_ATTR function: core_esp8266_waveform_pwm.cpp #7974

Open
@dok-net

Description

@dok-net

@earlephilhower Please check the busy-wait (idle == false)

  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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions