Страница 2 из 3
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 13:43:00
md5sum
"Ребята, давайте жить дружно" - кот Леопольд
pyzh_man правильно Вам рисунок подбросил и там написано "Reset and Intrrupt vectors"
Первым в таблице вектор указующий что делать после сброса - вектор сброса, далее вектора прерываний.
Сброс никак нельзя считать прерыванием, т.к. невозможно выполнение программы с места прерывания. Основное требование прерываний - возможность вернуться в программу и продолжить ее выполнение и для этого сохраняется адрес точки возврата.
При сбросе в стек не заносится адрес возврата - значит сброс не прерывание.
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 13:48:50
Мастер Ломастер
md5sum писал(а):"Ребята, давайте жить дружно" - кот Леопольд
да мы не против - в морду вцепляемся не из ненависти, а из любви (к истине)
и все-таки,
md5sum, как третейский судья: вектор это адрес или команда? можно
RJMP START считать вектором?
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 13:53:10
Psych
md5sum писал(а): т.к. невозможно выполнение программы с места прерывания.
Мммм а если так: у меня по адресу 00000(начало программы) сразу стоит обработчик прерывания по POR,WDT, RST итд. Врубилось питание флажок POR взвелся пошли туда-то, потом сработал WDT опять пошли в адрес 0000, проверяем взведен ли флажок WDT и идем в другое место, нажали кнопку RST опять пошли в 000000 и проверяем флажок RESET и идем вабще незнай куда. Разве не прерывание?
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 13:54:48
Psych
Мастер Ломастер писал(а):можно RJMP START считать вектором?
Это то что находится по адресу вектора.
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 13:57:18
md5sum
Мастер Ломастер писал(а):и все-таки, md5sum, как третейский судья: вектор это адрес или команда? можно RJMP START считать вектором?
Мое мнение - адрес. Т.к. это значения, которое получит programm counter при различных прерываниях (0x001 для int0, 0x012 для USART, RX и.т.), а по адресу расположена уже команда: rjmp XXX (команда перехода) или nop
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:00:37
urry
Код: Выделить всё
с прерыванием по событию WDT: хоть в данном случае и происходит обращение к нулевому вектору, но вот как раз в этом случае ВОЗМОЖНО ПРОДОЛЖЕНИЕ с места прерывания.
проиллюстрируй примером, пожалуйста. У тебя 3 вложенные функции, в последней - длинная временная задержка, откуда ты влетел по вачдогу в резет, посмотрел флаг, по которому влетел, понял что по вач догу поэтому теперь перед установкой указателя стека, обнулением переменных, установкой портов и таймеров ты прочитал стек и узнал, где был раньше, хорошо. Ну а глубина указателя, какие переменные там хранятся - это все терра инкогнита.
Не ?
Не понимаю, пример, плиз

Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:01:31
md5sum
Psych писал(а):Мммм а если так: у меня по адресу 00000(начало программы) сразу стоит обработчик прерывания по POR,WDT, RST итд. Врубилось питание флажок POR взвелся пошли туда-то, потом сработал WDT опять пошли в адрес 0000, проверяем взведен ли флажок WDT и идем в другое место, нажали кнопку RST опять пошли в 000000 и проверяем флажок RESET и идем вабще незнай куда. Разве не прерывание?
Это условное ветвление - в зависимости от флагов...
А вот вернуться точно к последней выполненной команде Вы не сможете. А прерывание для этого и придумано - прерваться и вернуться.
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:08:09
Engineer_Keen
Если посмотреть табличку в даташите на МК, то в что идет в первом столбце - номер прерывания, а как называется столбец - "Vector №". Отсюда вывод: Вектор, это не адрес и не команда, - это
номер прерывания. Хотя для простоты его можно назвать и адресом. А уж если с контроллером "на ты", то и запись "RJMP RESET" можно назвать вектором и вас поймут!
Не придирайтесь к словам

ЗЫ: А топикстартеру так по-существу и не ответили, ну кроме первого поста

Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:08:29
Мастер Ломастер
md5sum писал(а):Т.к. это значения, которое получит programm counter при различных прерываниях (0x001 для int0, 0x012 для USART, RX и.т.)
я бы вас поправил: вектор - это
синоним адреса, скажем так, НОМЕР строки в таблице, с конкретным значением в PC он хотя и связан, но не совсем так уж прямо, во всяком случае при сбросе в PC заносится не 1, а 0. но в общем мнения у нас совпали
Psych писал(а):Это то что находится по адресу вектора.
так а
ВЕКТОР что же такое?!
Psych писал(а):у меня по адресу 00000(начало программы) сразу стоит обработчик прерывания по POR,WDT, RST итд.
прерывание или нет определяется не тем,
куда пошли, а тем,
куда вернулись после этого. приведу простой пример.
вместо любого
RJMP в любом векторе мы смело можем ставить
RETI и в этом случае программа потеряет только ту часть своей функциональности, которая обеспечивалась обработчиком этого вектора - ТОЛЬКО ЧАСТЬ. если по адресу 0000 мы поставим
RETI - будет ли вообще хоть что-то сделано в программе?! а ведь
RETI - это
возврат из прерывания! спрашивается: так прерывание ли СБРОС после этого?!
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:12:42
Мастер Ломастер
Engineer_Keen писал(а):запись "RJMP RESET" можно назвать вектором и вас поймут!
нельзя так называть! это совершенно разные вещи - адрес и команда.
urry писал(а):Код: Выделить всё
с прерыванием по событию WDT: хоть в данном случае и происходит обращение к нулевому вектору, но вот как раз в этом случае ВОЗМОЖНО ПРОДОЛЖЕНИЕ с места прерывания.
проиллюстрируй примером, пожалуйста. У тебя 3 вложенные функции, в последней - длинная временная задержка, откуда ты влетел по вачдогу в резет, посмотрел флаг, по которому влетел, понял что по вач догу поэтому теперь перед установкой указателя стека, обнулением переменных, установкой портов и таймеров ты прочитал стек и узнал, где был раньше, хорошо. Ну а глубина указателя, какие переменные там хранятся - это все терра инкогнита.
Не ?
Не понимаю, пример, плиз

все очень просто. WDT настраивается на режим "
прерывание вместо сброса", и в этом случае он просто ведет себя как еще один не очень точный таймер, срабатывающий только по переполнению. если же WDT включен в режиме "
прерывание перед сбросом", то в данном случае речь о возврате не идет, т.к. вместо возврата из прерывания выполняется аппаратный сброс.
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:15:38
Мастер Ломастер
Engineer_Keen писал(а):ЗЫ: А топикстартеру так по-существу и не ответили, ну кроме первого поста

а разве я во
втором посте не ответил? странно как-то вы оцениваете все...
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:16:00
md5sum
Engineer_Keen писал(а):Если посмотреть табличку в даташите на МК, то в что идет в первом столбце - номер прерывания, а как называется столбец - "Vector №". Отсюда вывод: Вектор, это не адрес и не команда, - это номер прерывания.
Vector № это всего-лишь НОМЕР вектора - порядковый
Вектор должен иметь направление и длинну - следовательно это адрес "куда идти"
0x001 для int0
это адрес куда пойдет АЛУ при прерывании INT0.
ЗЫ:
во всяком случае при сбросе в PC заносится не 1, а 0
я про сброс и не писал специально, а указал INT0
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:16:05
Psych
md5sum писал(а):А вот вернуться точно к последней выполненной команде Вы не сможете. А прерывание для этого и придумано - прерваться и вернуться.
Хорошо, а что вы всталяете в конце программы чтоб она выполнялась всегда? Наверно что-то типа JMP START? Или While(1)? Вот и нету возврата! Вы поставьте эти команды в другом обработчике и тоже получается возврата не будет.
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:17:35
pyzhman
Один утверждает, что хрен - это растение, другой - знаем что.

Вектор, в моем понимании, - направление. Какую команду поставили, туда и пошли. Да хоть в никуда, если есть смысл. Главное, чтобы работало так, как требуется.
ps. Нам бы еще кернель вспомнить...
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:19:45
md5sum
Psych писал(а):md5sum писал(а):А вот вернуться точно к последней выполненной команде Вы не сможете. А прерывание для этого и придумано - прерваться и вернуться.
Хорошо, а что вы всталяете в конце программы чтоб она выполнялась всегда? Наверно что-то типа JMP START? Или While(1)? Вот и нету возврата! Вы поставьте эти команды в другом обработчике и тоже получается возврата не будет.
Это из другой области....
Прерывание подразумевает
возможность вернуться,а возвращаться или нет - Ваше дело.
А при сбросе
отсутствует возможность вернуться!
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:26:58
Psych
Прерывание подразумавает приостановление выполнения текущей последовательности команд и переход к обработчику прерываний. И не надо ля-ля.
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:31:18
md5sum
Psych писал(а):Прерывание подразумавает приостановление выполнения текущей последовательности команд и переход к обработчику прерываний. И не надо ля-ля.
Ну давайте еще и Русский поучим....
"
приостановление выполнения текущей последовательности команд" - слово приостановление не подразумевает продолжение?
В таком случае перефразирую: сброс подразумевает прекращение выполнения текущей последовательности команд, без возможности возврата в точку останова.
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:34:51
Psych
md5sum писал(а):В таком случае перефразирую: сброс подразумевает прекращение выполнения текущей последовательности команд, без возможности возврата в точку останова.
Ну и? Не прервалось чтоли?
Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:35:29
Engineer_Keen
Давайте лучше английский поучим

В даташите так говорится "Reset and Interrupt Vectors". Так что, да у RESETа есть вектор, но сами авторы его за прерывание не считают. Хотя почти все признаки прерывания у него на лицо (кроме возврата).
Представьте что инициализация и основной цикл это есть обработчик прерывания ресета, ну и пусть он без RETI. Или у вас от этой мысли стек переполняется?
Самое интересное, все знают что и как работает, но спорят из-за того, что не знают как это лучше обозвать

Re: CVAVR: прерывания
Добавлено: Вт май 17, 2011 14:44:03
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.
При сбросе первое свойство отсутствует.