Simulink coder packed structs
Show older comments
Hello, is there a way to have the Simulink autocoder turn bus objects into packed structs (byte alignment=1)? E.g., the struct definition might look like:
struct __attribute__((__packed__)) mystruct_A {
char a;
int b;
char c;
};
Thanks!
1 Comment
Answers (1)
Mark McBroom
on 29 Mar 2025
0 votes
See the "Alignment" property for Simulink.Bus elements defined here: https://www.mathworks.com/help/simulink/slref/simulink.bus.html
Thanks.
Mark.
1 Comment
Amin
7 minutes ago
The Alignment property of Simulink.Bus does not make the generated C struct packed (byte-aligned). It only controls the alignment of the bus as a whole in memory, not the internal layout of its elements.
For example, even with Alignment = 1, the generated code is still of the form:
typedef struct {
real32_T a;
uint16_T b;
uint8_T c;
} MyStruct;
and the compiler may still insert padding between fields.
So this does not produce:
typedef struct __attribute__((__packed__)) {
...
} MyStruct;
As far as I understand, to achieve a truly packed layout with Simulink Coder, the only robust approaches are:
- Define the struct manually in a header with __attribute__((__packed__)) and set the bus to Imported, or
- Accept the generated struct layout and design the binary data to match the compiler’s padding.
If there is a way to force packed structs directly from Simulink Coder (e.g., via configuration or TLC), I would be very interested to know.
Categories
Find more on Simulink Coder in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!