Migająca dioda w Raspberry Pi

Migająca dioda w Raspberry Pi
PI
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 7 lat
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
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 19 godzin
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.

PI
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 7 lat
0

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

FO
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:4
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.