uavcan: statically allocate memory pool #25716
Draft
+15
−47
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.
Solved Problem
The uavcan drivers allocate memory from the heap. This can cause memory allocations during run time if the RX/TX queues are not serviced quickly enough. This can result in system jitter. In general we have a policy of not allocating memory after init.
Solution
Statically allocate the uavcan memory pool. The HeapBasedPoolAllocator implementation seems to come from a time when RAM constraints were an ongoing battle (like flash is today). Modern flight controller designs use STM32H7 which has plenty of RAM (1MB).
Changelog Entry
For release notes:
Test coverage
FC: ARK FPV
CANnode: ARK Mosaic GPS
Context
I implemented high rate data streaming via uavcan.tunnel on the ARK Mosaic GPS and noticed the CAN bus appears to choke resulting in sporadic CAN frame loss. This was occuring in conjunction with memory allocations to increase the CAN TX queue size.