Перевожу проект с меги 128 на LPC23xx
Есть такой кусок на С:
Код
i=((unsigned short*)&(bin_buff[1]))[0];
где
unsigned short i;
unsigned char bin_buff[18];
линкер раскидал bin_buff[] с адреса 0x4000 01e4
этой строкой хочу взять 16 бит без знака из двух байт bin_buff[2]:bin_buff[1]
проверяю на симуляторе -все ок
в железе старший байт всегда равен 0, младший - правильный
в окне дизасма в симуляторе код получился такой
Код
i=((unsigned short*)&(bin_buff[1]))[0];
0x710: 0xe59f113c LDR r1, ??DataTable10_12 ; bin_buff
0x714: 0xe1d110b1 LDRH r1, [r1, #0x1]
0x718: 0xe1cd10b0 STRH r1, [sp]
рылся-рылся в итоге чисто случайно обращаю внимание на сообщение loga:
Tue Feb 22 13:01:20 2011: Warning: The LDRH instruction at addr: 0x00000714 made an illegal unaligned access to 0x400001E5
Ну и сразу все стало на свои места.
Теперь вопрос собственно: какого %ера компилятор в купе с линкером не выдали хотя бы варнинг по этму поводу ? Все варнинги и ероры были включены. Или иначе, где я должен был почитать о такой ситуации чтоб ее не допустить ?