[an error occurred while processing this directive] [an error occurred while processing this directive]
Дело в том, что для x51 обычно используется "компилированный" стек.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено vmp 19 сентября 2001 г. 14:49
В ответ на: Просветите, пожалуйста, по поводу размеров стека для IAR-ских компиляторов для AVR (+) отправлено просто так 19 сентября 2001 г. 11:14

Это связано с ограничениями системы команд 51-го процессора. Можно сравнить:
Оператор var = 1 при компилированном стеке сгенерит:
mov var,#1
а при честной реализации стека:
mov a,sp
add a,#var
mov r0,a
mov @r0,#1
Недостаток первого случая - программа должна быть статической, без рекурсии и косвенных вызовов (где-то на уровне фортрана :). К счастью, большинство программ именно такие.

Для AVR существует индексный метод адресации, при котором можно написать что-то типа var(sp) (точнее, y+var). Поэтому доступ к локальным переменным на стеке достаточно простой. Было бы неразумным неиспользовать данную возможность (тем более, что доступ к переменным в памяти там более медленный) и накладывать ограничения на использование рекурсии.

Вдобавок, значительное число функций на AVR просто не использует стек данных - обычно все локальные переменные и параметры функции размещаются на регистрах.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru