Официальный сайт компании Arduino по адресу arduino.cc
Контроллер прерываний
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 25/10/2016 - 04:44
В МК при срабатывании прерывания адрес следующей команды автоматом улетает в стек, а после обработки прерывания возобновляет прерванный алгоритм? Или же по-черезжопному дожидается окончания текущего loop, отрабатывает, а затем входит в следующий loop?
Интересное наблюдение. А как в даташите прописано? А пример того или иного поведения привести можете, запущу у себя - перепроверю тоже.
Это не наблюдение, а вопрос с предложением двух вариантов на выбор.
Просто моя человеческая логика говорит мне, что проще всего (с точки зрения разработчика МК\софта для его программирования) между loop проверять наличие прерываний. Это мне как программисту так логично, потому что события в ОПП также через зад обрабатываются - нельзя простым способом взять и отложить одну функцию для выполнения более приоритетной. Это делается программно, либо затычками жрущими ресурс.
Но изучая инфу по контроллерам прерываний (в общем контексте компьютерной техники) я наткнулся на формулировку, что "процессор выполняет текущую команду, откладывает следующий адрес в стек и переходит к командам самого прерывания. после выполнения, возвращает из стека адрес, продолжает выполнять основную программу". Все красиво, но это же должен быть красивый код по обработке прерываний, а также процессор должен на него переходить. Значит для этого и процессор должен поддерживать это в таком виде, и среда программирования должна что-то закинуть во флеш, чтоб оно срабатывало по прерыванию, откладывало команды, кидалось на новый кусок кода, а потом возвращало все в зад.
Вот я потому и спросил: в ардуине в частности мы имеем хорошие прерывания непосредственно в момент их возникновения, или же они обработаются после окончания loop. От этого многое зависит, если например хотим в свободное время контроллеру подкинуть не приоритетные задачи. Ну или наоборот, своевременно отреагировать на аварийную ситуацию, где 1 мкс решает исход.
Моя наверное не человеческая логика говорит о том, что если не знаешь - открой даташит и прочти .. или кратко RTFM. Но видимо .. у "человеков" свои причуды.. :)
Проще на форуме спросить. Если кто-то сталкивался, то ответит. Для этого форумы и существуют, чтобы делиться опытом. Правда для некоторых это не очевидно, к сожалению. Но всегда же можно отфильтровать шумы.
Проще? Мне всегда импонировали люди, которые считают что им все что-то обязаны ..
Это мне как программисту
Если Вы программист, то Вы знаете ответ на свой вопрос и просто издеваетесь и троллите нас, чтобы посмеяться. Странные у Вас какие-то развлечения.
Если же Вы пошутили насчёт "программист", то в школу! Изучите для начала что такое прерывание. Это общее понятие и оно не зависит ни от типа процессора, ни от наличия или отсутствия в Вашей программе loop'а.
Для этого форумы и существуют, чтобы делиться опытом. Правда для некоторых это не очевидно, к сожалению.
Да, я тоже это заметил. Вот один наш общий знакомый как-то написал:
Микросхемки 8 выходов, в каждом по 2 потенциометра. Дешевые до жути.
В МК при срабатывании прерывания
А про какой тип прерываний и про какой МК речь? Например, прерывание к супервизору страниц (отсутствие страницы виртуальной памяти в реальной) поместит в стек адрес текущей команды, а не следующей. Так же для ряда CPU аппаратное прерывание вполне себе может произойти во время выполения команды (обычно, если команда с префиксом повторения) и в стеке будет адрес выполняющейся команды, а вовсе не следующей за ней.
прерывание к супервизору страниц (отсутствие страницы виртуальной памяти в реальной)
Это "про какой МК речь"? :)))
Как догадываюсь это про пентюхи и производные от них "МК". :)
прерывание к супервизору страниц (отсутствие страницы виртуальной памяти в реальной)
Это "про какой МК речь"? :)))
Raspberry PI устроит?
В угоду Arduino, могу дать ссылку и на AVR с MMU: http://www.atmel.com/images/doc32047.pdf
Эх, Евгений и Архат, отстаете от жизни ;))))
Да невозможно поспеть за всей копроэкономикой, Вы жеж понимаете .. или позже поймете, с возрастом. ;)
Ну я же как то за этой копроэкономикой поспеваю. А уже полтинник разменял.
На самом деле, так как Linux без MMU не запустить, то еще старый ADSL модем, который я выкинул больше 10 лет назад, и тот был на микроконтроллере с MMU, так как на нем был Linux )
В МК при срабатывании прерывания адрес следующей команды автоматом улетает в стек, а после обработки прерывания возобновляет прерванный алгоритм? Или же по-черезжопному дожидается окончания текущего loop, отрабатывает, а затем входит в следующий loop?
первая жопная тема на форуме.
прошу морераторов прибить гвоздями в шапку форума, LastHopeMan назначить модератором питушатни.
Raspberry PI устроит?
Никогда не слышал о таком МК.
Эх, Евгений и Архат, отстаете от жизни ;))))
Потому и задаю вопросы. Знал бы сам - не спрашивал бы.
Это 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 тоже не слышали? )))
Это BCM2835. Знакомьтесь:
Не понял, а что BCM2835 уже стал МК? Спасибо, буду знать.
И про AVR32 тоже не слышали? )))
Нет. В контексте Ардуино - нет. 32-разрядные Ардуины, они на ARM. Ардуины на AVR-32 может и есть, но я не слышал.
Это BCM2835. Знакомьтесь:
Не понял, а что BCM2835 уже стал МК? Спасибо, буду знать.
А дайте Ваше определение МК, пожалуйста. И поясните, в соответствии с Вашим определением, почему AVR32 (ну пусть даже SAM3X8E) - это МК, а BCM2835 - нет.
А дайте Ваше определение МК, пожалуйста. И поясните, в соответствии с Вашим определением, почему AVR32 (ну пусть даже SAM3X8E) - это МК, а BCM2835 - нет.
Раньше мне казалось, что Вы умеете читать.
Разве я где-то писал, что BCM2835 - не МК? Где? Я, наоборот, написал: "Спасибо, буду знать".
Вот теперь знаю, а Вы меня своими вопросами смущаете.
Простите, больше не буду.
А в мануале написано: 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 циков процессора после запроса оно начнёт выполнятся.
Мне всегда импонировали люди, которые считают что им все что-то обязаны ..
Пусть они вам дальше импонируют. И вы вовсе не обязаны флудить в темах, ответы на вопросы которых вам неизвестны. Можете идти.
А в мануале написано: 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 конкретики пока не нашлось по этому поводу.
Можете идти.
я запрещаю уходить из этой темы без моего на то дозволения.
всем оставаться в местах, определённой мной, дислокации - дезертирство будет пресекаться на месте.
Я точно знаю, что обработчик я должен написать сам.
Не смотря на то, что нет четкой границы в определениях между MCU и SoC, по сложившейся практике AVR32 относится к микроконтроллерам, а BCM2835 к системам на чипе. Сам Бродком называет BCM2835 процессором приложений или системой на чипе, но мне не удалось найти примеров, чтобы производитель называл его микроконтроллером.
Для этого форумы и существуют, чтобы делиться опытом.
Именно для этого.
Но ни в коей мере не для пересказа учебников, дэйташитов и технической документации, которые к личному опыту участников форума никакого отношения не имеют.
Аппаратные прерывания, кстати, в МК (микроконтроллерах) работают точно так же, как и в ПК (персональных компьютерах). Поэтому, если Вы программист, то мне тоже непонятьны Ваши рассуждения по поводу "кем бы была бабушка..." то есть "как бы работало аппаратное прерывание на компьютере без аппаратных прерываний".
Для этого форумы и существуют, чтобы делиться опытом.
Именно для этого.
зря ты ему это сказал - он из той породы паразитов, которые тебе сотню причин найдут, почему ты им должен.
То есть кроме процессора нужна программная поддержка. Вы уверены, что ардуона компилируя код, включает туда такой обработчик? Потому что мануал на МК - это одно, но без программной поддержки оно работать не должно. На arduino.cc конкретики пока не нашлось по этому поводу.
А кто мешает заглянуть в листинг и посмотреть, что там есть и чего нет?
Что же касается arduino.cc, то там описывается платформа Ардуино, которая исходит из максимально упрощенной модели процессора, содержащей, кроме того, только некоторое общее подмножество возможностей различных используемых в платах Ардуино микроконтроллеров.
зря ты ему это сказал - он из той породы паразитов, которые тебе сотню причин найдут, почему ты им должен.
Какие проблемы? Издай указ, по которому только LastHopeMan всем должен, а ему никто ничего не должен!
Издай указ, по которому только LastHopeMan всем должен, а ему никто ничего не должен!
и, какой смысл делать должником банкрота?
Элементарно! Чтобы посадить его в долговыю яму!
Элементарно! Чтобы посадить его в долговыю яму!
рыть ямы и кормить его там, желания нет.