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

Отправлено konst 19 сентября 2001 г. 15:22
В ответ на: То, что Вы рассказали (+) отправлено просто так 19 сентября 2001 г. 12:41

имеют опцию типа autostatic. Ее использование заставляет компилятор размещать все локальные переменные как статические - т.е. в фиксированные ячейки памяти. Сделано это исключительно из-за "незаточенности" 51 ядра под C - отсутствия эффективного механизма доступа к переменным, размещенным в стеке. Если эту опцию отключить, компилятор размещает не статические локальные переменные, как и положено, в стеке, но код получается длинный и долгий.
В AVR таких проблем нет - индексная адресация по Z и по Y имеется.
Поэтому в качестве указателя стека данных IAR и использует Y. Однако
для эффективности (что бы каждый раз при входе в функцию не лазить
в SP) стек данных выделен в отдельный CSTAK.
Длину же стека (или обоих стеков в случае AVR) по определению точно предсказать не может ни один компилятор - откуда ему знать про
используемые вами прерывания, глубину рекурсивных вызовов и т.д.?
компилятор - откуда ему знать про ваши преры.

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

Ответы



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

E-mail: info@telesys.ru