Регистровая переменная в IAR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Регистровая переменная в IAR

Сообщение mackerel »

Собственно, сабж. Как задать размещение локальной переменной в регистре (неважно в каком, лишь бы не в RAM!)?
Реклама
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

Есть ли смысл в этом? При включении оптимизации компилятор сам старается разместить все локальные в регистрах.
Глобальные и статические в регистрах ещё как то понятно, но локальные зачем указывать?
Реклама
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

asteroid7 писал(а):Есть ли смысл в этом? При включении оптимизации компилятор сам старается разместить все локальные в регистрах.
Глобальные и статические в регистрах ещё как то понятно, но локальные зачем указывать?
Понятно, что старается... Но у меня есть функция с несколькими локальными переменными, от скорости обращения к которым зависит, собственно, работоспособность изделия. Вот и хотелось бы иметь твёрдую гарантию, что они обязательно будут регистровыми, независимо ни от чего.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Сообщение BCluster »

В Си есть модификатор register для этого, то есть:
register int variable;

Кроме register для avr имеет место еще flash, eeprom (эти в кодвижне точно есть, в яре хз)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
xelos
Потрогал лапой паяльник
Сообщения: 336
Зарегистрирован: Пн мар 20, 2006 13:05:08
Контактная информация:

Сообщение xelos »

в gcc volatile вроде помещает переменную в регистр.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

xelos писал(а):в gcc volatile вроде помещает переменную в регистр.
нет, volatile никогда нигде не давало гарантии того, что переменная окажется в регистре. volatile означает, что при любом использовании переменной надо обязательно считать ее значение. то есть для обычной переменной Var при вычислении X = Var * B + E * Var; компилятор генерирует код, который математически тождественен выражению X = Var * (B + E); а для volatile Var будет вычисляться именно так, как записано: оба упоминания переменной приведут к тому, что из памяти будут извлечены значения 2 раза.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

BCluster писал(а):В Си есть модификатор register для этого
Я сейчас прочитал про него, он определяет, что переменная должна предпочтительно помещаться в регистр (если я правильно понял). Т.е. он как-бы советует... А мне хочется твёрдой уверенности...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

я бы советовал просто посмотреть листинг, чтобы увидеть, как с этими переменными компилятор поступает. локальные переменные компилятор стремится разместить в регистрах, и только слишком большое их обилие может помешать это сделать.

кроме того, по моему личному опыту, попытки перемудрить компилятор редко приводят к успеху - ваши попытки что-то улучшить при помощи модификатора register скорее всего либо не приведут вообще ни к какому эффекту (в плане увеличения быстродействия), либо дадут отрицательный результат. просто используйте максимально возможности оптимизатора по скорости - и все. во всяком случае, без анализа листинга не стоит и пытаться "оптимизировать" самостоятельно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Сообщение BCluster »

Советует то оно да - но если у вас нет более предпочитаемых по мнению компилятора переменных она будет записана в регистр.
В общем, у меня она всегда была в регистре. Ну... Других вариантов нет, звиняйте) Посмотрите, главное чтоб по скорости все работало - реально то все равно будет оно в регистре или нет.
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

mackerel писал(а):... хотелось бы иметь твёрдую гарантию, что они обязательно будут регистровыми, независимо ни от чего.
Вас спасёт только ASM. IAR квалификатор "register", обычно, игнорирует.
Ну и как вариант, считаю его извращением, сделать переменную глобальной и объявить её через "__regvar".
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

Ну, глобальными эти переменные делать как-то не хочется... Наверно, всё-таки буду выходной листинг проверять, убеждаясь, что в нужной функции нужные переменные таки регистровые.
Всем спасибо за участие...
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Сообщение BCluster »

Вы бы проверяли просто достаточно ли производительности - если ее хватает не все ли равно где переменная?
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

BCluster писал(а):Вы бы проверяли просто достаточно ли производительности
При использовании переменных в RAM - однозначно недостаточно, в чём и фишка.
Вообще-то без дополнительных мер и этого не хватает - приходится ещё циклы линейными участками заменять кое-где... макросы там... и т. п. Но это всё понятно как сделать.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»