[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
имеют опцию типа autostatic. Ее использование заставляет компилятор размещать все локальные переменные как статические - т.е. в фиксированные ячейки памяти. Сделано это исключительно из-за "незаточенности" 51 ядра под C - отсутствия эффективного механизма доступа к переменным, размещенным в стеке. Если эту опцию отключить, компилятор размещает не статические локальные переменные, как и положено, в стеке, но код получается длинный и долгий.
В AVR таких проблем нет - индексная адресация по Z и по Y имеется.
Поэтому в качестве указателя стека данных IAR и использует Y. Однако
для эффективности (что бы каждый раз при входе в функцию не лазить
в SP) стек данных выделен в отдельный CSTAK.
Длину же стека (или обоих стеков в случае AVR) по определению точно предсказать не может ни один компилятор - откуда ему знать про
используемые вами прерывания, глубину рекурсивных вызовов и т.д.?
компилятор - откуда ему знать про ваши преры.
E-mail: info@telesys.ru