[an error occurred while processing this directive]
Обычно компиляторы для 51-х процессоров располагают (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Беня 09 октября 2002 г. 11:40
В ответ на: Проблема в другом... отправлено AIRiLS 09 октября 2002 г. 11:11

локальные переменные в специальном стеке для локальных переменных (это не тот стек, в который заносятся адреса возврата программ и PUSH и POP, а другой). Его размер просчитывается линкером - он просматривает все дерево вызова функций (функция может вызываться из нескольких мест - нужно учесть все варианты) и формирует необходимый размер стека. Каждая локальная переменная имеет статический постоянный адрес. Правда при таком построении компиляторов невозможно использование рекурсивных функций. По-моему, Keil принадлежит к числу таких компиляторов.
Компиляторы для AVR и MSP-430 устроены по-другому - у них локальные переменные располагаются динамически (им это архитектура позволяет). Но все равно у них два стека. Здесь уже возможно использование рекурсивных функций.
Правда некоторые компиляторы для 51-х процессоров имеют опции - динамически располагать локальные переменные в стеке или статически. Если динамически, то объем кода возрастет из-за использования косвенной адресации при обращении к локальным переменным, так что это не выгодно. Я не знаю, есть ли у Keil такая возможность, да она в общем-то и не нужна.

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

Ответы



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

E-mail: info@telesys.ru