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

|
Цитата(Golikov A. @ Mar 24 2015, 21:00)  надо делать все не так  Если мы говорим про UART, то его символы надо принимать при помощи ДМА в буфер. А в основном цикле-задаче уже по факту обрабатывать ни каждый пришедший символ, а столько сколько накопилось в этом буфере с момента прошлой обработки. Если не нравиться ДМА, то можно в прерывании UART кидать символ в этот буфер. Но делать такую сложную систему прерываний, с регулировкой до такта - это по моему перебор. У АРМа больше ресурсов чем в АВР, он имеет больше периферии, потому он будет больше всего делать и в итоге вы за ним не уследите... ИМХО... описанный выше метод с PendSV - это аля как операционки контекст переключают... Но я бы не надеялся на переключение контекста за время приема символа. Надо ДМА подключать, это правильнее... Я тоже считал, что надо принимать данные в буфер, а потом в фоновой задаче считать CRC всего массива. Создать нечто промежуточное, между фоновой задачей и прерываниями, меня надоумил проект, в котором много математики. Вычисления производятся в основном цикле по принципу - сколько успел. По моим прикидкам, период вычисления всей математики составляет единицы миллисекунд (на AVR). Если в очередь основного цикла вставить подсчёт CRC UART, то очень долго придётся ждать, пока ему будет передано управление. Для AVR я написал вот такой обработчик-диспетчер псевдо-программного прерывания (используя внешнее прерывание): Код #pragma vector=INT0_vect // As Soft Ware interrupt __interrupt void SWI_mng (void) { unsigned char ct; void (*ptr)(void);
for(ct = 0; ct < qty_SWI_executors; ct++) if(SWI_exec[ct]) { ptr = SWI_exec[ct]; SWI_exec[ct] = NULL; // Deactivate further execution SW_Int = 1; // Stop interrupt GI_enable (*ptr)(); break; } } Перед индексным вызовом кода разрешается прерывание, что даёт возможность работы обработчикам прерывания от аппаратных устройств. Можно было бы сделать тоже самое и на ARM, но хочется что-то более изящного. С одной стороны не охота перетаскивать старьё, с другой стороны не хочется использовать то новое, которое не понимаю.
Сообщение отредактировал IgorKossak - Mar 25 2015, 18:30
Причина редактирования: [codebox] для длинного кода, [code] - для короткого
|
|
|
|
Сообщений в этой теме
серый волк 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 DmitryM Цитата(Golikov A. @ Mar 24 2015, 20:00) Н... Mar 24 2015, 17:28 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|