Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глобальные переменные CVAVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Exstreem
Использую CVAVR 1.25.9
В инструкции написано, что глобальные переменные располагаются в регистрах 2-14, локальные - с 16.
Можно ли как-то глобальную переменную разместить в регистрах более 16?
Связано с тем, что много фукнкций написано на асме. Если их объявить в функции, то к ним не обратиться (в асме) по имени, а регистр будет меняться при разных компиляциях (при добавлении переменых и т.д.). Если объявить как глобальную, то не работают операции ldi, ld, st и т.д. (регистры менее 15). А делать push-pop - не всегда целесообразно, да и тратить системное время не хочется.
Придумал такой вариант:
Код
#asm (".def Per=R16");

но CVAVR в этом случае не считает регистр зарезервированным, и поэтому может использован еще раз (!), если объявить локальные переменные средствами компилятора.
Как решена эта проблема в других компиляторах (gcc, IAR)?
oll
в gcc и iar тоже r16-r32 тоже нельзя зарезервировать - так что push-pop или микроконтроллер пожирнее или чистый ассемблер.
Exstreem
Очень жаль, что
Цитата
в gcc и iar тоже r16-r32 тоже нельзя...

Попробую использовать
Код
#asm (".def Per=R16");

в функциях где нет переменных, объявленных в компиляторе.
Надеюсь, не будет непредсказуемых ситуаций. Искать... cool.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.