Mam rutynę, która przełącza GPIO pin wysoki/niski i mieć opóźnienie między wzlotów i upadków (przy użyciu udelay
), a następnie próbki GPIO stan na pewien okres. Muszę się upewnić, że ta część kodu jest wykonywana bez uprzedzenia przez program planujący lub przez jakiekolwiek możliwe przerwania. Używam kodu w dwurdzeniowym systemie ARM, więc powinien to być SMP. Czy Spin_Lock_IrqSave()
jest wystarczająco bezpieczny do tego celu? Mam wrażenie, że mój kod wciąż jest w jakiś sposób przerywany, ale nie ma jeszcze dowodów.W systemie Linux, jak upewnić się, że sekwencja kodu jest wykonywana bez przerwy
Wielkie dzięki.
Dziękuję bardzo za odpowiedź. Chcę wyłączyć zarówno przerwanie, jak i pierwszeństwo i upewnić się, że jedna z moich procedur może zostać wykonana bez żadnych przerw. Procedura musi wywoływać sterownik GPIO (gpio_set/reset_value, gpio_direction_input/output), a także funkcje udelay. W takim przypadku czy spin_lock_irqsave jest wystarczająco bezpieczny? Dzięki jeszcze raz – user1697356