We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I'm using C51 v3.20, and when I compiled the following structure, the compiler allocates 6 bytes for it.
typedef struct t_channel_info { int target_temp:9; unsigned char control_mode:2; unsigned char status:2; unsigned char warming:1; int current_temp:9; unsigned char warm_proportion; } t_channel_info;
I don't use C51 but this might help. Bit fields usually are assigned as an int which would give you the first 4 members in one int, the 5th member in the 2nd int and the last in it's own byte (2 + 2 + 1 = 5). If padding is added it could become 6 bytes.
typedef struct t_channel_info { int target_temp:9; // byte 1&2 unsigned char control_mode:2; // byte 2 unsigned char status:2; // byte 2 unsigned char warming:1; // byte 2 int current_temp:9; // byte 3&4 unsigned char warm_proportion; // byte 5 } t_channel_info;
typedef struct t_channel_info { int target_temp:9; // byte 1&2 unsigned char control_mode:2; // byte 3 unsigned char status:2; // byte 3 unsigned char warming:1; // byte 3 int current_temp:9; // byte 4&5 unsigned char warm_proportion; // byte 6 } t_channel_info;