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;