реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> SWI, Смысл использовать SWI
Paramon
сообщение Aug 30 2007, 07:56
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 5-10-06
Пользователь №: 20 997



Цитата(alexander55 @ Aug 30 2007, 08:30) *
Ошибаетесь.


потому-то и поставил вопрос!(Может я ошибаюсь?)
Я его (FIQ) пользую к таймеру.(Нужны относительно стабильные по времени выборки).
Правда пока не наткнулся ни на какие казусы(кроме времени реакции на FIQ).
IRQ использую еще с 3 таймерами (там точности большой ненадо)
SWI использую из основного цикла.
Будьте добры поясните, а то может быть мне жизнь раем показалась и надо переделать проект.
Спасибо!
Go to the top of the page
 
+Quote Post
alexander55
сообщение Aug 30 2007, 08:25
Сообщение #17


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Paramon @ Aug 30 2007, 11:56) *
потому-то и поставил вопрос!(Может я ошибаюсь?)
Я его (FIQ) пользую к таймеру.(Нужны относительно стабильные по времени выборки).
Правда пока не наткнулся ни на какие казусы(кроме времени реакции на FIQ).
IRQ использую еще с 3 таймерами (там точности большой ненадо)
SWI использую из основного цикла.
Будьте добры поясните, а то может быть мне жизнь раем показалась и надо переделать проект.
Спасибо!

Проверьте сами, я не классик, чтобы себя цитировать.
Go to the top of the page
 
+Quote Post
серый волк
сообщение Aug 31 2007, 12:18
Сообщение #18


Участник
*

Группа: Новичок
Сообщений: 32
Регистрация: 29-08-07
Пользователь №: 30 125



Thanks
Go to the top of the page
 
+Quote Post
AVR
сообщение Sep 2 2007, 17:29
Сообщение #19


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(alexander55 @ Aug 29 2007, 13:24) *
Создатель scmRTOS жаловался, что пришлось использовать прерывание от компаратора при портировании в AVR для получения программного прерывания.
Пользуюсь scmRTOS для AVR... Мне нужно написать программу для платы у которой все выводы компаратора заняты. Я использовал прерывание по сравнению третьего ненужного мне таймера в качестве программного прерывания. Насколько это безопасно и надежно? Пока ещё есть возможность исправить... Но вроде работает стабильно и достаточно быстро...


--------------------
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 2 2007, 19:10
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(AVR @ Sep 2 2007, 20:29) *
Я использовал прерывание по сравнению третьего ненужного мне таймера в качестве программного прерывания. Насколько это безопасно и надежно? Пока ещё есть возможность исправить... Но вроде работает стабильно и достаточно быстро...
Никаких препятствий для использования любого свободного прерывания нет. Проблема только в том, что не всякое прерывание можно вызвать программно. Я подумывал об использовании прерывания SPM - оно уж точно никогда не нужно и если я правильно понял описание флаг его всегда взведен, когда SPMEN = 0. А SPMEN = 1 только при перепрограммировании, когда переключать контексты не нужно. Если вам эта идея покажется стоящей и вы ее реализуете - отпишите сюда, пожалуйста.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Sep 6 2007, 09:09
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Здесь есть ответы на многие вопросы smile.gif

Там на филипсе когда-то скачал книжку по LPC2300ю Называется lpc2300_book_v2_srn. Там есть много ответов на ваши вопросы. smile.gif Кто не найдет могу выложить на форуме, она около 10 Мб


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Alechek
сообщение Mar 20 2013, 11:00
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Подниму тему.
Вопрос "если у меня идет выполнение IRQ и в процессе выполнения приходит SWI" остался.
Что будет, если из IRQ вызвать SWI?
По приоритетам у SWI низший, то есть как бы не должен вытеснять IRQ. Но если вызов SWI блокирующий, то как тогда дальше быть?
Нашел похожую по проблеме тему, но там тоже суть не раскрыта.
Go to the top of the page
 
+Quote Post
MK2
сообщение Mar 20 2013, 19:39
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535



Цитата(Alechek @ Mar 20 2013, 14:00) *
Подниму тему.
Вопрос "если у меня идет выполнение IRQ и в процессе выполнения приходит SWI" остался.
Что будет, если из IRQ вызвать SWI?

на cortex M3 как зададите приоритет прерываний так и будет происходить, приоритет так же можно задавать для программного прерывания ( я имею ввиду обработчик SVC_Handler или PendSV_Handler ) . только на мой взгляд если вы не пишете планировщик их лучше от греха подальше не использовать. заюзайте какой-нить свободное от переферии прерывание и запускайте по pending bit его.
Go to the top of the page
 
+Quote Post
Д_М
сообщение Mar 23 2015, 20:29
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 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?
Спасибо!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 24 2015, 03:47
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Д_М @ Mar 24 2015, 02:29) *
Правильно ли я понял, что если в обработчике IRQ вызвать SWI, то его код будет отработан после того, как отработают все IRQ? Если во время работы SWI произойдёт IRQ, управление сразу же будет передано IRQ, а по его завершению вернётся обратно в SWI?

Неправильно. SWI - синхронное исключение, а не обычное асинхронное внешнее прерывание типа IRQ или FIQ. Т.е. - собственно для Вас это как простой вызов функции (с переключением CPU в привилегированный режим).
Если процессор перед вызовом SWI находился в режиме IRQ, то произойдёт переключение в режим SWI (с запретом FIQ и IRQ). При выходе из режима SWI произойдёт возврат в режим IRQ.
SWI например может использоваться для вызова функций OS из непривилегированного режима (режима пользователя).
Go to the top of the page
 
+Quote Post
SII
сообщение Mar 24 2015, 05:52
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



FIQ не запрещается икакими прерываниями, кроме самого FIQ. И, кстати говоря, SWI уже давным-давно переименована в SVC.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 24 2015, 06:39
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(SII @ Mar 24 2015, 11:52) *
FIQ не запрещается икакими прерываниями, кроме самого FIQ.

Да, наверное. Писал по памяти.
Цитата(SII @ Mar 24 2015, 11:52) *
И, кстати говоря, SWI уже давным-давно переименована в SVC.

Переименована в Cortex-M. А у ТС вроде как Classical ARM, а там не переименована.
Go to the top of the page
 
+Quote Post
SII
сообщение Mar 24 2015, 08:43
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(jcxz @ Mar 24 2015, 09:39) *
Переименована в Cortex-M. А у ТС вроде как Classical ARM, а там не переименована


Переименована для всех, когда был введён унифицированный синтаксис языка ассемблера для систем команд ARM и Thumb -- а он распространяется не только на новые процессоры, но и на старые тоже, хотя в старой документации, естественно, остаётся мнемоника SWI. Однако ассемблер и компилятор используют SVC для любых процессоров (SWI можно применять в ассемблере, если включить использование старого синтаксиса, насчёт компилятора не знаю -- может, только SVC позволяет).
Go to the top of the page
 
+Quote Post
Д_М
сообщение Mar 24 2015, 12:41
Сообщение #29


Частый гость
**

Группа: Участник
Сообщений: 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 из непривилегированного режима (режима пользователя).


А как тогда оформить код, который активируется в прерывании, но исполняется после всех прерываний? То есть менее приоритетный, чем прерывания, но более приоритетный, чем фоновая задача.
Спасибо!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 24 2015, 13:06
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Д_М @ Mar 24 2015, 18:41) *
А как тогда оформить код, который активируется в прерывании, но исполняется после всех прерываний? То есть менее приоритетный, чем прерывания, но более приоритетный, чем фоновая задача.

Использовать RTOS.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016