Пытаюсь прочитать невыровненое слово(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), что, наверное, правильно и вызвано спецификой ядра.
Но даже если так, то разве компилятор не должен предусматривать все эти вещи и генерить несколько инструкций, и, пусть и со снижением производительности, но читать правильно?
Поделитесь опытом, как поступают в таких случаях.
|