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

Отправлено просто так 19 сентября 2001 г. 14:39
В ответ на: Компилятор 1.40 для AVR отправлено Михаил Е. 19 сентября 2001 г. 13:57

Аргументы функций действительно передаются через стек - это понятно. Вопрос в другом : допустим Вы из main() вызываете функцию f1(), а затем функцию f2(), которая вызывает в свою очередь f1() (т е f1() вызывается из двух веток.

void f1( void) {
char massiv1[ 20] ;
...
}

void f2( void) {
char massiv2[ 20] ;
...
f1() ; // вызов f1() второй раз из f2()
}

void main( void) {
f1() ; // вызов f1() первый раз (из main())
f2() ;
}

Так вот если размещение локального массива massiv1[] при первом вызове (из main()) и при втором вызове ( из f2()) разное, значит компилятор ведет свой внутренний стек. А если одно и то же - по одним и тем же адресам - значит никакой внутренний стек не ведется, а линкер "понимает", что самая "плохая" ситуация - это второй вызов, когда уже существуют локальные переменные massiv2[20] и надо massiv1[20] (и в первом и во втором случае) располагать с учетом того, что уже в стеке есть massiv2.
В общем это можно глянуть в emulator-e или в simulatore.

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

Ответы



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

E-mail: info@telesys.ru