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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> SWI, Смысл использовать SWI
серый волк
сообщение Aug 29 2007, 09:12
Сообщение #1


Участник
*

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



начал разбираться с армом
наткнулся на SWI
не понимаю смысл его использования
так из примера ничего не ясно
похоже на вызов обкновенной функции
спасибо

#include <LPC21xx.H>

void SWI_Call1(int pattern) //Software interrupt with passed parameters
{
IOCLR1 = 0x00FF0000; //set the leds
IOSET1 = pattern;
}

void SWI_Call2(void)
{
IOCLR1 = 0x00FF0000;
IOSET1 = 0x00AA0000;
}

void main(void)
{
int pattern = 0x00550000;
IODIR1 = 0x00FF0000;
IOCLR1 = 0x00FF0000;

SWI_Call1(pattern);
SWI_Call2();

while(1)
{
; //Loop forever
}
}
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Aug 29 2007, 09:19
Сообщение #2


Знающий
****

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



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

Сообщение отредактировал Vitaliy_ARM - Aug 29 2007, 09:21


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
alexander55
сообщение Aug 29 2007, 09:24
Сообщение #3


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

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



Цитата(серый волк @ Aug 29 2007, 13:12) *
начал разбираться с армом
наткнулся на SWI
не понимаю смысл его использования
так из примера ничего не ясно
похоже на вызов обкновенной функции
спасибо

Вы правы, за одним маленьким нюансом. SWI защищено от прерываний. Колеса без программных прерываний жить не могут.
Создатель scmRTOS жаловался, что пришлось использовать прерывание от компаратора при портировании в AVR для получения программного прерывания.
Go to the top of the page
 
+Quote Post
серый волк
сообщение Aug 29 2007, 10:16
Сообщение #4


Участник
*

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



спасибо

1.может ли исполнение прерывания быть прервано вызовом другого прерывания?


2."в доступе к уникальным регистрам, например возможность устанавливать или сбрасывать прерывания и т.п." Из описания я не нашел , что нельзя устанавливать или сбрасывать прерывания
в user mode.

успехов
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 29 2007, 10:23
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(серый волк @ Aug 29 2007, 12:12) *
похоже на вызов обкновенной функции

Только эта 'функция' может находится в другом модуле, например, bootloader-е, ядре системы и соответственно вообще не линковаться в один модуль.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alexander55
сообщение Aug 29 2007, 12:08
Сообщение #6


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

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



Цитата(серый волк @ Aug 29 2007, 14:16) *
спасибо

1.может ли исполнение прерывания быть прервано вызовом другого прерывания?

SWI нельзя.
FIQ, IRQ - если сделать стандартно, то нет. Если приложить усилия - то можно.
Go to the top of the page
 
+Quote Post
серый волк
сообщение Aug 29 2007, 12:27
Сообщение #7


Участник
*

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



Александр,

я правильно понимаю...
если у меня идет выполнение IRQ и в процессе выполнения приходит SWI ,
то выполнение IRQ прерывается и начинается выполнение SWI. Потом заканчивается выполнение
IRQ. Это верно? И наоборот судя по Вашим словам невозможно.


Из таблицы приоритетов кстати IRQ имеет более высокий приоритет чем SWI 05.gif

Тут скорее всего надо различать стуации возникновения двух прерываний одновременно и
ситуация, когда один произошел и уже выполняется... help.gif

Можно ли как-нить это прояснить....

Спасибо
Сергей
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 29 2007, 12:35
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(серый волк @ Aug 29 2007, 15:27) *
я правильно понимаю...

Что-то у Вас совсем каша.
Оно не 'приходит' самопроизвольно. Его Вы сами 'вызываете'.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
серый волк
сообщение Aug 29 2007, 12:47
Сообщение #9


Участник
*

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



с кашей это точно...

интересует в общем что поисходит при прерывании во время исполнения кода другого прерывания?
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Aug 29 2007, 13:10
Сообщение #10


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

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Обычно ничего. Если Вы не позаботились о вложеных прерываниях. Уже начатое прерывание завершается, после этого из всех ждущих выбирается прерывание с максимальным приоритетом и выполняется. И так пока прерывания не кончатся. smile.gif


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
серый волк
сообщение Aug 29 2007, 13:43
Сообщение #11


Участник
*

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



СПАСИБО
Go to the top of the page
 
+Quote Post
alexander55
сообщение Aug 29 2007, 13:45
Сообщение #12


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

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



[quote name='серый волк' date='Aug 29 2007, 16:27' post='288617']
Александр,

я правильно понимаю...
если у меня идет выполнение IRQ и в процессе выполнения приходит SWI ,
[/quote]
SWI Вы вызываете сами. По выходу из прерывания IRQ в режим USER, SWI выполнится.

[quote name='серый волк' date='Aug 29 2007, 16:27' post='288617']
Александр,

я правильно понимаю...
если у меня идет выполнение IRQ и в процессе выполнения приходит SWI ,
то выполнение IRQ прерывается и начинается выполнение SWI. Потом заканчивается выполнение
IRQ. Это верно?
[/quote]
Нет. См. выше.

quote name='серый волк' date='Aug 29 2007, 16:27' post='288617']
Александр,

я правильно понимаю...
если у меня идет выполнение IRQ и в процессе выполнения приходит SWI ,
то выполнение IRQ прерывается и начинается выполнение SWI. Потом заканчивается выполнение
IRQ. Это верно? И наоборот судя по Вашим словам невозможно.
Сергей
[/quote]
Не приписывайте мне,что я не говорил. SWI ничем не прерывается. Это SuperVisor.

quote name='серый волк' date='Aug 29 2007, 16:27' post='288617']
Из таблицы приоритетов кстати IRQ имеет более высокий приоритет чем SWI 05.gif
Тут скорее всего надо различать стуации возникновения двух прерываний одновременно
[/quote]
Да, при одновременном приходе заявок на прерывание выполняется прерывание с более высоким приоритетом.

[quote name='серый волк' date='Aug 29 2007, 16:27' post='288617']

Тут скорее всего надо различать ..., когда один произошел и уже выполняется...

Можно ли как-нить это прояснить....
[/quote]
Проясняю для IRQ и FIQ, т.к. они выполняются через векторный контроллер (я говорю про LPC) при входе и выходе вставляются макросы. Смысл их: корректно разрешить прерывание и корректно запретить, но уже спасение и восстановление осуществляется через стек, т.к. без стека возможен только один уровень. Тогда внутри IRQ может быть еще один IRQ.

[quote name='серый волк' date='Aug 29 2007, 16:27' post='288617']
Спасибо
Сергей
[/quote]
Вежливому человеку всегда рад помочь, если не в напряг.
Go to the top of the page
 
+Quote Post
ig_z
сообщение Aug 29 2007, 15:09
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



Цитата(alexander55 @ Aug 29 2007, 12:24) *
Вы правы, за одним маленьким нюансом. SWI защищено от прерываний. Колеса без программных прерываний жить не могут.
Создатель scmRTOS жаловался, что пришлось использовать прерывание от компаратора при портировании в AVR для получения программного прерывания.

scmRTOS не использует сви, это уже обсуждалось. Наиболее "красив" в этом смысле сам7. Пррерывания вешаются на FIQ а перепланировкой занимается IRQ.
Go to the top of the page
 
+Quote Post
Paramon
сообщение Aug 30 2007, 03:45
Сообщение #14


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

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



Цитата(alexander55 @ Aug 29 2007, 16:08) *
SWI нельзя.
FIQ, IRQ - если сделать стандартно, то нет. Если приложить усилия - то можно.


FIQ - можно всегда!
Из любых мест.
Может я ошибаюсь?
Go to the top of the page
 
+Quote Post
alexander55
сообщение Aug 30 2007, 04:30
Сообщение #15


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

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



Цитата(Paramon @ Aug 30 2007, 07:45) *
FIQ - можно всегда!
Из любых мест.
Может я ошибаюсь?

Ошибаетесь.
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 - 02:53
Рейтинг@Mail.ru


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