Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Въпрос за STM32, прекъсване и приоритет
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11295
Страница 1 от 1

Автор:  juzisound [ Чет Апр 18, 2013 12:05 am ]
Заглавие:  Въпрос за STM32, прекъсване и приоритет

Процесор STM32F103...
Въпроса ми е следния:
Някъде сякаш бях чел, че мога да сменя приоритета на прекъсването по време на изпълнение на програмата. Сега обаче не мога да го открия къде е било.
Неяснотата ми е около следното:
Дали наистина мога да сменям приоритета по време на изпълнение, дали мога да го променя и в самото прекъсване, и ако мога, кога реално настава промяната.

Пример:
Имам 2 прекъсвания с еднакъв приоритет.
Ако влезна в първото, и второто възникне по време на изпълнение на първото, по принцип, второто трябва да чака да свърша първото и чак тогава да се изпълни.
Идеята е дали мога да сменя приоритета на първото още докато съм в него, така че второто да се случи, а аз да си стоя в първото и да изчкам второто да си свърши работата.

Засукано го обясних малко ама, надявам се да сте ме разбрали. :roll:

Автор:  miro_atc [ Чет Апр 18, 2013 9:40 am ]
Заглавие:  Re: Въпрос за STM32, прекъсване и приоритет

Приоритетите на прекъсванията се задават в IP регстрите на NVIC (което е част от М3 ядрото). В CMSIS има една функцийка за целта:
void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

Tова е приоритета на заявките от съответното прекъсване. В момента в който влезе в някакво прекъсване, неговия приоритет става текущ за проца...

Сега, принципно приоритета е добре да го бараш преди да си разрешил прекъсването. Ако няма чакаща заявка може и да стане в движение. Не че ти го препоръчвам, но като влезеш в първото може да вдигнеш приоритета на второто, а преди да излезеш да го свалиш. Има шанс да стане, единствено не съм сигурен ако второто вече чака дали ще направи нова арбитрация (би трябвало).

Само не се опитвай да правиш инверсия на приоритетите. В смисъл докато си в една ниво да се опиташ да пуснеш по-ниско ниво. Гарантирано ще те напсува с hard fault.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/