[an error occurred while processing this directive]
|
Есть проблема и нужно решение.
Проблема:
Есть заголовок сообщения:
struct {
int A;
int B;
int C;
} st, *ptrSt;
Формируем пакет из заголовка и, скажем, short слова:
__________________________________________
packet_0 = int_A_+_int_B_+_int_C_+_short_D
получилась длина 14 байт. Теперь помещаем точно такой же пакет сразу за первым пакетом. Получилось, что адрес нового пакета а именно его заголовок НЕ выровнен по 4байтам. На приемной стороне начинают разбирать пакеты. К первому пакету обращаются без проблем через указатель на структуру. то есть:
ptrSt = &packet_0;
a = ptrSt->A;
b = ptrSt->B;
c = ptrSt->C;
ptrToDataOfPacket = (short*)(ptrSt+1);
... = *ptrToDataOfPacket;
Теперь начинаем считывать второй пакет вместе с заголовком:
ptrSt = &packet_1;
a = ptrSt->A; - и тут же ошибка возникает в считывании:
если поле A = 0x00000001, то считанное значение будет реально 0x00010000. То есть на лицо выравнивание данных по 4байтам.
В общем, проблема у нас конкретная. Сначала писали софт на ПК и теперь пытаемся перенести его под TMS (тоже задачка?).
В общем есть ли какие-нибудь директивы компилятора или другие средства, чтобы решить проблему эту. При этом копировать куда-то не хочеться. Иначе весь софт переписывать придется
E-mail: info@telesys.ru