Pytanie zapewne z kategorii banalnych, ale nie mogę na szybko doszukać się odpowiedzi, a nie jestem pewien, czy w tym przypadku powinienem trzymać się przyzwyczajeń z mikrokontrolerów, czy jednak nie.
Jak wiadomo jedną z najważniejszych zasad przy programowaniu na MCU jest jak najszybsze wychodzenie z funkcji obsługującej przerwanie - jeśli trzeba wykonać dłuższą partię kodu albo coś przeczekać, ustawia się flagę i robi to w pętli głównej programu.
Czy ta zasada ciągle obowiązuje na Raspberry Pi? Mam kawałek kodu, który ma m.in. sprawdzać stan kilku przycisków i obsługiwać enkoder obrotowy. Po wykryciu naciśnięcia przycisku albo przekręcenia pokrętła zajdzie konieczność wysłania polecenia do zewnętrznego procesu, za pośrednictwem potoku nazwanego albo gniazda uniksowego. Mogę sobie pozwolić na umieszczenie tych operacji w kodzie obsługi przerwania? Jądro sobie poradzi z taką sytuacją, czy będę miał do czynienia z blokadą, jak na mikrokontrolerze?
Jeśli takie rozwiązanie jest niedopuszczalne, w jaki sposób mogę wybudzić pętle główną uśpioną poleceniem sleep()? Bo z tego co widzę, nie dzieje się to automatycznie po wyjściu z przerwania. Mógłbym co prawda usypiać program na krótko i periodycznie sprawdzać stan flag, aby użytkownik nie zauważył opóźnień. Jednak trochę szkoda cykli procesora, jeśli da się to zrobić lepiej.