Optimize UART read for lighthouse #1308
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR reduces the CPU load when using the lighthouse system by optimizing the process of reading from the UART.
The current implementation works by using a queue that is filled from an interrupt, triggered when one more byte is available on the UART. The lighthouse task is removing bytes from the queue when reading the next frame and is locking on the queue to get the next byte as soon as possible. This locking (and task switching?) seems to take a long time. This PR uses a
vTaskDelay()
in a loop to make sure there are enough data in the buffer before reading to avoid the queue lock.With 4 base stations received CPU load for the LH taks goes down from 21% to 6%.
By increasing the time in the
vTaskDelay()
to 2, the CPU load goes down one or two % more, but it also adds a delay.