Цитата
который (последний, ибо утомило ) раз спрашиваю, зачем отдавая паковку на опкуп компилятору пытатся после этого перехитрить и компилятор, и себя, и сетовать на разработчиков языка, если предусмотрено УПРАВЛЕНИЕ паковкой структур???
Производительность !. Код с упакованными структурами меделеннее и более емкий. так как компилятор начинает с структурой по байтово работать.
Расмотрим такой вариант.
Есть некий интерфейс скажем UART. Он умеет отсылать массив данных.
Прототип
Код
u32_t uart_send (void *data, u32_t len);
u32_t uart_rcv (void *data, u32_t len);
Чисто гипотетически выдумаем протокол.
Структура протокола
u8_t prot_type;
u8_t paket_len;
u16_t cmd;
u32_t parametrs;
u16_t crc;
u8_t data[x]; //где x это поле данных которое имеет переменную длинну указанную в paket_len;
Сточки зрения структур "С" его надо упаковывать. Но у него все поля выравнены, и с точки зрения программы на ASM никакого выравнивания не надо так как все поля находятся с учетом алигна на своих адресах.
Имеем следующую функцию
Код
void Device_Send_Cmd(Cmd, Parametrs, char *data, u8_t len)
{
char send_buff[SEND_BUFF_SIZE];
char *data_ptr;
u32_t i;
((struct MyStr*)send_buff)->prot_type = MY_PROTOCOL;
((struct MyStr*)send_buff)->paket_len = len
((struct MyStr*)send_buff)->cmd = Cmd;
((struct MyStr*)send_buff)->parametrs= Parametrs;
((struct MyStr*)send_buff)->crc = crc_update(...);
data_ptr = &send_buff[11]; //это не достакок размер структуры нужно посчитать самому и подставить нужное смещение для данных;
for (i=0;i<len; len++) *data_ptr++ = *data++;
uart_send(send_buff, len+11); //тут тоже кривовато, но можно все вынести в дефайн
}
Вот на таком примере можете посмотреть на листинг функции с упакованной структорой и нет.
И раскажите в чем выиграш упаковки, в переносимости ? удобстве ? за все это можно заплать ценой более мощного контроллера или кричать что на С код большой и начинать функцию писать на асме, что приведет к полной потере переносимости. Иногда удорожание девайса на 10 центов недопустимо.
Исключением составляют 8 битные процессоры на них код будет одинаковый что с упакованной структурой что нет.
Цитата
пытатся после этого перехитрить и компилятор, и себя, и сетовать на разработчиков языка
Ну это уже проблемы сугобо личные...
P.S. отредактировал под автора