Перейти к содержанию
    

Глубина стека в WinAVR

Народ горю как швед по полтавой..

Происходит переполнение стека.

Как указать глубину стека в WinAVR.

Заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так WinAVR тут не причем, если пишешь на ассемблере, предусмотри область памяти под стэк побольше, если на Си, то в опциях компилятора надо указать размер стека поболее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

про асм и про IAR это знаю, как там указывать глубину стека

Но проект написан на WInAVR, а переделываеть его просто не времени физически

подскажите тупому где в WinAVR это указывается

заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эх, снес я у себя ВинАВР, оказывается! Так что точно не скажу, но надо копаться в опциях компилятора. Не может не быть, чтобы размера стека не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эх, снес я у себя ВинАВР, оказывается! Так что точно не скажу, но надо копаться в опциях компилятора. Не может не быть, чтобы размера стека не было.

Так размер и расположение сегмента стека как, впрочем, и всех других сегментов - это забота не компилятора, а линкера.

В его опциях/настройках и надо смотреть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно покопаться в ключах -fstack- хотя это не совсем то.

Если все совсем плохо, попробовать использовать inline.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему Вы решили что это именно стек переполняется? Если используется только накристальная память то увеличивай не увеличивай - результат один - при сильном заполнении накристалки возможно наползание стека на BSS, а за ней и на DATA сегмент, в итоге данные запораты и стек поврежден. Выход один - оптимизировать программу с точки зрения использования памяти данных(уменьшать размеры массивов, оптимизировать математику для обработки "не лету",...), а также убрать рекурсивные функции(если есть таковые) и тд. Если есть внешняя память, то перенести сегмент DATA и BSS в неё. Стек оставить в накристалке, там он работает быстрей. Как перенести сегменты читайте в avr-libc-user-manual, лежит в winavr\doc.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...