/ / Spinlock v IRQ na malom zabudovanom systéme - deadlock, prerušenie, spinlock, isr

Spinlocky v IRQ na malom embedded systéme - zablokovanie, prerušenie, spinlock, isr

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ď č. 1

Ak 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.