| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Помогите начинающему по ATmega8515
05.12.2011, 17:45
|
|
|
Гражданин KAZUS.RUN
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
Спасибо Kison! Добрался до своего компа - все замечательно работает!  Теперь еще и есть на какой пример опираться в дальнейшем освоении.
|
|
|
|
06.12.2011, 20:44
|
|
|
Гражданин KAZUS.RUN
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
Блин, еще вопрос возник - если в вызываемой из основной программы функции я использую функцию обработки прерывания, например от переполнения таймера Т0, то в основной программе я уже не могу использовать обработчик прерывания от переполнения Т0, правильно? Или нет? Ведь вектор обработки этого прерывания уже занят...
|
|
|
|
06.12.2011, 21:24
|
|
|
Заблокирован
Регистрация: 14.04.2008
Адрес: Украина, совсем рядом от террористов!
Сообщений: 388
Сказал спасибо: 32
Сказали Спасибо 85 раз(а) в 62 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
Сообщение от roma9112
|
|
если в вызываемой из основной программы функции я использую функцию обработки прерывания, например от переполнения таймера Т0, то в основной программе я уже не могу использовать обработчик прерывания от переполнения Т0
|
Во истинная сила и мощь языка С
|
|
|
|
07.12.2011, 06:26
|
|
|
Гражданин KAZUS.RUN
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
Сообщение от ALEKSEY188
|
Во истинная сила и мощь языка С
|
В смысле???
|
|
|
|
07.12.2011, 08:43
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
Сообщение от roma9112
|
если в вызываемой из основной программы функции я использую функцию обработки прерывания...
|
Вообще-то обработчик прерывания должен быть как можно короче (потому что пока он работает остальные прерывания ждут) и часто всего лишь устанавливает флаг для отработки его в основном цикле. Поэтому вызов функции прерывания из программы достаточно редкая вещь. Однако ничто этому не мешает, обработчик - такой же кусок программы, как и остальные, разве что в конце не ret, а reti, разрешающий прерывания.
Вы хотите вызывать обработчик из основной программы. Хорошо. Но во время его работы может возникнуть прерывание, снова его вызывающее. Он отработает от начала до конца и вернётся, куда-то в середину собственного тела (здесь уже прочие прерывания будут разрешены!). Что же с переменными, которые использует обработчик? Какое их значение после возврата "к прошлой жизни"? Погуглите "реентерабельность" - это свойство функции правильно работать, будучи вызванной одновременно в нескольких экземплярах - естественное дело для многозадачных операционных систем. Или функция может вызывать сама себя, это используется при вычислении сходящихся рядов.
|
|
|
|
07.12.2011, 09:40
|
|
|
Гражданин KAZUS.RUN
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
У меня немного по другому построена программа:
- Сначала вызываю функцию в которой описан обработчик прерывания от переполнения Т0
- затем происходит выход из этой функции в основную программу main, и вот уже в ней я могу использовать(написать) другой обработчик того же прерывания от переполнения Т0, но которое и вызываться будет по условиям описанным в main?
|
|
|
|
07.12.2011, 10:21
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
Сообщение от roma9112
|
У меня немного по другому построена программа:
- Сначала вызываю функцию в которой описан обработчик прерывания от переполнения Т0
- затем происходит выход из этой функции в основную программу main, и вот уже в ней я могу использовать(написать) другой обработчик того же прерывания от переполнения Т0, но которое и вызываться будет по условиям описанным в main?
|
Обработчик прерывания "не подчиняется" main. Он случается вдруг от события, момент которого main не может предвидеть; он выполняется и дальше main и её функции продолжают жить, как ни в чём ни бывало.
Если ваше "сначала" - это до входа в основной цикл, когда прерывания запрещены, то вы ничем не рискуете. Если у вас две одинаковые функции - одна обработчик прерывания, а другая - для вызова из main, тоже ничего страшного, просто лишний расход памяти программы. Если вам не нужно реагировать на переполнение T0 немедленно, а можно подождать вплоть до времени основного цикла, то обработчик прерывания Т0 это установка бита (флаг) в переменной, видимой в основном цикле. (Одна! команда ассемблера "sbr Rr,(1‹‹bitNbr)" если флаги в регистре).
Main смотрит на флаг, если он установлен вызывает обработчик, который сбрасывает флаг и что-то делает. Так делается "системный тик", например, раз в 10 мс (по таймеру) опрашиваются клавиши, раз в 500 мс мигает светодиод, наращиваются секунды и т.д. Всё это происходит с точностью +- ‹время цикла main› (джиттер), при том что частота вызовов стабильна.
Последний раз редактировалось makakus; 07.12.2011 в 10:28.
|
|
|
|
07.12.2011, 10:29
|
|
|
Гражданин KAZUS.RUN
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
Чего-то я не пойму ничего блин  Наверное так объясняю, хочу понять - можно ли в разных функциях, не работающих одновременно написать в каждой свой обработчик одного и того же прерывания? Компилятор "поймет" к какой функции какой обработчик надо подтыкать? Или обработчик определенного прерывания во всей программе может быть только один?
|
|
|
|
07.12.2011, 11:12
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.10.2007
Сообщений: 2,758
Сказал спасибо: 1,100
Сказали Спасибо 1,033 раз(а) в 568 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
Сообщение от roma9112
|
|
написать в каждой свой обработчик одного и того же прерывания?
|
Так разберитесь, что такое прерывание. А это когда программа вдруг переходит на заранее заданный адрес (в таблице прерываний). Там лежит команда перехода. На обработчик прерывания. Обработчик отработал и вернул программу в точку, откуда вдруг упрыгал. И тогда что значит "несколько обработчиков"?
|
|
|
|
07.12.2011, 11:38
|
|
|
Гражданин KAZUS.RUN
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
|
Re: Помогите начинающему по ATmega8515
Да подумал, что можно в обработчике прерывания поместить, как бы правильнее сказать-то, вариант выбора обработки прерывания(или это компилятор может делать), в зависимости от каких то условий, а далее перейти на этот самый вариант...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:50.
|
|