|
SWI, Смысл использовать SWI |
|
|
|
 |
Ответов
|
Mar 23 2015, 20:29
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185

|
Здравствуйте! Выше много писали о том, что во время IRQ происходит SWI. На AVR я реализовал многозадачность, с использованием псевдо-SWI (аппаратное прерывание, как программное - INT0). Моя идея заключалась в том, чтобы при выполнении IRQ, в обработчике надо быть, как можно меньше времени. Только сохранение данных и инициация работы кода, который занимает нечто промежуточное по важности, между фоновой задачей (которая может длиться до единиц миллисекунд) и обработчиками прерываний. То есть, обработать данные надо, как можно скорее, но не в ущерб аппаратным прерываниям. Для этого обработчик IRQ инициирует SWI. После завершения IRQ вызывается SWI, который является диспетчером обработчиков, вызывающим наиболее важный обработчик. SWI, перед вызовом обработчика, разрешает прерывания, что позволит без ущерба отрабатывать обработчикам аппаратных прерываний. А как это работает на ARM? Правильно ли я понял, что если в обработчике IRQ вызвать SWI, то его код будет отработан после того, как отработают все IRQ? Если во время работы SWI произойдёт IRQ, управление сразу же будет передано IRQ, а по его завершению вернётся обратно в SWI? Спасибо!
|
|
|
|
|
Mar 24 2015, 12:41
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185

|
Цитата(jcxz @ Mar 24 2015, 07:47)  Неправильно. SWI - синхронное исключение, а не обычное асинхронное внешнее прерывание типа IRQ или FIQ. Т.е. - собственно для Вас это как простой вызов функции (с переключением CPU в привилегированный режим). Если процессор перед вызовом SWI находился в режиме IRQ, то произойдёт переключение в режим SWI (с запретом FIQ и IRQ). При выходе из режима SWI произойдёт возврат в режим IRQ. SWI например может использоваться для вызова функций OS из непривилегированного режима (режима пользователя). А как тогда оформить код, который активируется в прерывании, но исполняется после всех прерываний? То есть менее приоритетный, чем прерывания, но более приоритетный, чем фоновая задача. Спасибо!
|
|
|
|
|
Mar 24 2015, 14:18
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185

|
Цитата(jcxz @ Mar 24 2015, 17:06)  Использовать RTOS. Из описания операционных систем я понял, что в них передача управления производится на системных тиках. Для некоторых задач одна миллисекунда - это слишком долго. Самый банальный пример - передача одного байта по UART, на скорости 9600, занимает примерно одну миллисекунду. Если в обработчике прерывания передачи делать только сохранения данных, а CRC считать в RTOS-задаче, то новый байт будет поступать до того, как будет посчитано CRC предыдущего байта. Вычислять CRC в обработчике прерывания - грубовато. Если бы можно было дать команду вызова диспетчера сразу же, а не по пришествию ближайшего тика, то было бы то, что нужно.
|
|
|
|
|
Mar 24 2015, 16:15
|
Знающий
   
Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840

|
Цитата(Д_М @ Mar 24 2015, 17:18)  Из описания операционных систем я понял, что в них передача управления производится на системных тиках. Для некоторых задач одна миллисекунда - это слишком долго. Самый банальный пример - передача одного байта по UART, на скорости 9600, занимает примерно одну миллисекунду. Если в обработчике прерывания передачи делать только сохранения данных, а CRC считать в RTOS-задаче, то новый байт будет поступать до того, как будет посчитано CRC предыдущего байта. Вычислять CRC в обработчике прерывания - грубовато. Если бы можно было дать команду вызова диспетчера сразу же, а не по пришествию ближайшего тика, то было бы то, что нужно. scmRTOS, FreeRTOS так умеют делать, Вы невнимательно читали скорее всего.
|
|
|
|
Сообщений в этой теме
серый волк SWI Aug 29 2007, 09:12 Vitaliy_ARM Функция SWI (программное прерывание) часто использ... Aug 29 2007, 09:19 alexander55 Цитата(серый волк @ Aug 29 2007, 13:12) н... Aug 29 2007, 09:24 ig_z Цитата(alexander55 @ Aug 29 2007, 12:24) ... Aug 29 2007, 15:09 AVR Цитата(alexander55 @ Aug 29 2007, 13:24) ... Sep 2 2007, 17:29  Сергей Борщ Цитата(AVR @ Sep 2 2007, 20:29) Я использ... Sep 2 2007, 19:10 серый волк спасибо
1.может ли исполнение прерывания быть пре... Aug 29 2007, 10:16 alexander55 Цитата(серый волк @ Aug 29 2007, 14:16) с... Aug 29 2007, 12:08  Paramon Цитата(alexander55 @ Aug 29 2007, 16:08) ... Aug 30 2007, 03:45   alexander55 Цитата(Paramon @ Aug 30 2007, 07:45) FIQ ... Aug 30 2007, 04:30    Paramon Цитата(alexander55 @ Aug 30 2007, 08:30) ... Aug 30 2007, 07:56     alexander55 Цитата(Paramon @ Aug 30 2007, 11:56) пото... Aug 30 2007, 08:25 zltigo Цитата(серый волк @ Aug 29 2007, 12:12) п... Aug 29 2007, 10:23 серый волк Александр,
я правильно понимаю...
если у меня иде... Aug 29 2007, 12:27 zltigo Цитата(серый волк @ Aug 29 2007, 15:27) я... Aug 29 2007, 12:35 alexander55 [quote name='серый волк' date='Aug 29 ... Aug 29 2007, 13:45 серый волк с кашей это точно...
интересует в общем что поисх... Aug 29 2007, 12:47 Dron_Gus Обычно ничего. Если Вы не позаботились о вложеных ... Aug 29 2007, 13:10 серый волк СПАСИБО Aug 29 2007, 13:43 серый волк Thanks Aug 31 2007, 12:18 Vitaliy_ARM Здесь есть ответы на многие вопросы
Там на фили... Sep 6 2007, 09:09 Alechek Подниму тему.
Вопрос "если у меня идет выполн... Mar 20 2013, 11:00 MK2 Цитата(Alechek @ Mar 20 2013, 14:00) Подн... Mar 20 2013, 19:39     mantech Цитата(Д_М @ Mar 24 2015, 17:18) Самый ба... Mar 24 2015, 17:27   SII Цитата(Д_М @ Mar 24 2015, 15:41) А как то... Mar 24 2015, 16:24 SII FIQ не запрещается икакими прерываниями, кроме сам... Mar 24 2015, 05:52 jcxz Цитата(SII @ Mar 24 2015, 11:52) FIQ не з... Mar 24 2015, 06:39  SII Цитата(jcxz @ Mar 24 2015, 09:39) Переиме... Mar 24 2015, 08:43 Golikov A. надо делать все не так
Если мы говорим про UART, т... Mar 24 2015, 17:00 DmitryM Цитата(Golikov A. @ Mar 24 2015, 20:00) Н... Mar 24 2015, 17:28 Д_М Цитата(Golikov A. @ Mar 24 2015, 21:00) н... Mar 24 2015, 18:24 SII Цитата(Golikov A. @ Mar 24 2015, 20:00) о... Mar 25 2015, 07:36 Д_М В описании операционной системы RL-ARM от Keil угл... Mar 24 2015, 19:31 mantech Цитата(Д_М @ Mar 24 2015, 22:31) Можно ли... Mar 24 2015, 20:19  Д_М Цитата(mantech @ Mar 25 2015, 00:19) Скор... Mar 25 2015, 06:16 jcxz Цитата(Д_М @ Mar 25 2015, 01:31) Можно ли... Mar 25 2015, 08:26  mantech Цитата(jcxz @ Mar 25 2015, 11:26) Уже ско... Mar 25 2015, 19:04   jcxz Цитата(mantech @ Mar 26 2015, 01:04) А чт... Mar 26 2015, 05:35
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|