Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
09.05.2011, 20:52
|
|
Частый гость
Регистрация: 17.12.2010
Сообщений: 10
Сказал спасибо: 2
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Странности отладчика в AVR studio
Только недавно начал писать код в этой студии (версия 4). Студи глючновата (watch криво работают), но в общем-то работает. При отладке вывилась какая-то програмная аномалия:
есть код такого содержания
Код:
|
void handleExternalInterrupt(unsigned char intNumber) {
unsigned char state = intNumber ? getbit(PIND, 3) : getbit(PIND, 2);
.......
........
}
/**
* External interrupt 0
*/
SIGNAL (SIG_INTERRUPT0) {
handleExternalInterrupt(0);
}
/**
* External interrupt 1
*/
SIGNAL (SIG_INTERRUPT1) {
handleExternalInterrupt(1);
} |
Так вот, при входе в ф-ю handleExternalInterrupt в watch параметр intNumber равен 104, окошко CPU показывает то же значение в регистре R28, что побуждает меня верить отладчику. Для студии нужен какокой-то особенный синтаксис, что я на так пишу?
|
|
|
Сказали "Спасибо" anrkaid
|
|
|
09.05.2011, 21:51
|
|
Частый гость
Регистрация: 04.01.2010
Адрес: Россия, Киров
Сообщений: 31
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Странности отладчика в AVR studio
Когда вы пишите на языке среднего или высокого уровня, то предоставляете компилятору право выбирать самому регистры для переменных(как глобальных, так и локальных), поэтому ничего удивительного нет в том, что компилятор выбрал для хранения переменной intNumber регистр R28. Для полного контроля регистров пишите на Асме!)
|
|
|
Сказали "Спасибо" Beginner43
|
|
|
09.05.2011, 22:31
|
|
Частый гость
Регистрация: 17.12.2010
Сообщений: 10
Сказал спасибо: 2
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Странности отладчика в AVR studio
За ответ спасибо, но это-то я как раз понимаю, и в этом нет проблемы.
Проблема меня уже взбесила, где, черт возьми, моя единица??? Где мой ноль? Откуда берется это 104?
|
|
|
Сказали "Спасибо" anrkaid
|
|
|
10.05.2011, 00:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Странности отладчика в AVR studio
А давайте листинг handleExternalInterrupt посмотрим.
|
|
|
|
10.05.2011, 18:57
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 181
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
|
Re: Странности отладчика в AVR studio
Сообщение от anrkaid
|
За ответ спасибо, но это-то я как раз понимаю, и в этом нет проблемы.
Проблема меня уже взбесила, где, черт возьми, моя единица??? Где мой ноль? Откуда берется это 104?
|
Про оптимизацию слышали?
Разве не проще выложить сокращенный (только то, что не работает) проект для студии?
Последний раз редактировалось CodeNameHawk; 10.05.2011 в 19:47.
|
|
|
Сказали "Спасибо" CodeNameHawk
|
|
|
10.05.2011, 20:01
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Странности отладчика в AVR studio
Вместо SIGNAL (SIG_INTERRUPT0) рекомендуется использовать конструкцию
Код:
|
ISR(ADC_vect)
{
// user code here
} |
|
|
|
|
10.05.2011, 20:32
|
|
Частый гость
Регистрация: 17.12.2010
Сообщений: 10
Сказал спасибо: 2
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Странности отладчика в AVR studio
Сообщение от CodeNameHawk
|
Про оптимизацию слышали?
Разве не проще выложить сокращенный (только то, что не работает) проект для студии?
|
Я просто думал, что для AVR какой-нибудь ограниченный C, или я как-то не так писал.
Сейчас, в конце-концов, прерывание работает правильно, как ни странно. Почему заработало - пока понять не смог. ![Бьюсь об стену](images/smilies/icon_obstenu.gif) Быть может это от того, что я симулировал схему одновременно со включенным протеусом...
Последний раз редактировалось anrkaid; 10.05.2011 в 20:35.
|
|
|
Сказали "Спасибо" anrkaid
|
|
|
11.05.2011, 02:45
|
|
Вид на жительство
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 360
Сказал спасибо: 10
Сказали Спасибо 73 раз(а) в 58 сообщении(ях)
|
Re: Странности отладчика в AVR studio
Я чего-то не понимаю? Вы о Atmel AVRstudio говорите?
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
|
|
|
Сказали "Спасибо" Murka-MakMur
|
|
|
11.05.2011, 18:32
|
|
Частый гость
Регистрация: 04.01.2010
Адрес: Россия, Киров
Сообщений: 31
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Странности отладчика в AVR studio
По поводу передачи параметров в функцию подробно и доступно можно прочитать здесь http://citforum.ru/programming/c/h15.shtml.
|
|
|
Сказали "Спасибо" Beginner43
|
|
|
11.05.2011, 20:24
|
|
Частый гость
Регистрация: 17.12.2010
Сообщений: 10
Сказал спасибо: 2
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Странности отладчика в AVR studio
Да нет, с этим у меня все в порядке. Но. Проблемы не ждут! Чтобы не создавать тему спрошу тут.
Итак, с кнопками я разобрался, приступил к ADC. Худо-бедно настроил, вот так:
Цитата:
|
ADMUX = 0b01000111;
_delay_us(10);
ADCSRA = 0b10100111; // free run mode, no interrups, division factor = 128
_delay_us(10);
ADCSRA |= 0b01000000; // start conversion
|
Есои включить прерывание, то оно работает, т.е. конвертер как-то, но работает. Вот только значения выдает странные, а именно: в ADCL и ADCH записано 0x03FF, независимо от напруги на ножке. Максимум. Протеус много ругается, говорит что Reference value = 0. Возможно, я как-то не так подключил AREF, схема выглядит так:
![](http://saveimg.ru/pictures/11-05-11/ecaab8292ab2a4ab18a1b986c75c2e0c.png)
Контроллер mega8L.
P.S. много гуглил. По всей видимости - это бага протеуса. Ну хоть схема-то у меня нормальная?
Последний раз редактировалось anrkaid; 11.05.2011 в 23:08.
|
|
|
Сказали "Спасибо" anrkaid
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:54.
|
|