Полная версия этой страницы:
ICCAVR глючит?
Vladi33
Jun 20 2005, 06:03
Второй день мучаюсь и ничего не понимаю:
Компилятор ICCAVR6.30D вообще корректный?
Простая программа в конце зажигаяю светодиод- незажигается удаляю предидущие строки, светодиод зажигается - нахожу критичный участок - удаляю, ситуация повторяется но уже в другом куске программы. В результате все куски правильные а всумме не работает.
Прбовол изменить глубину стека в options до 64- влияло но все равно не работает. Странно то что прога хорошо работала и то что не удается локализовать проблемму как будто она гуляет.
Mega8515 fuses 8Mhz int
Чтото неадекватно комптлируется?
В некоторых случаях критична как раз к глубине стека. Было, что ставишь маленький - глюкает, большой - глюкает, пришлось искать компромисс. Разбираться времени не было, просто подобрал и все. Если разберешься, какая зависимость, напиши.
И вот что. У меня это было как раз на 6.30. Сейчас 6.31 - такого не встречал, но и проектов такой сложности я на нем не писал.
Дай мыло, брошу дистиб на 6.31, проверим заодно.
Vladi33
Jun 20 2005, 06:18
Кто знает это глюк компилятора?
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();
}
}
}
Vladi33
Jun 20 2005, 06:25
ЭТО СТЕК!! был 64 (думал очень много) увеличил до 100
заработало.
Сколько его надо задавать то - так никакой памяти нехватит))))?
Цитата(Vladi33 @ Jun 20 2005, 10:25)
ЭТО СТЕК!! был 64 (думал очень много) увеличил до 100
заработало.
Сколько его надо задавать то - так никакой памяти нехватит))))?
Хм, нереальный какой-то размер,
или это в целом программа такая, что 64 байта стека не хватает?
Слишком много переменных. Си много чего в стек загоняет при прерываниях.
Цитата(yung @ Jun 20 2005, 11:36)
Слишком много переменных. Си много чего в стек загоняет при прерываниях.
Цитата(Vladi33)
Простая программа в конце зажигаяю светодиод- незажигается удаляю предидущие строки, светодиод зажигается - нахожу критичный участок - удаляю, ситуация повторяется но уже в другом куске программы.
Ключевое слово - "простая". По опыту, в программах редко получается выйти за 64 байт стека, разве что в больших проектах на пол-меги128.
правда, я пользуюсь CodeVision =)
Vladi33
Jun 20 2005, 08:02
Нужно стремиться к минимальному количеству глобальных переменных, или наоборот избегать большого количества локальных?
Обычно в стек загоняется во время прерываний SREG и все,
или он пытается все сохранить? -так я сам знаю чего в прерывании трогать недьзя.
Интересу ради открой окно дизассемблера и посмотри, что и когда уходит в стек.
Vladi33
Jun 20 2005, 08:25
Легко сказать, в этих листингах можно долго искать истину -так все запутано и общей картины невидно. Так чтоже лучше локальные или глобальные переменные?
Цитата(Vladi33 @ Jun 20 2005, 11:25)
Легко сказать, в этих листингах можно долго искать истину -так все запутано и общей картины невидно. Так чтоже лучше локальные или глобальные переменные?
Не скажу - сам толком не знаю. Вообще-то локальные компилер старается в регистры закинуть. А насчет просмотра сделай так - открой дизассембрер и в симуляторе прогуляйся в пошаговом режиме.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.