yield update task during cycle inactivity.
This commit is contained in:
parent
73815a878c
commit
b466cf1aaf
@ -86,7 +86,9 @@ bool Strobe::begin(uint8_t pin, uint8_t pwm) {
|
|||||||
void Strobe::update(void * param) {
|
void Strobe::update(void * param) {
|
||||||
Strobe *tThis = (Strobe *) param;
|
Strobe *tThis = (Strobe *) param;
|
||||||
uint32_t last_time = 0;
|
uint32_t last_time = 0;
|
||||||
|
TickType_t xDelay;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
xDelay = (1000 / 40.0) / portTICK_PERIOD_MS; // sleep 1 dmx frame
|
||||||
// intensity changes start/stop the cycle
|
// intensity changes start/stop the cycle
|
||||||
uint16_t intensity = tThis->profile_.intensity << 8 |
|
uint16_t intensity = tThis->profile_.intensity << 8 |
|
||||||
tThis->profile_.intensity >> 8;
|
tThis->profile_.intensity >> 8;
|
||||||
@ -114,9 +116,21 @@ void Strobe::update(void * param) {
|
|||||||
// cycle restarts
|
// cycle restarts
|
||||||
tThis->state_ = STROBE_ACTIVE_ON;
|
tThis->state_ = STROBE_ACTIVE_ON;
|
||||||
last_time = now;
|
last_time = now;
|
||||||
|
// yield task until end of duration
|
||||||
|
xDelay = std::min(xDelay, dur / portTICK_PERIOD_MS);
|
||||||
} else if (elapsed > dur) { // durration period completed
|
} else if (elapsed > dur) { // durration period completed
|
||||||
// cycle enters dark phase
|
// cycle enters dark phase
|
||||||
tThis->state_ = STROBE_ACTIVE_OFF;
|
tThis->state_ = STROBE_ACTIVE_OFF;
|
||||||
|
// yield task until end of period
|
||||||
|
xDelay = std::min(xDelay, (period - dur) / portTICK_PERIOD_MS);
|
||||||
|
} else {
|
||||||
|
if (tThis->state_ = STROBE_ACTIVE_ON) {
|
||||||
|
// yield task for remainder of duration
|
||||||
|
xDelay = std::min(xDelay, (dur - elapsed) / portTICK_PERIOD_MS);
|
||||||
|
} else {
|
||||||
|
// yield task for remainder of period
|
||||||
|
xDelay = std::min(xDelay, (period - elapsed) / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +140,11 @@ void Strobe::update(void * param) {
|
|||||||
} else {
|
} else {
|
||||||
tThis->setLevel(0);
|
tThis->setLevel(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// yield task
|
||||||
|
vTaskDelay(xDelay);
|
||||||
}
|
}
|
||||||
|
vTaskDelete( NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user