Make it save to use LEDs in ISR.

m17
Rob Riggs 2018-08-05 19:22:56 -05:00
rodzic 82aa99dd4f
commit 11f18d27ce
1 zmienionych plików z 6 dodań i 5 usunięć

Wyświetl plik

@ -41,28 +41,29 @@ struct Led
{}
void on() {
taskENTER_CRITICAL();
auto x = taskENTER_CRITICAL_FROM_ISR();
++count_;
if (count_ == 1) {
HAL_GPIO_WritePin(GPIOx_, pin_, GPIO_PIN_RESET);
}
taskEXIT_CRITICAL();
taskEXIT_CRITICAL_FROM_ISR(x);
}
void off() {
taskENTER_CRITICAL();
auto x = taskENTER_CRITICAL_FROM_ISR();
if (count_ > 0) --count_;
if (count_ == 0) {
HAL_GPIO_WritePin(GPIOx_, pin_, GPIO_PIN_SET);
}
taskEXIT_CRITICAL();
taskEXIT_CRITICAL_FROM_ISR(x);
}
void toggle() {
auto x = taskENTER_CRITICAL_FROM_ISR();
taskENTER_CRITICAL();
HAL_GPIO_TogglePin(GPIOx_, pin_);
count_ = 0;
taskEXIT_CRITICAL();
taskEXIT_CRITICAL_FROM_ISR(x);
}
uint32_t status() const {return count_;}