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

 
 
 
Reply to this topicStart new topic
> ICCAVR глючит?, ICCAVR6.30D вообще корректный?
Vladi33
сообщение Jun 20 2005, 06:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 13-05-05
Пользователь №: 4 979



Второй день мучаюсь и ничего не понимаю:
Компилятор ICCAVR6.30D вообще корректный?
Простая программа в конце зажигаяю светодиод- незажигается удаляю предидущие строки, светодиод зажигается - нахожу критичный участок - удаляю, ситуация повторяется но уже в другом куске программы. В результате все куски правильные а всумме не работает.
Прбовол изменить глубину стека в options до 64- влияло но все равно не работает. Странно то что прога хорошо работала и то что не удается локализовать проблемму как будто она гуляет.
Mega8515 fuses 8Mhz int
Чтото неадекватно комптлируется?
Go to the top of the page
 
+Quote Post
yung
сообщение Jun 20 2005, 06:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669



В некоторых случаях критична как раз к глубине стека. Было, что ставишь маленький - глюкает, большой - глюкает, пришлось искать компромисс. Разбираться времени не было, просто подобрал и все. Если разберешься, какая зависимость, напиши.
И вот что. У меня это было как раз на 6.30. Сейчас 6.31 - такого не встречал, но и проектов такой сложности я на нем не писал.
Дай мыло, брошу дистиб на 6.31, проверим заодно.
Go to the top of the page
 
+Quote Post
Vladi33
сообщение Jun 20 2005, 06:18
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 13-05-05
Пользователь №: 4 979



Кто знает это глюк компилятора?

void delms(unsigned int ms){
unsigned int a,b;
char m;
for(a=0; a<ms; a++){
for(b=0; b<900; b++){
// ПОЧЕМУ если убрать следующую строку то работает иначе RST?
m++; //или _NOP();
}
}
}
Go to the top of the page
 
+Quote Post
Vladi33
сообщение Jun 20 2005, 06:25
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 13-05-05
Пользователь №: 4 979



ЭТО СТЕК!! был 64 (думал очень много) увеличил до 100
заработало.
Сколько его надо задавать то - так никакой памяти нехватит))))?
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 20 2005, 07:05
Сообщение #5


Знающий
****

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



Цитата(Vladi33 @ Jun 20 2005, 10:25)
ЭТО СТЕК!! был 64 (думал очень много) увеличил до 100
заработало.
Сколько его надо задавать то - так никакой памяти нехватит))))?
*

Хм, нереальный какой-то размер,
или это в целом программа такая, что 64 байта стека не хватает?


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
yung
сообщение Jun 20 2005, 07:36
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669



Слишком много переменных. Си много чего в стек загоняет при прерываниях.
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 20 2005, 08:00
Сообщение #7


Знающий
****

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



Цитата(yung @ Jun 20 2005, 11:36)
Слишком много переменных. Си много чего в стек загоняет при прерываниях.
*

Цитата(Vladi33)
Простая программа в конце зажигаяю светодиод- незажигается удаляю предидущие строки, светодиод зажигается - нахожу критичный участок - удаляю, ситуация повторяется но уже в другом куске программы.

Ключевое слово - "простая". По опыту, в программах редко получается выйти за 64 байт стека, разве что в больших проектах на пол-меги128.
правда, я пользуюсь CodeVision =)


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Vladi33
сообщение Jun 20 2005, 08:02
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 13-05-05
Пользователь №: 4 979



Нужно стремиться к минимальному количеству глобальных переменных, или наоборот избегать большого количества локальных?
Обычно в стек загоняется во время прерываний SREG и все,
или он пытается все сохранить? -так я сам знаю чего в прерывании трогать недьзя.
Go to the top of the page
 
+Quote Post
yung
сообщение Jun 20 2005, 08:09
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669



Интересу ради открой окно дизассемблера и посмотри, что и когда уходит в стек.
Go to the top of the page
 
+Quote Post
Vladi33
сообщение Jun 20 2005, 08:25
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 13-05-05
Пользователь №: 4 979



Легко сказать, в этих листингах можно долго искать истину -так все запутано и общей картины невидно. Так чтоже лучше локальные или глобальные переменные?
Go to the top of the page
 
+Quote Post
yung
сообщение Jun 20 2005, 08:33
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669



Цитата(Vladi33 @ Jun 20 2005, 11:25)
Легко сказать, в этих листингах можно долго искать истину -так все запутано и общей картины невидно. Так чтоже лучше локальные или глобальные переменные?
*


Не скажу - сам толком не знаю. Вообще-то локальные компилер старается в регистры закинуть. А насчет просмотра сделай так - открой дизассембрер и в симуляторе прогуляйся в пошаговом режиме.
Go to the top of the page
 
+Quote Post

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

 


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


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