Осваиваю тут карты памяти, и возникла нужда поработать со структурами их регистров.
К примеру:
Код
__packed struct CID
{
byte man_ID: 8;
byte oem_ID[2];
byte product_name[5];
byte revision: 8;
dword serial: 32;
unsigned : 4;
word man_date: 12;
unsigned crc: 7;
unsigned dummy: 1;
};
Вроде бы всё хорошо, да только данные в такой структуре должны идти линейно сверху вниз - байт 0 - биты 31...24, байт 1 - биты 23...16 и т.д. (big endian).
А компилятор (RealView) считает наоборот - сначала младшие биты (little endian).
То есть читаем слово revision, в регистре должны быть данные вида 0x08070605 [31...0], а на деле имеем 0x05060708...
Есть ли способ побороть такую досадную "однобокость"?
Иначе придётся ручками обрабатывать все битовые сдвиги и маски...