/ / Spinlocks in IRQ на малка вградена система - блокиране, прекъсване, спинлок, ISR

Spinlocks в IRQ на малка вградена система - блокировка, прекъсване, spinlock, isr

Разработвам малък вградена система на ARM микроконтролер БЕЗОПЕРАТИВНА СИСТЕМА. Той има няколко различни вида прекъсвания (натискане на бутони, преобразуване от А до D, таймер и т.н.) и само една нишка.

Искам да имам FIFO опашка от събития за обработкакъдето всяка програма за прекъсване добавя събитието към опашката, а основният (и единствен) поток премахва събитията от опашката за обработване. тъй като ако основната нишка има заключване и се случи прекъсване, ISR ще изчака завинаги ключалката.

Разбира се, вече знам, че мога да деактивирам прекъсванията, докато основната нишка се бърка с опашката, но това не е идеално.

Какъв е най-добрият начин да продължите тук?

Благодаря А

Отговори:

0 за отговор № 1

Ако можете да се измъкнете с опашка с пръстени с фиксиран размер,не се нуждаете от нищо сложно (предполагам, че прекъсванията са деактивирани в ISR), защото има само един четец - конецът на ядрото - който обновява указателя на опашката, и един писател - ISR - който актуализира указателя на главата. Заредете свързани / съхранявайте условно инструкции за прилагане на a опашка без заключване.