Контроллер прерываний

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

В МК при срабатывании прерывания адрес следующей команды автоматом улетает в стек, а после обработки прерывания возобновляет прерванный алгоритм? Или же по-черезжопному дожидается окончания текущего loop, отрабатывает, а затем входит в следующий loop?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Интересное наблюдение. А как в даташите прописано? А пример того или иного поведения привести можете, запущу у себя - перепроверю тоже.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Это не наблюдение, а вопрос с предложением двух вариантов на выбор.

Просто моя человеческая логика говорит мне, что проще всего (с точки зрения разработчика МК\софта для его программирования) между loop проверять наличие прерываний. Это мне как программисту так логично, потому что события в ОПП также через зад обрабатываются - нельзя простым способом взять и отложить одну функцию для выполнения более приоритетной. Это делается программно, либо затычками жрущими ресурс. 

 

Но изучая инфу по контроллерам прерываний (в общем контексте компьютерной техники) я наткнулся на формулировку, что "процессор выполняет текущую команду, откладывает следующий адрес в стек и переходит к командам самого прерывания. после выполнения, возвращает из стека адрес, продолжает выполнять основную программу". Все красиво, но это же должен быть красивый код по обработке прерываний, а также процессор должен на него переходить. Значит для этого и процессор должен поддерживать это в таком виде, и среда программирования должна что-то закинуть во флеш, чтоб оно срабатывало по прерыванию, откладывало команды, кидалось на новый кусок кода, а потом возвращало все в зад. 

 

Вот я потому и спросил: в ардуине в частности мы имеем хорошие прерывания непосредственно в момент их возникновения, или же они обработаются после окончания loop. От этого многое зависит, если например хотим в свободное время контроллеру подкинуть не приоритетные задачи. Ну или наоборот, своевременно отреагировать на аварийную ситуацию, где 1 мкс решает исход.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Моя наверное не человеческая логика говорит о том, что если не знаешь - открой даташит и прочти .. или кратко RTFM. Но видимо .. у "человеков" свои причуды.. :)

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Проще на форуме спросить. Если кто-то сталкивался, то ответит. Для этого форумы и существуют, чтобы делиться опытом. Правда для некоторых это не очевидно, к сожалению. Но всегда же можно отфильтровать шумы.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Проще? Мне всегда импонировали люди, которые считают что им все что-то обязаны ..

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LastHopeMan пишет:

Это мне как программисту 

Если Вы программист, то Вы знаете ответ на свой вопрос и просто издеваетесь и троллите нас, чтобы посмеяться. Странные у Вас какие-то развлечения.

Если же Вы пошутили насчёт "программист", то в школу! Изучите для начала что такое прерывание. Это общее понятие и оно не зависит ни от типа процессора, ни от наличия или отсутствия в Вашей программе loop'а.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LastHopeMan пишет:

Для этого форумы и существуют, чтобы делиться опытом. Правда для некоторых это не очевидно, к сожалению. 

Да, я тоже это заметил. Вот один наш общий знакомый как-то написал:

LastHopeMan пишет:

Микросхемки 8 выходов, в каждом по 2 потенциометра. Дешевые до жути. 

Мне очень нужна такая микросхема - именно сдвоенный потенциометр в восьминогом корпусе и я дважды просил оного господина дать ссылку или хотя бы название той микросхемы, но он как-то проигнорировал.
 
Наверное, он как раз из тех, для кого "не очевидно, к сожалению".

 

ptr
Offline
Зарегистрирован: 28.05.2016

LastHopeMan пишет:

В МК при срабатывании прерывания

А про какой тип прерываний и про какой МК речь? Например, прерывание к супервизору страниц (отсутствие страницы виртуальной памяти в реальной) поместит в стек адрес текущей команды, а не следующей. Так же для ряда CPU аппаратное прерывание вполне себе может произойти во время выполения команды (обычно, если команда с префиксом повторения) и в стеке будет адрес выполняющейся команды, а вовсе не следующей за ней.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ptr пишет:

прерывание к супервизору страниц (отсутствие страницы виртуальной памяти в реальной) 

Это "про какой МК речь"? :)))

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Как догадываюсь это про пентюхи и производные от них "МК". :)

ptr
Offline
Зарегистрирован: 28.05.2016

ЕвгенийП пишет:

ptr пишет:

прерывание к супервизору страниц (отсутствие страницы виртуальной памяти в реальной) 

Это "про какой МК речь"? :)))

Raspberry PI устроит?

 

ptr
Offline
Зарегистрирован: 28.05.2016

В угоду Arduino, могу дать ссылку и на AVR с MMU: http://www.atmel.com/images/doc32047.pdf

Эх, Евгений и Архат, отстаете от жизни ;))))

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да невозможно поспеть за всей копроэкономикой, Вы жеж понимаете .. или позже поймете, с возрастом. ;)

ptr
Offline
Зарегистрирован: 28.05.2016

Ну я же как то за этой копроэкономикой поспеваю. А уже полтинник разменял.

На самом деле, так как Linux без MMU не запустить, то еще старый ADSL модем, который я выкинул больше 10 лет назад, и тот был на микроконтроллере с MMU, так как на нем был Linux )

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

LastHopeMan пишет:

В МК при срабатывании прерывания адрес следующей команды автоматом улетает в стек, а после обработки прерывания возобновляет прерванный алгоритм? Или же по-черезжопному дожидается окончания текущего loop, отрабатывает, а затем входит в следующий loop?

первая жопная тема на форуме.

прошу морераторов прибить гвоздями в шапку форума, LastHopeMan назначить модератором питушатни.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ptr пишет:

Raspberry PI устроит?

Никогда не слышал о таком МК.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ptr пишет:

Эх, Евгений и Архат, отстаете от жизни ;))))

Потому и задаю вопросы. Знал бы сам - не спрашивал бы.

ptr
Offline
Зарегистрирован: 28.05.2016

Это BCM2835. Знакомьтесь:

BCM2835 contains the following peripherals which may safely be accessed by the ARM:
•Timers
•Interrupt controller
•GPIO
•USB
•PCM / I2S
•DMA controller
•I2C master
•I2C / SPI slave
•SPI0, SPI1, SPI2
•PWM
•UART0, UART1
 

И про AVR32 тоже не слышали? )))

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ptr пишет:

Это BCM2835. Знакомьтесь:

Не понял, а что BCM2835 уже стал МК? Спасибо, буду знать.

ptr пишет:

И про AVR32 тоже не слышали? )))

Нет. В контексте Ардуино - нет. 32-разрядные Ардуины, они на ARM. Ардуины на AVR-32 может и есть, но я не слышал.

 

ptr
Offline
Зарегистрирован: 28.05.2016

ЕвгенийП пишет:

ptr пишет:

Это BCM2835. Знакомьтесь:

Не понял, а что BCM2835 уже стал МК? Спасибо, буду знать.

А дайте Ваше определение МК, пожалуйста. И поясните, в соответствии с Вашим определением, почему AVR32 (ну пусть даже SAM3X8E)  - это МК, а BCM2835 - нет.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ptr пишет:

А дайте Ваше определение МК, пожалуйста. И поясните, в соответствии с Вашим определением, почему AVR32 (ну пусть даже SAM3X8E)  - это МК, а BCM2835 - нет.

Раньше мне казалось, что Вы умеете читать.

Разве я где-то писал, что BCM2835 - не МК? Где? Я, наоборот, написал: "Спасибо, буду знать".

Вот теперь знаю, а Вы меня своими вопросами смущаете.

ptr
Offline
Зарегистрирован: 28.05.2016

Простите, больше не буду.

nik182
Онлайн
Зарегистрирован: 04.05.2015

А в мануале написано: The interrupt execution response for all the enabled AVR interrupts is five clock cycles minimum. After five clock cycles the program vector address for the actual interrupt handling routine is executed.

т.е. чем бы процессор не занимался, если прерывание разрешено то через 5 циков процессора после запроса оно начнёт выполнятся.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Arhat109-2 пишет:

Мне всегда импонировали люди, которые считают что им все что-то обязаны ..

Пусть они вам дальше импонируют. И вы вовсе не обязаны флудить в темах, ответы на вопросы которых вам неизвестны. Можете идти.

 

 

nik182 пишет:

А в мануале написано: The interrupt execution response for all the enabled AVR interrupts is five clock cycles minimum. After five clock cycles the program vector address for the actual interrupt handling routine is executed.

т.е. чем бы процессор не занимался, если прерывание разрешено то через 5 циков процессора после запроса оно начнёт выполнятся.

Насколько я понимаю, в DOSе обработчик прерывания лежал непосредственно в оперативной памяти, загруженный при инициализации системы. То есть кроме процессора нужна программная поддержка. Вы уверены, что ардуона компилируя код, включает туда такой обработчик? Потому что мануал на МК - это одно, но без программной поддержки оно работать не должно. На arduino.cc конкретики пока не нашлось по этому поводу.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

LastHopeMan пишет:

Можете идти.

я запрещаю уходить из этой темы без моего на то дозволения.

всем оставаться в местах, определённой мной, дислокации - дезертирство будет пресекаться на месте.

nik182
Онлайн
Зарегистрирован: 04.05.2015

Я точно знаю, что обработчик я должен написать сам.

a5021
Offline
Зарегистрирован: 07.07.2013

ptr пишет:
А дайте Ваше определение МК, пожалуйста. И поясните, в соответствии с Вашим определением, почему AVR32 (ну пусть даже SAM3X8E)  - это МК, а BCM2835 - нет.

Не смотря на то, что нет четкой границы в определениях между MCU и SoC, по сложившейся практике AVR32 относится к микроконтроллерам, а BCM2835 к системам на чипе. Сам Бродком называет BCM2835 процессором приложений или системой на чипе, но мне не удалось найти примеров, чтобы производитель называл его микроконтроллером.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

LastHopeMan пишет:

Для этого форумы и существуют, чтобы делиться опытом.

Именно для этого.

Но ни в коей мере не для пересказа учебников, дэйташитов и технической документации, которые к личному опыту участников форума никакого отношения не имеют.

Аппаратные прерывания, кстати, в МК (микроконтроллерах) работают точно так же, как и в ПК (персональных компьютерах). Поэтому, если Вы программист, то мне тоже непонятьны Ваши рассуждения по поводу "кем бы была бабушка..." то есть "как бы работало аппаратное прерывание на компьютере без аппаратных прерываний".

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

andriano пишет:

LastHopeMan пишет:

Для этого форумы и существуют, чтобы делиться опытом.

Именно для этого.

зря ты ему это сказал - он из той породы паразитов, которые тебе сотню причин найдут, почему ты им должен.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

LastHopeMan пишет:

То есть кроме процессора нужна программная поддержка. Вы уверены, что ардуона компилируя код, включает туда такой обработчик? Потому что мануал на МК - это одно, но без программной поддержки оно работать не должно. На arduino.cc конкретики пока не нашлось по этому поводу.

А кто мешает заглянуть в листинг и посмотреть, что там есть и чего нет?

Что же касается arduino.cc, то там описывается платформа Ардуино, которая исходит из максимально упрощенной модели процессора, содержащей, кроме того, только некоторое общее подмножество возможностей различных используемых в платах Ардуино микроконтроллеров.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Клапауций 234 пишет:

зря ты ему это сказал - он из той породы паразитов, которые тебе сотню причин найдут, почему ты им должен.

Какие проблемы? Издай указ, по которому только LastHopeMan всем должен, а ему никто ничего не должен!

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

andriano пишет:

Издай указ, по которому только LastHopeMan всем должен, а ему никто ничего не должен!

и, какой смысл делать должником банкрота?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Элементарно! Чтобы посадить его в долговыю яму!

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

andriano пишет:

Элементарно! Чтобы посадить его в долговыю яму!

рыть ямы и кормить его там, желания нет.