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

 
 
 
Reply to this topicStart new topic
> Программа выдаёт Stack Overflow
Oleg_IT
сообщение May 4 2008, 17:54
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Есть два проекта преобразованного из IAR в WinAVR-20070525. Объём исполняемых файлов отличается раз в пять. Программы сформированные IAR-ом работают нормально, а то что делает WinAVR ведёт себя непонятно. Маленькая программа работает, так же как и в IAR-е, а большая постоянно перезапускает AVR-ку (вижу по осциллографу). В эмуляторе эта программа выдавала Stack Overflow. После установки "Enable Boot Reset" в "AVR Simulator Options" эмулятор стал работать. Даже после снятия этого флажка и перекомпиляции проекта эмулятор продолжает работать. А программа в AVR-е всё равно не работает. Что это может быть? И как это исправить?
Go to the top of the page
 
+Quote Post
bzx
сообщение May 4 2008, 18:41
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



С перва, можно тупо увеличить место под стек.
Если используются стандартные С-plane функции, что то типа printf, sprintf, то можно поиграться опциями компилятора.


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 4 2008, 20:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Oleg_IT @ May 4 2008, 21:54) *
Что это может быть? И как это исправить?

IAR использует два стека. Как поступает WinAVR я не знаю. Если он использует только один стек, то этот стек может быть значительно большим по размеру. Раз симулятор указывает про переполнение стека, то его надо увеличить. Причём лучше - значительно. На деле, переполнение стека при использовании WDT именно так и будет себя вести - сбой - перезппуск и так далее.
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение May 5 2008, 03:14
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Функции printf, sprintf не использую. Программа «спотыкается» даже на первой пустой функции. Похоже, стека вообще нет!!! Маленький проект работает на ATMega16, большой, тот который не работает, на ATMega128. Может есть особенность для этого МК?
Не найду где менять или задавать размер стека. В Project Options нашел только Specify Initial Stack Address. Но что бы я там не ставил ни чего не помогает.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение May 5 2008, 03:38
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Может возможно задать вершину стека так , правда на asm

RESET1:

ldi temp,high(RAMEND) ;
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
aesok
сообщение May 5 2008, 08:23
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Oleg_IT @ May 5 2008, 07:14) *
Маленький проект работает на ATMega16, большой, тот который не работает, на ATMega128. Может есть особенность для этого МК?


Да - фюз M103C

Анатолий.
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 5 2008, 08:57
Сообщение #7


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Oleg_IT @ May 4 2008, 20:54) *
Есть два проекта преобразованного из IAR в WinAVR-20070525. Объём исполняемых файлов отличается раз в пять.
"раз в пять" возможно только в том случае, когда у WinAVR оптимизация отключена вообще. При этом и стека хватать практически наверняка не будет.



Цитата(SasaVitebsk @ May 4 2008, 23:16) *
Как поступает WinAVR я не знаю. Если он использует только один стек, то этот стек может быть значительно большим по размеру. Раз симулятор указывает про переполнение стека, то его надо увеличить. Причём лучше - значительно.
Стек один и он сразу устанавливается максимально возможного размера.



Цитата(ILYAUL @ May 5 2008, 06:38) *
Может возможно задать вершину стека так , правда на asm
RESET1:
ldi temp,high(RAMEND) ;
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
Именно эти команды и стоят в "запускалке", единственный стек вполне естественно инициализируется верхушкой памяти и получается максимально возможного размера.

Включите уровень оптимизации -Os.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение May 5 2008, 09:35
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(ReAl @ May 5 2008, 12:57) *
"раз в пять" возможно только в том случае, когда у WinAVR оптимизация отключена вообще. При этом и стека хватать практически наверняка не будет.

Раз в пять отличается один (маленький) проект от другого (большого). Между IAR-ом и WinAVR размер кода не сравнивал, так как в IAR-е работал с бинарником, а WinAVR работаю с HEX файлами.

С фюзом M103C попробую.
В WinAVR (совместно с AStudio) настроек проекта практически нет или я их не вижу.
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 5 2008, 12:48
Сообщение #9


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Oleg_IT @ May 5 2008, 12:35) *
Раз в пять отличается один (маленький) проект от другого (большого).
Ну, первое предложение не совсем "казнить нельзя помиловать", но я всё равно понял неправильно smile.gif

Цитата(Oleg_IT @ May 5 2008, 12:35) *
С фюзом M103C попробую.
В WinAVR (совместно с AStudio) настроек проекта практически нет или я их не вижу.

Ну... Если в IAR переменные вместе со стеками заказанного размера влезли в 4000 (а не 4096) байт ОЗУ, то с прошитым M103C у IAR работать будет, у gcc - нет, так как для меги128 он проинициализирует стек исходя из 4096 байт ОЗУ.
Но это вопрос к кристаллу, а не к симулятору, в симуляторе должно работать в любом случае.

У AVRstudio настроек немного, но, вообще говоря, достаточно - в project/configuration options.
Основное выбирается галками, тонкие настройки - вручную вписывать ключи gcc на закладке custom options, но это придётся таки описание на gcc почитать smile.gif


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Oleg_IT
сообщение May 6 2008, 04:50
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709



Цитата(aesok @ May 5 2008, 12:23) *
Да - фюз M103C

Анатолий.

Фьюз помог. Спасибо!!!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:39
Рейтинг@Mail.ru


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