Пытаюсь прочитать невыровненое слово(4 байта) из массива char cmd_data[]:
int val = *((int*)(&cmd_data[6]))
Компилятор (Keil4) генерирует одну инструкцию:
LDR R8,[R4,#0x0006], где R4-указатель на массив, #0x0006-индекс,
после выполнения которой в R8 заносится содержимое ячеек:
(от старшей к младшей) 5,4,7,6 (ожидалось - 9,8,7,6), что,
наверное, правильно и вызвано спецификой ядра.
Но даже если так, то разве компилятор не должен предусматривать
все эти вещи и генерить несколько инструкций, и, пусть и со
снижением производительности, но читать правильно?
Поделитесь опытом, как поступают в таких случаях.