See commit messages for more details.
TLDR: 1st commit, replaced ServiceInterfacePrinter with a ringbuffer version utilizing space more efficiently and the consumer now only prints out a fixed amount of bytes per task (no more deadline misses on big prints). 2nd commit, fixes a compile time bug were SerialBufferAdapter type is dependent on target (uses either uint64_t or uint32_t) => now only uint32_t.
Tests: Printed out entire Persistent TM Store on the iOBC without any deadline misses.
See commit messages for more details.
TLDR: 1st commit, replaced ServiceInterfacePrinter with a ringbuffer version utilizing space more efficiently and the consumer now only prints out a fixed amount of bytes per task (no more deadline misses on big prints). 2nd commit, fixes a compile time bug were SerialBufferAdapter type is dependent on target (uses either uint64_t or uint32_t) => now only uint32_t.
Tests: Printed out entire Persistent TM Store on the iOBC without any deadline misses.
Previously the printer used a 2d array mechanism to queue up messages,
by selecting a free slot with help of a etl::bitset for tracking. A
message is then sent to the callback what slot is filled up and the
callback then drains the entire queue and prints out the messages.
This was prone to deadline issues, since the entire queue was always
flushed and often I noticed a deadline missed messages when developing
other stuff. Also memory is inefficiently used with the 2d array.
This new version fixes the above using a ring buffer datastructure. We
use a flat array and 2 integer pointers for storing and tracking the
bytes to print. So now there isn't any wasted space between messages.
Also with the design of the ring buffer messages can be written in and
read out at the same time, so we have minimal mutex use (just for
updating the integer pointers). To address the deadline issue, the
callback also only prints out a limited number of bytes per cycle.
(Also the printer code in general has been optimized a bit, since it was
quite needlessly big)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
See commit messages for more details.
TLDR: 1st commit, replaced ServiceInterfacePrinter with a ringbuffer version utilizing space more efficiently and the consumer now only prints out a fixed amount of bytes per task (no more deadline misses on big prints). 2nd commit, fixes a compile time bug were SerialBufferAdapter type is dependent on target (uses either uint64_t or uint32_t) => now only uint32_t.
Tests: Printed out entire Persistent TM Store on the iOBC without any deadline misses.