[an error occurred while processing this directive]
Ответ: Судя по Вашему предыдущему сообщению тут дело в следующем.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
|
|
В опциях проекта установлен размер стеков RSTACK и CSTACK. Поскольку у Вас область памяти была занята под статические переменные, то линкер просто не мог зарезевировать память под стек нужного размера. И естественно ругался. Чтобы его успокоить нужно либо уменьшить память, занятую под переменные (что Вы и сделали), либо уменьшить размер стека в опциях проекта. Но в последнем случае, появляется риск переполнения стека с непредсказуемыми последствиями.
Компилятор в листинге указывает для каждой функции размер обоих стеков. Худший случай он конечно же не учитывает и Вам нужно самому определить размер стеков исходя из возможной глубины вложенности Ваших функций, включая функции обработки прерывний.
И еще. Ведь Вы можете изменять размеры стеков RSTACK и CSTACK независимо друг от друга. Можно увеличить один стек и при этом уменьшить другой, так что при этом общий размер стековой памяти останется неизменным.
А вообще-то мне кажется, что статические переменные внутри фукций следует использовать лишь в исключительных случаях. У контроллера достаточно регистров для хранения данных, да и код получается короче.
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Ответ: У меня подобная хрень, линкер никаких ошибок не пишет но прога виснет,что лечатся подбором CSTACK'a — PVV (15.12.2002 20:34, 420 байт)
- Мне пришлось переписать прерывания, чтобы из них не было вызовов, да и вообще уменьшить вложенность. Это, правда, не CSTACK, а RSTACK облегчился.(+) — EV (16.12.2002 00:55, 202 байт)
- Ответ: Не правильно все это... :-( Тогда проще на Асме сразу писать... — PVV (16.12.2002 07:00, 80 байт)
- ! ВО!!! точно. Я на сях не писал раньше, ассембелем пользовался., х86, С51. Так до сих пор и не доезжаю до многих вещей. Например, почему гланды удаляют через Ж, а не через специально пробитые отверстия. 200 байтная программа обслуживала ввод, обработку и отображение на дисплее Искры 1030 сигналов от4х каналов аппаратуры. А тут 2к ушло на опрос кнопок, + связь по RS485 и IIC. — EV (16.12.2002 20:59, пустое)
- Ответ: Я думаю, что компилятор увеличивает размер кода по сравнению с ассемблером процентов на 10. При условии, что — Bill (16.12.2002 08:04, 642 байт)
- Ответ: Не правильно все это... :-( Тогда проще на Асме сразу писать... — PVV (16.12.2002 06:59, пустое)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru