|
Выравнивание переменных в Cortex-M, Не могу понять какие операции разрешены |
|
|
|
May 3 2016, 16:55
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Изучаю документацию на STM32F0 и никак не могу из нее понять, какое выравнивание поддерживают ядра Cortex M0 и M3 В Programming manual Cortex-M0 сказано: Цитата 3.3.4 Address alignment An aligned access is an operation where a word-aligned address is used for a word, or multiple word access, or where a halfword-aligned address is used for a halfword access. Byte accesses are always aligned. There is no support for unaligned accesses on the Cortex-M0 processor. Any attempt to perform an unaligned memory access operation results in a HardFault exception. и в описании команд LDR and STR: Цитата The computed memory address must be divisible by the number of bytes in the load or store так вот совсем непонятно, если байтовый доступ всегда выровненный и есть команды загрузки байта LDRB and STRB, то как они работают? Наглядных картинок с примерами, которые обычно видел при изучении других архитектур, чего-то не нашел. Ядро Cortex-M3 вроде позволяет кое-какой невыровненный доступ, но опять, какой именно, мне не понятно. Может есть еще документы, где это подробно расписано?
|
|
|
|
|
 |
Ответов
|
May 5 2016, 08:44
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(aaarrr @ May 5 2016, 00:09)  Правильно. Спасибо за подтверждение  Цитата(jcxz @ May 5 2016, 07:50)  Вы хотя-бы разок откройте любой листинг файл, сгенерённый компилятором и посмотрите что получается при операциях с байтовыми данными. Многие вопросы сразу отпадут. Ну таки могли бы сказать, прав я в своих рассуждениях или нет.  До листинга обязательно доберусь, а пока читаю документацию. Хотел в официальных доках найти описание этих моментов, но пока не нашел - приходится догадываться и спрашивать. Цитата(jcxz @ May 5 2016, 07:50)  А этот мл.бит адреса имеет такой функционал только при выборке команд, к выборке данных это никак не относится. Вот за это разъяснение спасибо. Так примерно и предполагал, хотелось подтверждения. Еще вопрос: А компиляторам (IAR или gcc) в проектах с включенным режимом работы для Cortex-M0 нужно в явном виде задавать выравнивание short и long при объявлении глобальных переменных, или они это сами автоматом делают также как и для структур? Типа: Код char a; #pragma data_alignment=2 short b; char c; #pragma data_alignment=4 long d; указание выравнивания b и d избыточно?
|
|
|
|
|
May 6 2016, 15:56
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(Baser @ May 5 2016, 11:44)  Хотел в официальных доках найти описание этих моментов, но пока не нашел... Вот еще полезный документ: ARMv6-M_Architecture_Reference_Manual (DDI0419C) Это для Cortex-M0. В нем хотя бы опкоды команд приведены и поля опкодов расписаны - гораздо наглядней, чем просто описание словами в документе от STM. Но про выравнивание, так как я спрашивал, для начинающих, тоже не пишут. Считают, что это общеизвестно. Вот еще цитата из Джозефа Ю для Cortex-M3, который поддерживает невыровненный доступ: Цитата Любое обращение к невыровненным данным преобразуется интерфейсом шины в последовательность из нескольких выровненных пересылок, причём это преобразование является абсолютно прозрачным для пользователя. Поскольку при любом обращении к невыровненным данным в действительности осуществляется несколько пересылок, то для выполнения такой операции требуется большее число тактов, что в ряде случаев может оказаться нежелательным. Следовательно, для достижения максимальной производительности лучше всё же выpaвнивать данные соответствующим образом.
|
|
|
|
|
May 6 2016, 18:36
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Baser @ May 6 2016, 21:56)  ARMv6-M_Architecture_Reference_Manual (DDI0419C) Это для Cortex-M0. В нем хотя бы опкоды команд приведены и поля опкодов расписаны - гораздо наглядней, чем просто описание словами в документе от STM. Но про выравнивание, так как я спрашивал, для начинающих, тоже не пишут. Считают, что это общеизвестно. В смысле не пишут? Читать пробовали? Cortex-M0/M1: "ARMv6-M Architecture Reference Manual" параграф A3.2 "Alignment support": ARMv6-M always generates a fault when an unaligned access occurs.Cortex-M3: "ARMv7-M Architecture Reference Manual" параграф тот же. Инфа по всем ядрам есть на http://infocenter.arm.com/help/index.jsp Официальная инфа, а не вольные изложения.
|
|
|
|
Сообщений в этой теме
Baser Выравнивание переменных в Cortex-M May 3 2016, 16:55 ViKo Во все тех же книжках Джозефа Ю... May 3 2016, 17:58 jcxz Цитата(Baser @ May 3 2016, 22:55) Ядро Co... May 3 2016, 20:28 Baser Почитал посоветованного Джозефа Ю, у него описано ... May 4 2016, 20:12 aaarrr Цитата(Baser @ May 4 2016, 23:12) Правиль... May 4 2016, 21:09 jcxz Цитата(Baser @ May 5 2016, 02:12) Правиль... May 5 2016, 04:50  AleksBak Цитата(jcxz @ May 5 2016, 08:50) ...
... May 5 2016, 06:07 jcxz Цитата(Baser @ May 5 2016, 14:44) А компи... May 5 2016, 10:17 aaarrr Цитата(Baser @ May 5 2016, 11:44) указани... May 5 2016, 10:18 jcxz Цитата(Baser @ May 5 2016, 14:44) указани... May 5 2016, 10:18 Baser Цитата(jcxz @ May 6 2016, 21:36) В смысле... May 6 2016, 19:38 jcxz Цитата(Baser @ May 7 2016, 01:38) То, что... May 6 2016, 21:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|