Регистровая переменная в IAR
- Сообщения: 70
- Зарегистрирован: Пт янв 30, 2009 18:02:40
Собственно, сабж. Как задать размещение локальной переменной в регистре (неважно в каком, лишь бы не в RAM!)?
- Реклама
- Сообщения: 703
- Зарегистрирован: Вс янв 18, 2009 21:12:49
- Сообщения: 70
- Зарегистрирован: Пт янв 30, 2009 18:02:40
Понятно, что старается... Но у меня есть функция с несколькими локальными переменными, от скорости обращения к которым зависит, собственно, работоспособность изделия. Вот и хотелось бы иметь твёрдую гарантию, что они обязательно будут регистровыми, независимо ни от чего.asteroid7 писал(а):Есть ли смысл в этом? При включении оптимизации компилятор сам старается разместить все локальные в регистрах.
Глобальные и статические в регистрах ещё как то понятно, но локальные зачем указывать?
В Си есть модификатор register для этого, то есть:
register int variable;
Кроме register для avr имеет место еще flash, eeprom (эти в кодвижне точно есть, в яре хз)
register int variable;
Кроме register для avr имеет место еще flash, eeprom (эти в кодвижне точно есть, в яре хз)
- Сообщения: 336
- Зарегистрирован: Пн мар 20, 2006 13:05:08
в gcc volatile вроде помещает переменную в регистр.
Я просто верю в то, что рушить догмы - лучший способ не стареть.
- Реклама
нет, volatile никогда нигде не давало гарантии того, что переменная окажется в регистре. volatile означает, что при любом использовании переменной надо обязательно считать ее значение. то есть для обычной переменной Var при вычислении X = Var * B + E * Var; компилятор генерирует код, который математически тождественен выражению X = Var * (B + E); а для volatile Var будет вычисляться именно так, как записано: оба упоминания переменной приведут к тому, что из памяти будут извлечены значения 2 раза.xelos писал(а):в gcc volatile вроде помещает переменную в регистр.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 70
- Зарегистрирован: Пт янв 30, 2009 18:02:40
я бы советовал просто посмотреть листинг, чтобы увидеть, как с этими переменными компилятор поступает. локальные переменные компилятор стремится разместить в регистрах, и только слишком большое их обилие может помешать это сделать.
кроме того, по моему личному опыту, попытки перемудрить компилятор редко приводят к успеху - ваши попытки что-то улучшить при помощи модификатора register скорее всего либо не приведут вообще ни к какому эффекту (в плане увеличения быстродействия), либо дадут отрицательный результат. просто используйте максимально возможности оптимизатора по скорости - и все. во всяком случае, без анализа листинга не стоит и пытаться "оптимизировать" самостоятельно...
кроме того, по моему личному опыту, попытки перемудрить компилятор редко приводят к успеху - ваши попытки что-то улучшить при помощи модификатора register скорее всего либо не приведут вообще ни к какому эффекту (в плане увеличения быстродействия), либо дадут отрицательный результат. просто используйте максимально возможности оптимизатора по скорости - и все. во всяком случае, без анализа листинга не стоит и пытаться "оптимизировать" самостоятельно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Советует то оно да - но если у вас нет более предпочитаемых по мнению компилятора переменных она будет записана в регистр.
В общем, у меня она всегда была в регистре. Ну... Других вариантов нет, звиняйте) Посмотрите, главное чтоб по скорости все работало - реально то все равно будет оно в регистре или нет.
В общем, у меня она всегда была в регистре. Ну... Других вариантов нет, звиняйте) Посмотрите, главное чтоб по скорости все работало - реально то все равно будет оно в регистре или нет.
- Сообщения: 703
- Зарегистрирован: Вс янв 18, 2009 21:12:49
- Сообщения: 70
- Зарегистрирован: Пт янв 30, 2009 18:02:40
Вы бы проверяли просто достаточно ли производительности - если ее хватает не все ли равно где переменная?
- Сообщения: 70
- Зарегистрирован: Пт янв 30, 2009 18:02:40
При использовании переменных в RAM - однозначно недостаточно, в чём и фишка.BCluster писал(а):Вы бы проверяли просто достаточно ли производительности
Вообще-то без дополнительных мер и этого не хватает - приходится ещё циклы линейными участками заменять кое-где... макросы там... и т. п. Но это всё понятно как сделать.


