I'm trying to convert the following c structure:
typedef struct _algo_stream_debug_pkt {
uint16_t src;
uint16_t dest;
uint16_t length;
uint16_t crc;
uint8_t command;
uint8_t status;
uint16_t sequence_num;
uint32_t timestamp;
uint16_t data_state;
uint16_t algo_out_x1;
uint16_t algo_out_x2;
uint16_t algo_out_x2;
uint16_t algo_interval;
uint16_t debug_info[10];
} algo_stream_debug_pkt ;
to protocol buffer with the following .proto file:
message m_header {
required int32 src = 1;
required int32 dst = 2;
required int32 len = 3;
required int32 crc = 4;
}
message algo_stream_debug_pkt {
required m_header header = 1;
required int32 command = 2;
required int32 status = 3;
required int32 sequence_num = 4;
required int32 timestamp = 5;
required int32 data_state = 6;
required int32 algo_out_x1 = 7;
required int32 algo_out_x2 = 8;
required int32 algo_out_x3 = 9;
required int32 algo_interval = 10;
repeated int32 debug_info = 11;
}
and the following .option file:
algo_stream_debug_pkt.debug_info max_count:10
The issue is that the encoded protocol buffer data of type algo_stream_debug_pkt uses approximately 58 bytes (when streamed to memory) for my use case. The actual c structure of algo_stream_debug_pkt uses just 48 bytes [ sizeof(algo_stream_debug_pkt) -> 48 ]. I'm wondering why the protocol buffer version consumes more space than the non - encoded c struct version given that the nanopb uses varints to represent integer types so that actual encoded version should be consuming lesser memory than the initially specified type.