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

 
 
> Подскажите где в WinAVR задаётся размер стека ?, Перевожу программу с WinAVR на IAR AVR
west329_
сообщение Dec 19 2008, 08:41
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Перевожу программу с WinAVR на IAR AVR.

Проект нормально собирается в WinAVR-2007122 в Programmers Notepad.

Первой что непонятно, в иаре чётко надо указывать стек для контроллера, перерыл все исходники WinAVR и make файл, ничего чтоб указывало на стек ненашол ? подскажите как быть ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Dec 19 2008, 08:51
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(west329_ @ Dec 19 2008, 10:41) *
перерыл все исходники WinAVR и make файл, ничего чтоб указывало на стек ненашол ? подскажите как быть ?
Читать описание на avr-libc (index.html->User Manual->Memory Areas and Using malloc()). Указатель стека ставится на конец набортного ОЗУ. Под стек отводится вся оставшаяся свободной набортная память.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 19 2008, 09:59
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Сергей Борщ @ Dec 19 2008, 12:51) *
Указатель стека ставится на конец набортного ОЗУ. Под стек отводится вся оставшаяся свободной набортная память.

Есть еще момент, хорошо подаваемый AVRStudio gcc plugin.
Кусок makefile. Опция линкера -minit-stack для задания начального адреса стека.
Код
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -minit-stack=0x100
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 19 2008, 10:54
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Pasha @ Dec 19 2008, 11:59) *
Опция линкера -minit-stack для задания начального адреса стека.
Не знал. Надо будет посмотреть, как она реализована. Если также, как в mspgcc - в прологе main() прописывает указатель - то это не лучшее решение. Лишний расход кода - указатель и так прописывается в стартап-коде в секции .init2. Если выкинуть .init2, программа рушится на возврате из первого же конструктора в .init6 или на возврате из первой же пользовательской функции в .init3-.init8.

Проверил. На 20070525 не работает вообще.

Но есть решение: можно передать начальный адрес как значение символа __stack:
Код
LDFLAGS += -Wl,--defsym,__stack=0x100
Тогда этот адрес будет подставлен в .init2 без всяких накладных расходов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 19 2008, 12:24
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Сергей Борщ @ Dec 19 2008, 14:54) *
Проверил. На 20070525 не работает вообще.

В 20081205 тоже, оказывается, не работает sad.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 11th August 2025 - 22:06
Рейтинг@Mail.ru


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