[an error occurred while processing this directive] [an error occurred while processing this directive]
Просветите, пожалуйста, по поводу размеров стека для IAR-ских компиляторов для AVR (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено просто так 19 сентября 2001 г. 11:14

Раньше я использовал компилятор от IAR для 51-х процессоров. Этот компилятор (вернее, линкер) сам просчитывал размер сегмента для локальных переменных, просматривая глубину вложенности функций и количество локальных переменных в них. Если была объявлена функция с локальными переменными, которая ниоткуда не вызывается, то линкер, естественно, выдавал предупреждение об этом (он не мог из-за этого вычислить требуемый размер памяти для локальных переменных). Этот механизм был очень удобен и правилен. В *.xcl файле была константа - минимальный размер для стека (в котором сохраняются адреса возврата функций и PUSH-ируются сохраняемые переменные). Если локальных переменных становилось слишком много, они "наесжали" на сегмент стека и размер стека становился меньше заданного в константе, то линкер генерировал warning. В общем приходилось прикидывать, какой тебе размер стека необходим под вызовы функций, прерывания и PUSH-ы - но это довольно легко делается.
Недавно я ознакомился с IAR C 1.40 for AVR. Я обнаружил, что там два сегмента : CSTACK и RSTACK (один для сохранения адресов функций и PUSH-ей, а другой - под локальные переменные). Но самое главное - в .xcl файле задается размер сегмента с локальными переменными!!!
Вопросы :
1) Неужели линкер не может сам вычислить требуемый размер сегмента с локальными переменными? Ведь подобный механизм у IAR-а уже был успешно реализован!
2) Если я в .xcl файле задам слишком маленький размер сегмента RSTACK под локальные переменные - линкер выдаст предупреждение об этом или же промолчит (что приведет к очень трудно находимым ошибкам в программе !!!)?
3) Каковы реальные причины явного указания размера сегмента RSTACK - может они в особенностях архитектуры AVR-ов ? (я просто глубоко не разбирался еще - просто пишу о первых впечатлениях).

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

Ответы



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

E-mail: info@telesys.ru