Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, mike_rs, Вы писали:
ЕМ>>>чтение серии двухбайтовых слов (WORD) через указатель в цикле?
_>>а в чем проблема?
ЕМ>ARM такое умеет — читать двухбайтовое слово по нечетному адресу? Или компилятор просто будет разбивать на два однобайтовых чтения? Например, PDP-11 не умел работать со словами по нечетным адресам, и компилятор C с этим ничего не делал — выравнивание нужно было обеспечивать самому.
ARM-ы разные бывают. Например, ядро Cortex-M0 не допускает невыровненный доступ, а Cortex-M3 — имеет бит в одном из регистров, определяющий, допускать или нет. Плюс, при работе с периферией, отображаемой в адресное пространство, могут быть дополнительные ограничения — например, доступ строго по 4 байта.
Что касается поддержки компилятором, то у gcc есть __attribute__((packed)) вроде бы для этой цели, но никакой разницы в коде при его применении я не заметил. Возможно, так собран конкретный тулчейн, возможно, надо еще что-то добавлять в командной строке, возможно, просто лыжи не едут.
Так что лучше всего обеспечить выравнивание самостоятельно. Оно и на x86 будет работать быстрее.