addi II 1 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба Здравствуйте ! Подскажите пожалуйста, какие архитектуры поддерживают вложенные прерывания В моем понимании только MIPS... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 5 декабря, 2022 Опубликовано 5 декабря, 2022 (изменено) · Жалоба Cortex-A (GIC), Cortex-M (NVIC), RISC-V (PLIC) - все три проверено - поддерживают Изменено 5 декабря, 2022 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба С таким уровнем смысла в вопросе ответ тоже будет вполне однозначный - вложенные прерывания поддерживаются в любой архитектуре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 1 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба 4 minutes ago, Arlleex said: С таким уровнем смысла в вопросе ответ тоже будет вполне однозначный - вложенные прерывания поддерживаются в любой архитектуре. Хотите сказать что это чисто программный вопрос?, - обработать прерывание в прерывании??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 5 декабря, 2022 Опубликовано 5 декабря, 2022 (изменено) · Жалоба Контроллеры прерываний в современной технике обычно поддерживают вложенность, на некоторых архитектурах требуются программные извращения (Cortex-A) для поддержки вложенности. Изменено 5 декабря, 2022 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 1 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба 44 minutes ago, GenaSPB said: Контроллеры прерываний в современной технике обычно поддерживают вложенность, на некоторых архитектурах требуются программные извращения (Cortex-A) для поддержки вложенности. А эти извращения где нужно проводить?, в каждом обработчике? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба 21 minutes ago, addi II said: в каждом обработчике? Не обязательно, может быть общий wrapper. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 1 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба а что такое wrapper?, это общий обработчик?, в нем нужно что-то делать с теневыми регистрами и со стеком на асме(тоесть сохранять контекст и далее востанавливать)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба 37 minutes ago, addi II said: это общий обработчик? Да, общий обработчик. 37 minutes ago, addi II said: в нем нужно что-то делать с теневыми регистрами и со стеком на асме(тоесть сохранять контекст и далее востанавливать)? Совершенно верно - сохранять и восстанавливать контекст для каждого нового уровня вложенности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 1 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба спасибо, а по какому адресу его располагать? В моем случае векторной режим - есть базовый адрес 0x200 и далее относительно этого адреса идут аппаратные и программные прерывания Грубо говоря каждый обработчик находиться в ОЗУ по определенному адресу и далее джампиться в область кода. Используется режим внешнего контроллера прерываний, так называемый EIC, в MIPS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба 21 minutes ago, addi II said: по какому адресу его располагать? Странный вопрос. По любому допустимому. 22 minutes ago, addi II said: Грубо говоря каждый обработчик находиться в ОЗУ по определенному адресу и далее джампиться в область кода Ну вот, а могут переходить в общую обертку, которая на основании данных из контроллера прерываний передаст управление нужному обработчику. Из плюсов - некоторая экономия памяти и единый обработчик, минус - проигрыш по производительности. Но, как ранее уже замечали, вложенные прерывания следует вводить только если на 100% уверены в правильности этого подхода и хорошо знакомы с целевой архитектурой. В противном случае вероятность выстрелить себе в ногу очень высока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 1 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба Ага, теперь более или менее понятно, спасибо! Тогда вопрос на засыпку)), а если будет использоваться FreeRTOS, как привязать кон тексты прерываний(с общей оберткой wrapper - сохранения контекста прерывания) и задач?, или что-то еще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Variant99 7 5 декабря, 2022 Опубликовано 5 декабря, 2022 (изменено) · Жалоба ARM CortexM, ставящийся на микроконтроллеры STM32, работает в паре с контроллером вложенных прерываний NVIC, который самостоятельно разруливает поступающие прерывания в соответствии с настройками приоритетов прерываний. Для программиста вложенности прерываний незаметны, однако программист может назначить приоритеты и определить возможности "вложиваний" одних в другие прерывания. Если используете FreeRTOS, то тщательно прочитайте еёйный мануал, ибо там есть тонкости в вопросе прерываний при работе на ядре Кортекс. В частности, там есть специальные ф-ции API FreeRTOS с суффиксом _ISR, разрешенные для применения в прерываниях. И есть еще настраиваемый порог (забыл как точно называется, в последних версиях они изменили название) приоритета прерываний для использования API FreeRTOS в обработчиках прерываний. В двух словах: прерывания с приоритетом выше установленного порога не должны использовать функции API FreeRTOS. Изменено 5 декабря, 2022 пользователем Variant99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба 9 minutes ago, addi II said: Тогда вопрос на засыпку)), а если будет использоваться FreeRTOS, как привязать кон тексты прерываний(с общей оберткой wrapper - сохранения контекста прерывания) и задач?, или что-то еще? Если будет использоваться FreeRTOS, рекомендую не морочить голову, а реализовать threaded irq - обработчик прерывания просто будит свой тред, в котором реализуется основная часть процедуры. Тут и вложенность и приоритеты автоматом получатся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 1 5 декабря, 2022 Опубликовано 5 декабря, 2022 · Жалоба 46 minutes ago, Variant99 said: ARM CortexM, ставящийся на микроконтроллеры STM32, работает в паре с контроллером вложенных прерываний NVIC, который самостоятельно разруливает поступающие прерывания в соответствии с настройками приоритетов прерываний. Для программиста вложенности прерываний незаметны, однако программист может назначить приоритеты и определить возможности "вложиваний" одних в другие прерывания. Если используете FreeRTOS, то тщательно прочитайте еёйный мануал, ибо там есть тонкости в вопросе прерываний при работе на ядре Кортекс. В частности, там есть специальные ф-ции API FreeRTOS с суффиксом _ISR, разрешенные для применения в прерываниях. И есть еще настраиваемый порог (забыл как точно называется, в последних версиях они изменили название) приоритета прерываний для использования API FreeRTOS в обработчиках прерываний. В двух словах: прерывания с приоритетом выше установленного порога не должны использовать функции API FreeRTOS. Спасибо, а portyield как раз не делает сохранения контекста прерывания ? У меня схожая риск архитектура - mips, и как то мне ответили на сайте фриртоса что именно для мипса вложенные надо как- то по особенному обрабатывать. Я посмотрел из файлов для портирования подобного случая больше всего подходит для правки ISR_support.h так кау раз происходит сохранение контекста прерывания, - portSaveContext 39 minutes ago, aaarrr said: Если будет использоваться FreeRTOS, рекомендую не морочить голову, а реализовать threaded irq - обработчик прерывания просто будит свой тред, в котором реализуется основная часть процедуры. Тут и вложенность и приоритеты автоматом получатся. Угу, спасибо, приблизительно понял Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться