[an error occurred while processing this directive]
Ответ: Судя по Вашему предыдущему сообщению тут дело в следующем.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Bill 15 декабря 2002 г. 11:42
В ответ на: Он учитывает самый худший вариант? у меня 4 прерывания плюс максимально третий уровень вложенности обычных подпрограмм, это 7*2=14 байт, так чего он ругался на static переменные?? отправлено EV 15 декабря 2002 г. 10:24

В опциях проекта установлен размер стеков RSTACK и CSTACK. Поскольку у Вас область памяти была занята под статические переменные, то линкер просто не мог зарезевировать память под стек нужного размера. И естественно ругался. Чтобы его успокоить нужно либо уменьшить память, занятую под переменные (что Вы и сделали), либо уменьшить размер стека в опциях проекта. Но в последнем случае, появляется риск переполнения стека с непредсказуемыми последствиями.
Компилятор в листинге указывает для каждой функции размер обоих стеков. Худший случай он конечно же не учитывает и Вам нужно самому определить размер стеков исходя из возможной глубины вложенности Ваших функций, включая функции обработки прерывний.
И еще. Ведь Вы можете изменять размеры стеков RSTACK и CSTACK независимо друг от друга. Можно увеличить один стек и при этом уменьшить другой, так что при этом общий размер стековой памяти останется неизменным.
А вообще-то мне кажется, что статические переменные внутри фукций следует использовать лишь в исключительных случаях. У контроллера достаточно регистров для хранения данных, да и код получается короче.

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

Ответы



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

E-mail: info@telesys.ru