Skocz do zawartości

Jak Malinka zarządza wątkami?


GrzegorzSz

Pomocna odpowiedź

Witam wszystkich
Zaczynam dopiero przygodę z Malinką i zapewne zbłądzę jeszcze wiele razy, zanim osiągnę pożądany efekt. Chcę na niej zrobić system nadzoru i ewidencji nad piecem centralnego ogrzewania w moim domu.
Na komputerze powinny chodzić:
1. właściwy program sterujący
2. interfejs graficzny wyświetlający dane i pozwalający zmieniać parametry
3. rejestrator w bazie danych wartości typu temperatury, czas otwarcia palnika gazowego itp.
Niestety, utknąłem za granicą i na razie mogę tylko rozpatrywać problemy teoretycznie (cały zestaw leży w kartonach w Polsce).
Ze względu na liczne głosy zachwytu, chciałbym całe oprogramowanie napisać w Pythonie. Będę wdzięczny za wyjaśnienie kilku wstępnych wątpliwości:

1. Główny program mógłby chodzić w pętli opisanej w Waszym kursie
while True:
    temperatura1 = sensor1.get_temperature()
    if temperatura1 < temperatura_min:
        uruchom_piec()

    temperatura2 = sensor2.get_temperature()
    if temperatura2 < temperatura_min:
        grzej_wode()
 # itd.
    time.sleep(1)


Interesuje mnie zachowanie funkcji sleep(). Z jednej strony wydaje mi się konieczna, bo inaczej potężnie obciążymy procesor, z drugiej zastanawiam się, czy w czasie oczekiwania nie zablokuje np. obsługi ekranu dotykowego i zmianę nastaw?

2. W jaki sposób przydzielane są wątki na poszczególne rdzenie - czy dzieje się to automatycznie, czy też musi to robić programista?
3. Zakładam stworzenie niezależnych programów, które będą miały łączność poprzez jakiś plik z danymi nastaw (modyfikacja przez interfejs graficzny, a odczyt przez program sterujący) oraz plik wartości odczytanych z czujników (zapis przez program sterujący, a rejestracja w odpowiednich interwałach czasowych przez interfejs do bazy danych)
Czy da się zastosować jakiś np. sprzętowy zegar, który wygeneruje przerwanie co minutę żeby zapisać kolejny rekord z danymi, czy też stosować sleep() w pętli?

Link do komentarza
Share on other sites

Dnia 28.05.2020 o 22:26, GrzegorzSz napisał:

W jaki sposób przydzielane są wątki na poszczególne rdzenie - czy dzieje się to automatycznie, czy też musi to robić programista?

Ogólnie nie masz ani potrzeby, ani możliwości zarządzania przydziałem rdzeni (tzn. można wymusić wykonanie procesu na konkretnym rdzeniu, ale poza bardzo specyficznymi przypadkami nie jest to potrzebne, w życiu skorzystałem z tej możliwości dokładnie jeden raz).

Co do sleep: istnieją funkcje takie jak select, które oczekują na jakieś wyrażenie.

Poza tym malinka to nie Arduino, tu możesz uruchomić kilka programów jednocześnie i niech się systemowy scheduler martwi co z tym fantem zrobić. Przykład z mojego podwórka (akurat piec CO):

Program pierwszy: interfejs graficzny to zwykły serwer WWW pisany w Pythonie. Z reguły nie robi nic poza czekaniem na połączenie z przeglądarki. W razie dokonania zmian ustawień po prostu je zapisuje i nic poza tym, bo drugi program i tak będzie musiał je odczytać.

Program drugi: uruchamiany okresowo (co minutę) z crona (czyli automatycznie) program przeliczający temperatury (zewnętrzna, wewnętrzna, nastawiona temperatura w mieszkaniu w najbliższym czasie) program, który decyduje, czy ma odpalić piec. Raczej nie ma sensu częstsze sprawdzanie temperatury, bo przecież podgrzanie mieszkania o jeden stopień trwa ładnych parę minut.

Rejestrator był ale go nie ma z uwagi na zbyt częstsze zapisy na karcie - zamiast tego mam pełne informacje o pracy pieca z ostatnich 24 godzin. Jego funkcję pełnił program przeliczający temperatury, który po odczytaniu aktualnych danych wrzucał wszystko do bazy (temperatura wewnątrz, na zewnątrz i powód, dla którego program postanowił włączyć/wyłączyć piec właśnie teraz).

Oprócz tego na malince chodzi kilka innych programów nie związanych z regulacją ogrzewania.

Malinka to stary, jednordzeniowy B+...

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.