В build_uart_frame()
я вызываю calcFCS()
, который вычисляет XOR всех байтов в элементах структуры (len, cmd0, cmd1 и data).passign struct struct to function и struct padding in c programming
Я не думаю, что структура заполнена, поэтому вызовет calcFCS()
вопрос? Может кто-нибудь объяснить, в чем проблема в отношении прокладки структуры, поскольку я не понимаю ее роли здесь, а во-вторых, как я могу сделать эту операцию правильно?
Спасибо
typedef struct uart_frame {
uint8_t sof; /* 1 byte */
uint8_t len; /* 1 bytes */
uint8_t cmd0; /* 1 byte */
uint8_t cmd1;
char data[11]; /* 0 -250 byte */
unsigned char fcs; /* 1 byte */
} uart_frame_t;
//-------------------------------------------------------------------------
// Global uart frame
uart_frame_t rdata;
//-------------------------------------------------------------------------
unsigned char calcFCS(unsigned char *pMsg, unsigned char len) {
unsigned char result = 0;
while(len--) {
result ^= *pMsg++;
}
return(result);
}
//-------------------------------------------------------------------------
// Worker code to populate the frame
int build_uart_frame() {
uart_frame_t *rd = &rdata; //pointer variable 'rd' of type uart_frame
// common header codes
rd->sof = 0xFE;
rd->len = 11;
rd->cmd0 = 0x22;
rd->cmd0 = 0x05;
snprintf(rd->data, sizeof(rd->data), "%s", "Hello World");
rd->fcs = calcFCS((unsigned char *)rd, sizeof(uart_frame_t) - 1); //issue with struct padding
return 0;
}
'unsigned char len' ->' size_t len' – LPs