Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 9 kwi 2025, o 09:20


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
    Autor Wiadomość
    PostNapisane: 27 paź 2019, o 21:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1033
    Lokalizacja: Trójmiasto
    Pomógł: 190

    Czas wykonywania pętli głównej programu nie ma zupełnie nic wspólnego z ustawieniami timerów, chyba że te generują przerwania, które z kolei jeśli zawierają dużą ilość kodu i są często wywoływane to oczywiście spowalniają wykonywanie pętli głównej programu w skrajnych przypadkach mogą niemalże zatrzymać jej wykonywanie. Tu kwestia tego niemalże - jeśli przerwanie zostanie wywołane następuje skok do jego obsługi, i np w trakcie tej obsługi przychodzi kolejne wywołanie przerwania, zostaje podniesiona flaga oczekiwania na jego wykonanie, w momencie zakończenia obsługi obecnego przerwania następuje skok powrotny do wykonywania głównego programu, ale z uwagi na oczekującą flagę przerwania wykona się tylko jedna instrukcja z programu głównego i nastąpi kolejny skok do obsługi oczekującego przerwania.
    Tak więc jak już pisałem program zwolni do jednej instrukcji pomiędzy przerwaniami - w skrajnym przypadku oczywiście.
    Jeśli nie ma żadnych przerwań lub jeśli są krótkie i w miarę rzadko wywoływane to sam program główny jest wykonywany z pełną prędkością zegara taktującego, przerywany jedynie tymi procedurami przerwań.
    Właśnie dla tego tak pożądane są sprzętowe moduły w uC (liczniki, UARTy magistrale SPI i I2C itp) , ponieważ działają niezależnie od programu nie zajmując mocy obliczeniowej procesora.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 paź 2019, o 22:03 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1033
    Lokalizacja: Trójmiasto
    Pomógł: 190

    Ale ten licznik masz w pętli głównej programu?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 paź 2019, o 22:57 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1033
    Lokalizacja: Trójmiasto
    Pomógł: 190

    Wyliczenie częstotliwości nie będzie takie proste, bo na całość składa się kilka czynników: wywoływane przerwanie i jego czasochłonność i częstotliwość + skoki do i z obsługi, skok i powrót do/z funkcji w której masz ten licznik++, inne rzeczy które są w pętli głównej jak warunki pętle i operacje.
    Jeśli czujesz się na siłach to możesz podejrzeć plik asemblera po kompilacji (plik *.lss w katalogu Release) i na jego podstawie policzyć. Ale to nie będzie stała częstotliwość ze względu chociażby na przerwanie które jest wywoływane co twoje 200Hz. Pętla główna to nie timer, nie da się tego policzyć szybko i precyzyjnie, a dodatkowo wystarczy że coś zmienisz w kodzie to całe obliczenia trzeba na nowo robić bo każda zmiana powoduje że kompilator może zmienić listę rozkazów, a częstotliwość właśnie zależy od ich ilości.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 paź 2019, o 09:04 
    Offline
    Użytkownik

    Dołączył(a): 05 sty 2015
    Posty: 393
    Lokalizacja: Mielec
    Pomógł: 14

    Jak się nie jest biegły w liczenia czasu instrukcji uC ( wciąż próbuje się tego nauczyć) to zapina się jakiś analizator stanu np saeale I patrzy na ekranie na wynik, jak nie złapie stanu przy jednym obrocie pętli to można to mnożyć np zablokować pętle while po np 10 czy 100 zapetleniach, potem dzielisz wynik z saeale.

    W sumie dalej nas nie uczy tego jak to policzyć bo to już "ryba a nie wędka" no ale cóż, nie jest to takie proste.

    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 paź 2019, o 14:45 
    Offline
    Użytkownik

    Dołączył(a): 05 sty 2015
    Posty: 393
    Lokalizacja: Mielec
    Pomógł: 14

    Chodziło mi bardziej o cały program, pętla z przerwaniami, jeden obrót , komunikacji nie licze bo ona może trwać cały czas.

    Np mamy zadanie gdzie pętla i mniej strategiczne przerwania ma trwać ileś tam dajmy nato 1ms, sam wyświetlacz 2x16 pochłania dużo czasu więc wszystko zależy od założeń programu.

    To kto co zrobi w przerwania h to jego dobra wola, prawidłowo powinno się wiadome krytyczne operacje.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 paź 2019, o 20:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1033
    Lokalizacja: Trójmiasto
    Pomógł: 190

    Preskaler zawsze masz w rejestrach timera więc ma wpływ wyłącznie na dany timer. Pętla główna programu napędzana jest z prędkością taktowania uC i ewentualnie zakłócana przerwaniami.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO