[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Это связано с ограничениями системы команд 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