Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как инициировать стек в AtMega 128
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Oops
Здравствуйте!!!
Работаю с Atmega 128. Вопрос такой, подскажите как выделить под стек 2КБайта ОЗУ встроенной в данный микроконтроллер. Как это сделать на языке С? Приведите примерчик плиз rolleyes.gif

Спасибо!!!
skef
как вариант, сделать ассемблерную вставку:

ldi r16, high(RAMEND);
out SPH,r16 ; Set stack pointer to top of RAM
ldi r16, low(RAMEND)
out SPL,r16

p.s. На сях не пишу, но интересно, зачем суваться встек?
dimka76
Цитата(Oops @ Jan 29 2010, 15:05) *
Как это сделать на языке С?


Все зависит от вашего компилятора.
В IAR в настройках проекта это делается, можно в линкеровском скрипте также.
Oops
Сначала писал программку в Code Vizion при компиляции выскочила ошибка о том что недостаточно стека и как его увеличить используя меню данной среды. Увеличил стек с 1024К до 2500 (рис 1)- все скомпилилилось и прекрасно работает(рис 2). Сейчас компилирую эти же исходники в IAR там прога компилится но работает неправильно (пропадают глобальные переменные, да и вообще непонятно куда девает и откуда он берет значения некоторых переменных) в общем думаю что тоже надо стек увеличить, пробовал в настройках компилятора IAR увеличивать но получаю ошибки (рис 3), в общем 2К там мне поставить не удалось. Вот я и думаю может можно в коде задать, в Code Vizion все без проблем получилось а в IAR не получается. Может я чтото не так делаю??
Как правильно задать в IAR стек на 2К?
Спасибо!!!
MSprut
В IAR, в опциях проекта нужно уменьшить heap size с 0х10 до 0х08 или 0х07.
dimka76
Цитата(Oops @ Jan 29 2010, 16:49) *
Как правильно задать в IAR стек на 2К?
Спасибо!!!


Так вы похоже "кучу" используете.
Вам наоборот сегмент HEAP надо увеличить.
Menu->Project->Options
Появиться окошко, там смотрим General Options. Здесь есть вкладки Heap Configuration для настройки HEAP. И вкладка System.
На вкладке System есть параметр CSTACK - это стек данных и RSTACK - это стек адресов возврата функций(это аппаратный стек, туда автоматически сохраняются адреса возвратов при вызове функции или при возникновении прерывания).
Oops
Здравствуйте!!!
Увеличил Heap и Stack в IAR как ВЫ посоветовали - все заработало. Смотрю свой проект в AVR Studio отладчике и вижу следующее (рис_1). Почему Data Stack и Program Stack - Disable. Почему они не задействовались, как их сделать Enable?

Спасибо!!!
Александр Куличок
Эти функции работают только для ICE50
Oops
Цитата(Александр Куличок @ Feb 1 2010, 21:03) *
Эти функции работают только для ICE50

Понятно. Пасиб rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.