CVAVR: прерывания

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: CVAVR: прерывания

Сообщение md5sum »

"Ребята, давайте жить дружно" - кот Леопольд
pyzh_man правильно Вам рисунок подбросил и там написано "Reset and Intrrupt vectors"
Первым в таблице вектор указующий что делать после сброса - вектор сброса, далее вектора прерываний.
Сброс никак нельзя считать прерыванием, т.к. невозможно выполнение программы с места прерывания. Основное требование прерываний - возможность вернуться в программу и продолжить ее выполнение и для этого сохраняется адрес точки возврата.
При сбросе в стек не заносится адрес возврата - значит сброс не прерывание.
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CVAVR: прерывания

Сообщение Мастер Ломастер »

md5sum писал(а):"Ребята, давайте жить дружно" - кот Леопольд
да мы не против - в морду вцепляемся не из ненависти, а из любви (к истине) :)))

и все-таки, md5sum, как третейский судья: вектор это адрес или команда? можно RJMP START считать вектором?
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: CVAVR: прерывания

Сообщение Psych »

md5sum писал(а): т.к. невозможно выполнение программы с места прерывания.
Мммм а если так: у меня по адресу 00000(начало программы) сразу стоит обработчик прерывания по POR,WDT, RST итд. Врубилось питание флажок POR взвелся пошли туда-то, потом сработал WDT опять пошли в адрес 0000, проверяем взведен ли флажок WDT и идем в другое место, нажали кнопку RST опять пошли в 000000 и проверяем флажок RESET и идем вабще незнай куда. Разве не прерывание?
Последний раз редактировалось Psych Вт май 17, 2011 13:56:21, всего редактировалось 1 раз.
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: CVAVR: прерывания

Сообщение Psych »

Мастер Ломастер писал(а):можно RJMP START считать вектором?
Это то что находится по адресу вектора.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: CVAVR: прерывания

Сообщение md5sum »

Мастер Ломастер писал(а):и все-таки, md5sum, как третейский судья: вектор это адрес или команда? можно RJMP START считать вектором?
Мое мнение - адрес. Т.к. это значения, которое получит programm counter при различных прерываниях (0x001 для int0, 0x012 для USART, RX и.т.), а по адресу расположена уже команда: rjmp XXX (команда перехода) или nop
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: CVAVR: прерывания

Сообщение urry »

Код: Выделить всё

с прерыванием по событию WDT: хоть в данном случае и происходит обращение к нулевому вектору, но вот как раз в этом случае ВОЗМОЖНО ПРОДОЛЖЕНИЕ с места прерывания. 
проиллюстрируй примером, пожалуйста. У тебя 3 вложенные функции, в последней - длинная временная задержка, откуда ты влетел по вачдогу в резет, посмотрел флаг, по которому влетел, понял что по вач догу поэтому теперь перед установкой указателя стека, обнулением переменных, установкой портов и таймеров ты прочитал стек и узнал, где был раньше, хорошо. Ну а глубина указателя, какие переменные там хранятся - это все терра инкогнита.
Не ?
Не понимаю, пример, плиз :)
Реклама
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: CVAVR: прерывания

Сообщение md5sum »

Psych писал(а):Мммм а если так: у меня по адресу 00000(начало программы) сразу стоит обработчик прерывания по POR,WDT, RST итд. Врубилось питание флажок POR взвелся пошли туда-то, потом сработал WDT опять пошли в адрес 0000, проверяем взведен ли флажок WDT и идем в другое место, нажали кнопку RST опять пошли в 000000 и проверяем флажок RESET и идем вабще незнай куда. Разве не прерывание?
Это условное ветвление - в зависимости от флагов...
А вот вернуться точно к последней выполненной команде Вы не сможете. А прерывание для этого и придумано - прерваться и вернуться.
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: CVAVR: прерывания

Сообщение Engineer_Keen »

Если посмотреть табличку в даташите на МК, то в что идет в первом столбце - номер прерывания, а как называется столбец - "Vector №". Отсюда вывод: Вектор, это не адрес и не команда, - это номер прерывания. Хотя для простоты его можно назвать и адресом. А уж если с контроллером "на ты", то и запись "RJMP RESET" можно назвать вектором и вас поймут!
Не придирайтесь к словам :beer:
ЗЫ: А топикстартеру так по-существу и не ответили, ну кроме первого поста :oops:
Последний раз редактировалось Engineer_Keen Вт май 17, 2011 14:08:47, всего редактировалось 1 раз.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CVAVR: прерывания

Сообщение Мастер Ломастер »

md5sum писал(а):Т.к. это значения, которое получит programm counter при различных прерываниях (0x001 для int0, 0x012 для USART, RX и.т.)
я бы вас поправил: вектор - это синоним адреса, скажем так, НОМЕР строки в таблице, с конкретным значением в PC он хотя и связан, но не совсем так уж прямо, во всяком случае при сбросе в PC заносится не 1, а 0. но в общем мнения у нас совпали :beer:
Psych писал(а):Это то что находится по адресу вектора.
так а ВЕКТОР что же такое?!
Psych писал(а):у меня по адресу 00000(начало программы) сразу стоит обработчик прерывания по POR,WDT, RST итд.
прерывание или нет определяется не тем, куда пошли, а тем, куда вернулись после этого. приведу простой пример.
вместо любого RJMP в любом векторе мы смело можем ставить RETI и в этом случае программа потеряет только ту часть своей функциональности, которая обеспечивалась обработчиком этого вектора - ТОЛЬКО ЧАСТЬ. если по адресу 0000 мы поставим RETI - будет ли вообще хоть что-то сделано в программе?! а ведь RETI - это возврат из прерывания! спрашивается: так прерывание ли СБРОС после этого?!
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CVAVR: прерывания

Сообщение Мастер Ломастер »

Engineer_Keen писал(а):запись "RJMP RESET" можно назвать вектором и вас поймут!
нельзя так называть! это совершенно разные вещи - адрес и команда.
urry писал(а):

Код: Выделить всё

с прерыванием по событию WDT: хоть в данном случае и происходит обращение к нулевому вектору, но вот как раз в этом случае ВОЗМОЖНО ПРОДОЛЖЕНИЕ с места прерывания. 
проиллюстрируй примером, пожалуйста. У тебя 3 вложенные функции, в последней - длинная временная задержка, откуда ты влетел по вачдогу в резет, посмотрел флаг, по которому влетел, понял что по вач догу поэтому теперь перед установкой указателя стека, обнулением переменных, установкой портов и таймеров ты прочитал стек и узнал, где был раньше, хорошо. Ну а глубина указателя, какие переменные там хранятся - это все терра инкогнита.
Не ?
Не понимаю, пример, плиз :)
все очень просто. WDT настраивается на режим "прерывание вместо сброса", и в этом случае он просто ведет себя как еще один не очень точный таймер, срабатывающий только по переполнению. если же WDT включен в режиме "прерывание перед сбросом", то в данном случае речь о возврате не идет, т.к. вместо возврата из прерывания выполняется аппаратный сброс.
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: CVAVR: прерывания

Сообщение Мастер Ломастер »

Engineer_Keen писал(а):ЗЫ: А топикстартеру так по-существу и не ответили, ну кроме первого поста :oops:
а разве я во втором посте не ответил? странно как-то вы оцениваете все...
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: CVAVR: прерывания

Сообщение md5sum »

Engineer_Keen писал(а):Если посмотреть табличку в даташите на МК, то в что идет в первом столбце - номер прерывания, а как называется столбец - "Vector №". Отсюда вывод: Вектор, это не адрес и не команда, - это номер прерывания.
Vector № это всего-лишь НОМЕР вектора - порядковый :))
Вектор должен иметь направление и длинну - следовательно это адрес "куда идти"
0x001 для int0
это адрес куда пойдет АЛУ при прерывании INT0.
ЗЫ:
во всяком случае при сбросе в PC заносится не 1, а 0
я про сброс и не писал специально, а указал INT0
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: CVAVR: прерывания

Сообщение Psych »

md5sum писал(а):А вот вернуться точно к последней выполненной команде Вы не сможете. А прерывание для этого и придумано - прерваться и вернуться.
Хорошо, а что вы всталяете в конце программы чтоб она выполнялась всегда? Наверно что-то типа JMP START? Или While(1)? Вот и нету возврата! Вы поставьте эти команды в другом обработчике и тоже получается возврата не будет.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CVAVR: прерывания

Сообщение pyzhman »

Один утверждает, что хрен - это растение, другой - знаем что. :) Вектор, в моем понимании, - направление. Какую команду поставили, туда и пошли. Да хоть в никуда, если есть смысл. Главное, чтобы работало так, как требуется.
ps. Нам бы еще кернель вспомнить...
Docendo discimus
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: CVAVR: прерывания

Сообщение md5sum »

Psych писал(а):
md5sum писал(а):А вот вернуться точно к последней выполненной команде Вы не сможете. А прерывание для этого и придумано - прерваться и вернуться.
Хорошо, а что вы всталяете в конце программы чтоб она выполнялась всегда? Наверно что-то типа JMP START? Или While(1)? Вот и нету возврата! Вы поставьте эти команды в другом обработчике и тоже получается возврата не будет.
Это из другой области....
Прерывание подразумевает возможность вернуться,а возвращаться или нет - Ваше дело.
А при сбросе отсутствует возможность вернуться!
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: CVAVR: прерывания

Сообщение Psych »

Прерывание подразумавает приостановление выполнения текущей последовательности команд и переход к обработчику прерываний. И не надо ля-ля.
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: CVAVR: прерывания

Сообщение md5sum »

Psych писал(а):Прерывание подразумавает приостановление выполнения текущей последовательности команд и переход к обработчику прерываний. И не надо ля-ля.
Ну давайте еще и Русский поучим....
"приостановление выполнения текущей последовательности команд" - слово приостановление не подразумевает продолжение?
В таком случае перефразирую: сброс подразумевает прекращение выполнения текущей последовательности команд, без возможности возврата в точку останова.
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: CVAVR: прерывания

Сообщение Psych »

md5sum писал(а):В таком случае перефразирую: сброс подразумевает прекращение выполнения текущей последовательности команд, без возможности возврата в точку останова.
Ну и? Не прервалось чтоли?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: CVAVR: прерывания

Сообщение Engineer_Keen »

Давайте лучше английский поучим :))) В даташите так говорится "Reset and Interrupt Vectors". Так что, да у RESETа есть вектор, но сами авторы его за прерывание не считают. Хотя почти все признаки прерывания у него на лицо (кроме возврата).
Представьте что инициализация и основной цикл это есть обработчик прерывания ресета, ну и пусть он без RETI. Или у вас от этой мысли стек переполняется?
Самое интересное, все знают что и как работает, но спорят из-за того, что не знают как это лучше обозвать :)))
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: CVAVR: прерывания

Сообщение md5sum »

Engineer_Keen писал(а):Давайте лучше английский поучим :)))
И то дело! :))
Аn interrupt has four properties:
1.The Program Counter (PC) is saved in a known place.
2. All instructions before the one pointed to by the PC have fully executed.
3. No instruction beyond the one pointed to by the PC has been executed (that is no prohibition on instruction beyond that in PC, it is just that any changes they make to registers or memory must be undone before the interrupt happens).
4. The execution state of the instruction pointed to by the PC is known.
При сбросе первое свойство отсутствует.
— Не говорите мне что делать и я не скажу куда Вам идти...
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»