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

 
 
> 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
 
Start new topic
Ответов
Д_М
сообщение Mar 24 2015, 19:31
Сообщение #2


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

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



В описании операционной системы RL-ARM от Keil углядел очень интересный механизм

В ОС предусмотрен системный вызов для установки флагов событий, предназначенный для вызова из обработчика прерывания:
void isr_evt_set(unsigned short event_flags, 0S_TID task);
Таким образом, типичный процесс, выполняющий обработку прерывания,
будет выглядеть следующим образом:
Код
void Task3(void) {
while(1)
{
os_evt_wait_or(0x0001, 0xFFFF); /* Ждем установки флага
события обработчиком */
......... // Обрабатываем прерывание
} // В следующем проходе цикла снова засыпаем
}
Обработчик прерывания в данном случае будет содержать минимальное
количество кода:
void FIQ_Handler (void) __fiq
{
isr_evt_set(0x0001,tsk3); /* Сообщаем процессу tsk3 о возникновении
прерывания */
EXTINT = 0x00000002; // Сбрасываем флаг прерывания
}

Можно ли быть уверенным в том, что управление будет сразу же передано обработчику, а не с наступлением системного тика?

Сообщение отредактировал IgorKossak - Mar 25 2015, 18:30
Причина редактирования: [codebox] для длинного кода, [code] - для короткого
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 25 2015, 08:26
Сообщение #3


Гуру
******

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



Цитата(Д_М @ Mar 25 2015, 01:31) *
Можно ли быть уверенным в том, что управление будет сразу же передано обработчику, а не с наступлением системного тика?

Во-первых: в embedded RTOS как правило можно легко менять значение системного тика. В uCOS при необходимости можете хоть 10кГц поставить. Только не нужно это, ибо - пустая трата ресурсов на работу шедулера.
Во-вторых: тот же uCOS может переключать задачи как только по сис.таймеру, так и по любому прерыванию. Это будет зависеть от того как Вы эти самые ISR оформите. Всё очень гибко.

Вам надо садиться и изучать работу RTOS. Они все многозадачные. Кроме "фоновой задачи" там можно создать сколько нужно других задач, одна из которых и будет обрабатывать ваши события от ISR UART
(заводите задачу с приоритетом выше фоновой, которая всё время сидит в ожиднаии некоторого мэйлбокса/семафора/или другого средства синхронизации ОС; от ISR посылаете событие в этот объект;
задача обрабатывает событие и опять переходит к ожиданию этого объекта). Это стандартный механизм работы задач под ОС, начиная от виндовых задач кончая embedded-областью.

Цитата(SII @ Mar 25 2015, 13:36) *
А зачем переключать контекст для приёма одного символа? Переключать надо, когда операция ввода-вывода закончена целиком (принято запланированное число символов или встречен символ, означающий конец последовательности, например). А всю быструю и простую обработку вести в первичных обработчиках прерываний (которые вызываются непосредственно аппаратными прерываниями).

Уже сколько народу тут талдычат ТС об этом, а он всё своё гнёт... Тяжкое наследие AVR? wink.gif
А CRC можно хоть по приходу всего кадра считать, хоть на лету в ISR. Больших затрат ресурсов на ARM это не требует.
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 25 2015, 19:04
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(jcxz @ Mar 25 2015, 11:26) *
Уже сколько народу тут талдычат ТС об этом, а он всё своё гнёт... Тяжкое наследие AVR?


А что, в аврках нельзя было повесить уарт на свой обработчик прерывания?? biggrin.gif
Я конечно не ставил rtosы на авр, но использовал приоритетный метод с системой распределения вложенных прерываний, виртуальные таймеры и пр. няшки, все работало как надо...

Сообщение отредактировал mantech - Mar 25 2015, 19:08
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- серый волк   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
- - Д_М   Здравствуйте! Выше много писали о том, что во ...   Mar 23 2015, 20:29
|- - jcxz   Цитата(Д_М @ Mar 24 2015, 02:29) Правильн...   Mar 24 2015, 03:47
|- - Д_М   Цитата(jcxz @ Mar 24 2015, 07:47) Неправи...   Mar 24 2015, 12:41
|- - jcxz   Цитата(Д_М @ Mar 24 2015, 18:41) А как то...   Mar 24 2015, 13:06
||- - Д_М   Цитата(jcxz @ Mar 24 2015, 17:06) Использ...   Mar 24 2015, 14:18
||- - DmitryM   Цитата(Д_М @ Mar 24 2015, 17:18) Из описа...   Mar 24 2015, 16:15
||- - 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
- - mantech   Цитата(Д_М @ Mar 24 2015, 22:31) Можно ли...   Mar 24 2015, 20:19
|- - Д_М   Цитата(mantech @ Mar 25 2015, 00:19) Скор...   Mar 25 2015, 06:16
- - jcxz   Цитата(mantech @ Mar 26 2015, 01:04) А чт...   Mar 26 2015, 05:35


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

 


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


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