реклама на сайте
подробности

 
 
> Как инициировать стек в AtMega 128, Как инициировать стек в AtMega 128
Oops
сообщение Jan 29 2010, 12:05
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870



Здравствуйте!!!
Работаю с Atmega 128. Вопрос такой, подскажите как выделить под стек 2КБайта ОЗУ встроенной в данный микроконтроллер. Как это сделать на языке С? Приведите примерчик плиз rolleyes.gif

Спасибо!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
skef
сообщение Jan 29 2010, 12:31
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



как вариант, сделать ассемблерную вставку:

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

p.s. На сях не пишу, но интересно, зачем суваться встек?


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jan 29 2010, 12:40
Сообщение #3


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Oops @ Jan 29 2010, 15:05) *
Как это сделать на языке С?


Все зависит от вашего компилятора.
В IAR в настройках проекта это делается, можно в линкеровском скрипте также.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Oops
сообщение Jan 29 2010, 13:49
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870



Сначала писал программку в Code Vizion при компиляции выскочила ошибка о том что недостаточно стека и как его увеличить используя меню данной среды. Увеличил стек с 1024К до 2500 (рис 1)- все скомпилилилось и прекрасно работает(рис 2). Сейчас компилирую эти же исходники в IAR там прога компилится но работает неправильно (пропадают глобальные переменные, да и вообще непонятно куда девает и откуда он берет значения некоторых переменных) в общем думаю что тоже надо стек увеличить, пробовал в настройках компилятора IAR увеличивать но получаю ошибки (рис 3), в общем 2К там мне поставить не удалось. Вот я и думаю может можно в коде задать, в Code Vizion все без проблем получилось а в IAR не получается. Может я чтото не так делаю??
Как правильно задать в IAR стек на 2К?
Спасибо!!!

Сообщение отредактировал Oops - Jan 29 2010, 13:52
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
MSprut
сообщение Jan 29 2010, 14:15
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



В IAR, в опциях проекта нужно уменьшить heap size с 0х10 до 0х08 или 0х07.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jan 30 2010, 05:49
Сообщение #6


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Oops @ Jan 29 2010, 16:49) *
Как правильно задать в IAR стек на 2К?
Спасибо!!!


Так вы похоже "кучу" используете.
Вам наоборот сегмент HEAP надо увеличить.
Menu->Project->Options
Появиться окошко, там смотрим General Options. Здесь есть вкладки Heap Configuration для настройки HEAP. И вкладка System.
На вкладке System есть параметр CSTACK - это стек данных и RSTACK - это стек адресов возврата функций(это аппаратный стек, туда автоматически сохраняются адреса возвратов при вызове функции или при возникновении прерывания).


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Oops
сообщение Jan 31 2010, 11:18
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870



Здравствуйте!!!
Увеличил Heap и Stack в IAR как ВЫ посоветовали - все заработало. Смотрю свой проект в AVR Studio отладчике и вижу следующее (рис_1). Почему Data Stack и Program Stack - Disable. Почему они не задействовались, как их сделать Enable?

Спасибо!!!

Сообщение отредактировал Oops - Jan 31 2010, 11:19
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Александр Куличо...
сообщение Feb 1 2010, 17:03
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Эти функции работают только для ICE50
Go to the top of the page
 
+Quote Post
Oops
сообщение Feb 2 2010, 12:44
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 28-08-08
Из: г.Омск
Пользователь №: 39 870



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

Понятно. Пасиб rolleyes.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.10167 секунд с 7
ELECTRONIX ©2004-2016