Migająca dioda w Raspberry Pi

0

Witam Wszystkich,

Pogramuję w C/C++ obsługę GPIO w Raspberry, jak rozwiązalibyście taką sytuację: Migam diodą używając "delay(500)", pomiędzy kolejnymi delay'ami muszę sprawdzać stany na pozostałych GPIO - w sumie nie ma problemu gdyż co te 500ms wykonuję funkcje sprawdzenia stanów GPIO. Jednak wydaje się to rozwiązanie nie efektywne i lepiej byłoby gdybym podczas migania tejże diody (w tle programu) sprawdzał na bieżąco pozostałe GPIO. Może znacie rozwiązania podobnych problemów?

1

Jak jest delay(), to powinna być i funkcja pozwalająca uzyskać jakiś znacznik czasowy - czy to od początku uruchomienia programu, czy systemu ogółem. Jak masz taką funkcję, to wtedy:

  1. Zaczynasz czekać - zapisujesz sobie znacznik czasowy
  2. Sprawdzasz GPIO
  3. Sprawdzasz obecny znacznik czasowy - gdy (obecny - zapisany) > limitCzasu, koniec czekania
  4. Robisz jakiś drobny delay(), co by nie urżnąć procesora ciągłym sprawdzaniem GPIO
  5. Zapętlasz się do punktu 2
1

Możesz zamiast jednego delaya 500 ms robić 5 delayów po 100 ms i sprawdzać częściej stan wejść.
Możesz też ustawić GPIO w tryb przerwania (interrupt), wtedy odpowiednia funkcja wykona się automatycznie.

0

Dziękuję za powyższe wskazówki. Jeszcze dopytam, co myślicie o użyciu fork() lub tworzeniu wątków?

0

Fork kopiuje obszar pamięci tworząc w ten sposób proces-dziecko. Nie bardzo widzę zastosowanie tego w tej sytuacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0