Zdar lidi, už jste někdo řešil kritickou sekci na AVR? Koukal jsem všude možně a všude se používá zákazu přerušení.
Jenže co když dojde zrovna v oné chvíli k události, která by vyvolala přerušení. Nemůžu si dovolit o tu událost přijít.
Fórum › Mikrokontroléry
Kritická sekce
dost zalezi na tom, co myslis tim "kriticka" -- obvykle je to neco, co se musi vykonat za urcity cas a nesmi se prerusit .. nebo podobne...
ted si zrovna nejsem jist ale preruseni by se nemely ztratit.. maximalne pokud bys vykonaval prilis dlouho bys uz nerozeznal vicenasobne preruseni ze stejneho zdroje
jinak se vykonaj po znovuspusteni preruseni
tím "kritická" myslím to, že se v té sekci přistupuje ke sdíleným prostrředkům, zde fronta zpráv.
Přerušení se sice vykonají po znovupovolení, ale to podle mě platí jen pokud přerušení je citlivé na logickou úroveň. Platí to ale i v případě že přerušení reaguje na hranu?
Zatím jsem přišel dva způsoby:
1) předělat/upravit HW aby negeneroval přerušení jako hranu ale jako logickou úroveň, ale zase bych musel SW ošetřit aby nedošlu k duplikaci přerušení
2) při vstupu do kritické sekce zakázat přerušení a po vykonání sekce načíst registr GIFR a podle toho znovuvyvolat přerušení. Zde je ale problém držet si údaje o aktuálním přerušení, možnost zacyklení a tak
Dělám rozsáhlejší zabezpečovací ústřednu na ATmega16 (kvůli ceně a tak) a ta moc prostředků nemá. Předtím jsem dělal na ATmega128, na kterém jsem rozchodil NutOS a obdobné "blbosti" jsem tím pádem řešit nemusel.
no v operacnich systemech se to resi pres "semafory" .. tj mas konkretni promennou kde si uzamknes nejaky sdileny prostredek aby do toho nehrabalo zadny dalsi vlakno .. akorat pokud toho mas vic hrozi takzvany deadlock.. ze to treba padne a neuvolni po sobe...
preruseni nastavuji priznaky preruseni a ty se po vykonani nuluji .. tj. problem bude akorat s vicenasobnym prerusenim v dobe zakazaneho preruseni ..
kdyby neco muzes se zeptat treba na avrfreaks.net tam maj mnohem vic zkusenosti
KIIV napsal:
...ted si zrovna nejsem jist ale preruseni by se nemely ztratit... maximalne pokud bys vykonaval prilis dlouho bys uz nerozeznal vicenasobne preruseni ze stejneho zdroje
jinak se vykonaj po znovuspusteni preruseni
rozumim tomu dobre, ze se napr. ext. preruseni v dobe, kdy jsou preruseni zakazana (napr. cli()), nekde stradaji, aby se mohly zpracovat po jejich povoleni???
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Synchronizace - kritická sekce v metodě vlákna — založil hlucheucho
Kritická sekce pro jednotlivé atributy tridy — založil Jiri K.
Kritická bezpečnostní díra fóra. — založil Jakub
Sekce videa — založil Spectator
Postrádám sekce — založil remmidemmi
Moderátoři diskuze