Rozvíjam a malý vstavaný systém na mikrokontroléri ARM BEZPREVÁDZKOVÝ SYSTÉM. Vyskytuje sa niekoľko rôznych typov prerušení (stlačenia tlačidiel, konverzia z A na D, časovač - atď.) A beží iba jedno vlákno.
Chcem, aby sa spracoval rad udalostí FIFOkde každá rutina prerušovacej služby pridá jej udalosť do frontu a hlavné (a iba) vlákno odstráni udalosti z frontu na spracovanie. Jasný prístup k štruktúre údajov frontu v rutine prerušovacej služby je nebezpečný, ale spinlock spôsobí zablokovanie pretože ak má hlavné vlákno zámok a dôjde k prerušeniu, ISR bude čakať na zámok navždy.
Samozrejme už viem, že môžem prerušiť prerušenia, zatiaľ čo hlavné vlákno sa hádže s frontom, ale nie je to ideálne.
Aký je najlepší spôsob, ako postupovať tu?
Vďaka
odpovede:
0 pre odpoveď č. 1Ak sa môžete dostať do fronty s pevnou veľkosťou,nepotrebujete nič komplikované (predpokladám, že prerušenia sú v ISR zakázané), pretože existuje iba jeden čitateľ - vaše jadro -, ktoré aktualizuje ukazovateľ chvosta, a jeden spisovateľ - ISR, ktorý aktualizuje ukazovateľ hlavy. Inak použitie Načítanie prepojené / podmienené ukladanie pokyny na implementáciu a frontu bez zámku.