реклама на сайте
подробности

 
 
> Выравнивание переменных в Cortex-M, Не могу понять какие операции разрешены
Baser
сообщение May 3 2016, 16:55
Сообщение #1


Просто 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 вроде позволяет кое-какой невыровненный доступ, но опять, какой именно, мне не понятно.
Может есть еще документы, где это подробно расписано?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение May 5 2016, 08:44
Сообщение #2


Просто Che
*****

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



Цитата(aaarrr @ May 5 2016, 00:09) *
Правильно.

Спасибо за подтверждение sm.gif

Цитата(jcxz @ May 5 2016, 07:50) *
Вы хотя-бы разок откройте любой листинг файл, сгенерённый компилятором и посмотрите что получается при операциях с байтовыми данными. Многие вопросы сразу отпадут.

Ну таки могли бы сказать, прав я в своих рассуждениях или нет. rolleyes.gif До листинга обязательно доберусь, а пока читаю документацию. Хотел в официальных доках найти описание этих моментов, но пока не нашел - приходится догадываться и спрашивать.

Цитата(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 избыточно?
Go to the top of the page
 
+Quote Post
Baser
сообщение May 6 2016, 15:56
Сообщение #3


Просто 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внивать данные соответствующим образом.

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 21:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016