Есть такая структура
Код
#pragma pack(1)
typedef
{
uint8 a8_0;
uint8 a8_1;
uint8 a8_2;
uint8 a8_3;
uint32 data_1;
uint32 data_2;
} rtp_heder_t;
typedef
{
uint8 a8_0;
uint8 a8_1;
uint8 a8_2;
uint8 a8_3;
uint32 data_1;
uint32 data_2;
} rtp_heder_t;
далее имеем массив 32 битных значений.
Код
uint32 my_buff[BUFF_SIZE]; //он тоже выровнен к границе 32 битных слов
далее идет функция
Код
void rtp_process(uint32 data)
{
rtp_heder_t *ptr; //указатель на структуру
ptr = (rtp_heder_t*)&my_buff; //берем указатель буфера ввода
if (ptr->data_1 == data) ... //вот здесь и порылась собака, сравнение происходит побайтово.
}
{
rtp_heder_t *ptr; //указатель на структуру
ptr = (rtp_heder_t*)&my_buff; //берем указатель буфера ввода
if (ptr->data_1 == data) ... //вот здесь и порылась собака, сравнение происходит побайтово.
}
Если my_buf объявить как rtp_heder_t тогда при сравнении используется чтение 32 бит, если дело касается каких либо указателей он начинает читать побайтово. Как обойти эту проблему ?, я понимаю что компилер сделал так что код никогда в дата аборт не попадет.