Re[5]: Драйверы ядра Windows на ARM
От: Sergei I. Gorelkin Россия  
Дата: 07.11.21 13:20
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, mike_rs, Вы писали:


ЕМ>>>чтение серии двухбайтовых слов (WORD) через указатель в цикле?


_>>а в чем проблема?


ЕМ>ARM такое умеет — читать двухбайтовое слово по нечетному адресу? Или компилятор просто будет разбивать на два однобайтовых чтения? Например, PDP-11 не умел работать со словами по нечетным адресам, и компилятор C с этим ничего не делал — выравнивание нужно было обеспечивать самому.


ARM-ы разные бывают. Например, ядро Cortex-M0 не допускает невыровненный доступ, а Cortex-M3 — имеет бит в одном из регистров, определяющий, допускать или нет. Плюс, при работе с периферией, отображаемой в адресное пространство, могут быть дополнительные ограничения — например, доступ строго по 4 байта.
Что касается поддержки компилятором, то у gcc есть __attribute__((packed)) вроде бы для этой цели, но никакой разницы в коде при его применении я не заметил. Возможно, так собран конкретный тулчейн, возможно, надо еще что-то добавлять в командной строке, возможно, просто лыжи не едут.
Так что лучше всего обеспечить выравнивание самостоятельно. Оно и на x86 будет работать быстрее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.