logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Sens przerwań i straty mocy obliczeniowej przez nie

kamil3211 22 Gru 2020 13:15 1446 22
REKLAMA
  • #1 19130552
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    To jest ogólne pytanie do mikrokontrolerów.
    Wcześniej używałem w większości arduino ide. Zacząłem się uczyć stm i natknąłem się na przerwania. I teraz się zastanawiam nad ich sensem i czy się o nich uczyć a później zatruwać sobie życie kolejną zbędną warstwą abstrakcji myśląc błednie. Dopiero teraz się tego dowiedziałem bo wcześniej nigdy nie było mi to potrzebne. Nie jestem pewien ale odpowiedzi na moje pytania mogą zależeć czy to jest sprzętowe czy programowe przerwanie jeśli dobrze mówię.

    Moje pytania są następujące.
    1.Czy z przerwaniami jest tak jak z pseudowielowątkowością, że im więcej pseudowątków tym użyteczna moc całego urządzenia spada bo do obsługi przerwań też jakaś moc jest potrzebna? obu cel jest taki sam. I najlepiej pseudo wielowątkowości nie stosować.
    2. Gościu(używający w kodzie do opóźnień delay() więc mu nie ufam a później mówiący że avr jest wolne) mówiący o przerwaniach mówi że wykonują się niezależnie od zegara? Że jak na pinie pojawi się dany stan mikrokontroler od razu tworzy przerwanie? . Jeśli tak jest to to jest na plus przerwań. Jeśli nie to znaczy że mikrokontroler co jakiś czas poświęca swoje takty na to przerwanie mimo że się nie wykonuje i znowu marnuje się moc. I zamiast tego po prostu zrobić if sprawdzający czy chciany warunek zachodzi. Spotkałem się z czymś takim w fpga tworząc proces tworzy się wpierw listę czułości od której zależy czy proces się wykona jeśli dany san pinu się zmieni i to faktycznie nie zależy od zegara.
  • REKLAMA
  • #2 19130695
    maciej_333
    Poziom 38  
    Posty: 4246
    Pomógł: 488
    Ocena: 1606
    Bez przerwań nie da się zrobić absolutnie niczego, co jest bardziej skomplikowane.

    Dzięki zastosowaniu przerwań mikrokontroler nie musi stale sprawdzać, czy zaszło jakieś zdarzenie. Ciągłe sprawdzanie czegoś takiego (ang. polling) spowolniłoby program. Ponadto kolejny kłopot to odczytanie danej flagi z układu zewnętrznego (np. przez SPI/I2C) to dodatkowe (czasem spore) opóźnienie. Inna sprawa, to fakt iż wiele urządzeń zewnętrznych wymaga obsługi z bardzo małym opóźnieniem. Załóżmy, że w pętli głównej coś stale się dzieje. Przez to jedna jej iteracja trwa np. 5 ms. Zatem tylko, co 5 ms jest możliwość sprawdzenia, czy zaszło jakieś zdarzenie. Co, jeśli np. trzeba odczytywać próbki z przetwornika A/C, co 100 µs? Bez przerwań nie da się tego zrobić. W tym wypadku można zastosować ewentualnie DMA. Jednak potem i tak trzeba w końcu obsłużyć od niego przerwanie. Jeszcze gorzej, jeśli tych urządzeń jest więcej.

    W przypadku wektorowego systemu przerwań zdarzenie zewnętrzne powoduje zapamiętanie stanu licznika rozkazów na stosie, zablokowanie przerwań i skok do wektora przerwań. Wektor przerwań to seria rozkazów skoku do procedury obsługi danego przerwania. Musi on być umieszczony w odpowiednim miejscu pamięci, ale generalnie można to w jakimś zakresie zmienić (zależnie od architektury). Potem w samej procedurze dochodzi do zachowania zmienianych rejestrów na stosie (zapis tzw. kontekstu), obsługiwane jest urządzenie zewnętrzne i następuje odtworzenie kontekstu (odtworzenie poszczególnych rejestrów). Ostatecznie odtwarzany jest licznik rozkazów i następuje skok do miejsca w jakim wystąpiło przerwanie. Tym samym program, jaki się wykonywał działa dalej tak samo.

    Sama procedura obsługi przerwania musi się wykonywać krótko, by nie zakłócić całej reszty (główny wątek).

    Przerwania mogą też być jedno i wielopoziomowe, można też ustawiać priorytety przerwań.

    Zatem nie jest tak, że coś się traci. Jeśli przerwania są włączone, a żadne zdarzenie nie wystąpi, to straty czasu procesora (nie mocy obliczeniowej) nie ma. Jednak obsługa przerwania nie jest natychmiastowa. Od pojawiania się zdarzenia do jego obsługi upłynie ileś taktów.

    Ponadto przerwania można zrobić również w Arduino.

    Generalnie nasłuchałeś się wypowiedzi Youtubowych "ekspertów" i naczytałeś pseudo-poradników. Poruszyłeś tyle zagadnień, że trudno na to odpowiedzieć.
  • #3 19130764
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    maciej_333 napisał:
    Zatem nie jest tak, że coś się traci. Jeśli przerwania są włączone, a żadne zdarzenie nie wystąpi, to straty czasu procesora (nie mocy obliczeniowej) nie ma. Jednak obsługa przerwania nie jest natychmiastowa. Od pojawiania się zdarzenia do jego obsługi upłynie ileś taktów.
    o to mi chodziło dzięki widzę sens wprzypadku 1 przerwania lub wielu które na pewno nie będą w tym samym czasie.

    Dodano po 2 [minuty]:

    Czyli użycie przerwań może nawet zwiększyć użyteczną moc obliczeniową i jeszcze np tak jak delay kiedy celem jest zatrzymanie całego mikrokontrolera i zmniejszenie poboru prądu bo nie nasłuchuje?
  • REKLAMA
  • #4 19130793
    ptero
    Poziom 25  
    Posty: 624
    Pomógł: 68
    Ocena: 179
    Witam Wszystkich.
    Ucz się przerwań. Naprawdę wielu rzeczy nie da rady zrobić bez przerwań, np. termometr z wyświetlaczem multipleksowym - odczyt z ds18B20 trwa ileśtam ms, w tym czasie wyświetlacz nie działa, cały program jest zatrzymany i czeka... coś jak delay(). Czy na lampach NIXIE +termometr+ sterowanie BT. Faktycznie moc obliczeniowa spada, ale coś za coś. Dobrze napisane przerwanie nie spowalnia zbytnio mikrokontrolera. A to tylko najprostsze przykłady.
  • #5 19130808
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    ptero napisał:
    ptero
    mnie najbardziej interesuje to czy moc obliczeniowa przez to spada jesteś pewien? zrobię pewien test i napisze zaraz o nim
  • REKLAMA
  • #6 19130874
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    kamil3211 napisał:
    mnie najbardziej interesuje to czy moc obliczeniowa przez to spada jesteś pewien?

    Procesor nie poświęca czasu na to, czy przerwanie zaszło, więc tu nie ma żadnego narzutu. W chwili zgłoszenia przerwania, procesor przerywa swoją normalną pracę i zaczyna wykonywać program obsługi przerwania. Ten program oczywiście zabiera cza.
    kamil3211 napisał:
    Czyli użycie przerwań może nawet zwiększyć użyteczną moc obliczeniową i jeszcze np tak jak delay kiedy celem jest zatrzymanie całego mikrokontrolera i zmniejszenie poboru prądu bo nie nasłuchuje?

    Tak, zwiększa użyteczną moc, bo procesor zamiast w pętli sprawdzać stan jakiegoś układu, może robić co ma do zrobienia, a układ, jak będzie chciał zgłosi przerwanie, co spowoduje automatyczne wykonanie podprogramu obsługi przerwania. Poza tym, jak już pisano, wiele rzeczy robi się prościej korzystając z przerwań.
    Co do zmniejszenia poboru prądu - tak, można wprowadzić MCU w jeden ze stanów oszczędzania energii, nadejście przerwania wybudzi MCU. Tylko trzeba dokładnie przeczytać notę używanego procesora, bo nie wszystkie przerwania są dostępne w niektórych trybach oszczędzania energii. Dla przykładu - przerwanie wywoływane zboczem sygnału, będzie zazwyczaj wymagać doprowadzenia zegara do układu IO, czyli w niektórych, głębokich trybach uśpienia będzie problem, chyba, że procesor ma specjalne układy umożliwiające asynchroniczne wybudzanie.
  • #7 19130887
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    ok ok co do testu chciałem sprawdzić czy jak zatrzymam wszystko używając delay to czy przerwanie się nie wykona na szczęście się wykonało co świadczy że zdarzenie czyli zmiana stanu pinu nie jest sprawdzane przez procesor. Dzięki

    Dodano po 19 [minuty]:

    Teraz dam taki bardziej praktyczny przykład np kiedy chce pobierać dane szeregowo to zamiast dawać if w pętli loop dam go w przerwaniu pin 2 będzie połączony z pinem rx atmegi328
    Załączniki:
    • Sens przerwań i straty mocy obliczeniowej przez nie Przechwytywanie.PNG (12.29 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #8 19130941
    maciej_333
    Poziom 38  
    Posty: 4246
    Pomógł: 488
    Ocena: 1606
    Moc obliczeniowa jest stała, bo liczy się ją jako liczbę jakichś operacji na sekundę. Przerwania więc zmniejszą zajętość mikrokontrolera.

    Ponadto podany przez Ciebie przykład kodu jest bez sensu.
  • REKLAMA
  • #9 19130965
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    Ale przez ciągłe sprawdzanie w loop czy gdzie indziej za pomocą if zabiera takty a przerwanie nie więc nie marnuje się i można to spożytkować gdzie indziej oczywiście że pin 2 połączyłem z rx mikrokontrolera się marnuje ale i tak jeszcze nigdy wszystkich nie wykorzystałem
  • #10 19130978
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    kamil3211 napisał:
    kiedy chce pobierać dane szeregowo to zamiast dawać if w pętli loop dam go w przerwaniu pin 2 będzie połączony z pinem rx atmegi328

    Najpierw poczytaj o użytym porcie szeregowym. Odkryjesz, że może on generować przerwanie np. związane z odebraniem pełnej ramki danych. Nie musisz używać przerwania pinu, chyba, że emulujesz softwarowo coś co normalnie jest realizowane sprzętowo.
    kamil3211 napisał:
    le przez ciągłe sprawdzanie w loop czy gdzie indziej za pomocą if zabiera takty a przerwanie nie więc nie marnuje się i można to spożytkować gdzie indziej

    To jest jeden powód. Drugie jest taki, że można wykonać kod w ściśle określonym czasie. Np. chcesz migać diodą co 0,5 s. Zamiast bawić się w delay, po prostu ustawiasz przerwanie timera co 0,5s i w funkcji jego obsługi zmieniasz stan LEDa (oczywiście można to zrobić prościej, całkowicie sprzętowo, ale to tylko przykład).
  • #11 19131353
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    tmf napisał:
    Odkryjesz, że może on generować przerwanie np. związane z odebraniem pełnej ramki danych. Nie musisz używać przerwania pinu, chyba, że emulujesz softwarowo coś co normalnie jest realizowane sprzętowo.
    Teraz się dowiedziałem, że tak to działa. Wcześniej myślałem że jest tam jakiś dedykowany układ którego jedynym zadaniem jest odbiór danych a dane są wystawiane programiście przez ten układ w wygodny sposób i za pomocą available po prostu wysyła się ich liczbę więc szybkość transmisji dawałem najmniejszą bo zakłócenia itd. Ale tak nie jest. I teraz się zastanawiam czy takie podejście nie jest złe . Bo dane wysłane z niską ustawioną szybkością są dłużej odbierane czy też o tym pomyśleli a transmisja 300 a 250 000 to duża różnica?
  • #12 19131384
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    kamil3211 napisał:
    I teraz się zastanawiam czy takie podejście nie jest złe . Bo dane wysłane z niską ustawioną szybkością są dłużej odbierane czy też o tym pomyśleli a transmisja 300 a 250 000 to duża różnica?

    Jeśli przesiadasz się z Arduino, to przejrzyjnajpierw notę procesora, a szczególnie część opisującą układy peryferyjne. Bez tego dalej nie ruszysz, a nawet pobieżne przejrzenie noty pozwoli ci zorientować się jak to wszystko działa.
    Oczywiście pomiędzy przesyłaniem z szybkością 300 a 250000 jest spora różnica. I tu właśnie pokazują pazurki przerwania. Normalnie, bez przerwań wysyłałbyś coś, a następnie pracowicie czekał w pętli aż to się prześle. Dzięki przerwaniom cie to nie interesuje - przesyłane dane lecą do bufora skąd są pobierane w funkcji obsługi przerwania, wtedy, kiedy np. UART ma wolne miejsce w nadajniku i może nadać kolejny bajt. Także, w takim np. UART jest dedykowany układ nadajnika/odbiornika, który robi sporo, ale ma mały bufor - typowo 2-3 bajty, więc jeśli wysyłasz coś więcej to trzeba kombinować - najprościej właśnie użyć przerwań. Czyli taki UART sam ci zgłasza, że np. odebrał bajt danych i wypadałoby coś z nim zrobić, albo, że właśnie skończył nadawanie bajtu danych i ma miejsce w buforze na kolejny.
  • #13 19133733
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    Nie chcę znów zakładać nowego tematu ale mam szybkie pytanie. Standardowo używając pinów cyfrowych podłącza się do nich coś a to następnie trafia do masy. Czy mógłbym to podciągnąć zamiast do masy do zasilania i teraz jak na pinie cyfrowym będzie 0V to prąd popłynie. Wydaje się może mieć to znaczenie bo w przypadku expanderów ma to znaczenie
    https://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf strona 16 LOW-level output current
    ale w nocie atmegi
    https://ww1.microchip.com/downloads/en/Device...ive-Microcontrollers-ATmega328P_Datasheet.pdf strona 258 widzę tylko wydajność prądową 40 mA może domyślnie u wszystkich mikrokontrolerów tak jest ?
  • #14 19133864
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    kamil3211 napisał:
    Czy mógłbym to podciągnąć zamiast do masy do zasilania i teraz jak na pinie cyfrowym będzie 0V to prąd popłynie.

    Tak możesz.
    kamil3211 napisał:
    Wydaje się może mieć to znaczenie bo w przypadku expanderów ma to znaczenie

    To miało znaczenie w układach wykonanych w starych technologiach, w których prądy dla stanu niskiego i wysokiego były znacząco różne. Obecnie to nie ma zanczenia i bufory wyjściowe MCU są symetryczne. Wspomniany ekspander jest tak po prostu zaprojektowany i dla niego akurat ma znaczenie jak podłączyć wyjście, bo jak zauważyłeś dla stanu wysokiego wydajność jest znikoma - ale to wyjątek. ATMega328 ma symetryczne bufory wyjściowe i możesz sobie łłączyć do masy lub Vcc, jak ci wygodniej.
  • #15 19133875
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    Dobra dzięki to wszystko .
  • #16 19133881
    krzysiek_krm
    Poziom 40  
    Posty: 4612
    Pomógł: 716
    Ocena: 599
    kamil3211 napisał:
    Nie chcę znów zakładać nowego tematu ale mam szybkie pytanie. Standardowo używając pinów cyfrowych podłącza się do nich coś a to następnie trafia do masy. Czy mógłbym to podciągnąć zamiast do masy do zasilania i teraz jak na pinie cyfrowym będzie 0V to prąd popłynie. Wydaje się może mieć to znaczenie bo w przypadku expanderów ma to znaczenie
    https://www.nxp.com/docs/en/data-sheet/PCF8574_PCF8574A.pdf strona 16 LOW-level output current
    ale w nocie atmegi
    https://ww1.microchip.com/downloads/en/Device...ive-Microcontrollers-ATmega328P_Datasheet.pdf strona 258 widzę tylko wydajność prądową 40 mA może domyślnie u wszystkich mikrokontrolerów tak jest ?

    Wspomniany ekspander nie jest dobrym przykładem ponieważ ma porty pseudo dwukierunkowe: cienki pull-up oraz "mocne zero", dodatkowo na krótki czas równolegle do pull-upu dołączany jest obwód zwiększający prąd wyjściowy - żeby przyspieszyć przeładowywanie pojemności na wyjściu i dzięki temu skrócić czas przełączania.
  • #17 19135298
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    kamil3211 napisał:
    Że jak na pinie pojawi się dany stan mikrokontroler od razu tworzy przerwanie?


    Uhmm ... jakby to powiedzieć, od podbudowy teoretycznej nie da się uciec, przy czym rozumiem raczej systematycznie zbudowana książka (przez autora, który ma doświadczenie - inaczej wydawnictwo nie zapłaci), a nie chaotyczne odpryski z internetu, często od mędrca, który ten stopień wiedzy (lub "wiedzy") osiągną miesiąc wcześniej.

    Ciężko będzie Ci postąpić bez podbudowy teoretycznej.
    Sam język, jakim zbudowałeś pytanie, sugeruje, że nie masz zupełnie wyobrażenia co do hardwaru, jaki pod tym pracuje
  • #18 19135420
    pawelr98
    Poziom 39  
    Posty: 6464
    Pomógł: 413
    Ocena: 1155
    Myślę, że jednym z najprostszych przypadków do pokazania jak działają przerwania jest pisanie zegarka.

    W pętli śmiga sobie program do multipleksowania wyświetlacza, odpowiednio steruje wyjściami mikrokontrolera.
    Co jakiś czas wewnętrzny timer bądź sygnał zewnętrzny generuje przerwanie, które aktualizuje wyświetlane cyfry, w tym wypadku czas.
    Program od wyświetlacza na chwilę przestaje się wykonywać, przeskakuje do procedury, w tym wypadku dodanie do wartości sekund wartości jeden i ewentualnie przeskoczenie minut oraz godzin. Potem wraca sobie do głównego programu i dalej mieli multipleksowanie wyświetlacza. A że to przerwanie dzieje się raz na sekundę, to ma w zasadzie znikomy wpływ na jakość pracy multipleksowania wyświetlacza, bo program główny jest przerywany na krótko i bardzo rzadko (z punktu widzenia procesora).

    I tak samo przerwanie może służyć do wielu innych operacji. Mamy komunikację I2C/SPI realizowaną sprzętowo.
    Kiedy blok wewnątrz mikrokontrolera odbierze dane, idzie przerwanie, mikrokontroler przerywa na chwilę to co robi, wykonuje procedurę przerwania, po czym wraca do tego co robił. Jeśli na przykład robimy woltomierz albo termometr elektroniczny to odczytujemy sobie wartość, którą wysłał nam przetwornik ADC bądź czujnik temperatury i potem jest ona używana w głównej pętli do wyświetlania na wyświetlaczu.

    Jeszcze inny przykład przerwań można znaleźć nie w mikrokontrolerach, a w komputerach.
    Różnica między starym złączem PS/2 a USB.
    Jeśli myszka czy klawiatura jest podpięta do tego pierwszego, to wygląda to tak, że procesor mieli sobie swoje zadania, i kiedy coś się wydarzy (np. zostanie wciśnięty klawisz) to klawiatura wysyła przerwanie do procesora i mówi: "ej, użytkownik nacisnął klawisz". Kiedy nic się nie dzieje to przerwań nie ma.

    Jeśli natomiast klawiatura jest na USB, to wygląda to mniej więcej tak:
    Komputer się pyta na okrągło: "Dzieje się coś ?" A Klawiatura odpowiada "Nie" w większości przypadków.
    I tak w kółko, cały czas. A dlaczego tak się robi w przypadku komputerów ? Bo procesor w komputerze śmiga znacznie szybciej (kilka GHz) oraz ma od tego warstwy pośredniczące w postaci kontrolerów, oraz pewnie jeszcze tona innych rzeczy, którą koledzy informatycy wytłumaczą lepiej.

    Natomiast mikrokontroler jest wolniejszy i niekoniecznie musi mieć sprzętową obsługę danego zjawiska.
    I dlatego ciągłe odpytywanie się wszystkich wejść, czy zmienił się ich stan, jest trochę bez sensu.
    Do tego mikrokontroler może sobie pracować na wewnętrznym, niedokładnym zegarze (bo np. multipleksowanie wyświetlacza nie wymaga precyzji) ale zjawisko przerwania i związana z nią procedura jest wywoływana przez bardziej precyzyjny zegar, np. zewnętrzny zegar 1Hz aktualizujący cyfry wyświetlacza co sekundę.
  • #19 19135496
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    pawelr98 napisał:
    W pętli śmiga sobie program do multipleksowania wyświetlacza, odpowiednio steruje wyjściami mikrokontrolera.


    To jest właśnie przykład tego, o czym pisali Koledzy powyżej. Jeśli "śmiga w pętli" to z całą pewnością nie steruje "odpowiednio".
    Zadanie dla kol. pawelr98: Uzasadnij, dlaczego takie rozwiązanie jest całkowicie błędne i niedopuszczalne w prawidłowo zaprojektowanym sprzęcie i oprogramowaniu. Jakie będą widoczne dla użytkownika dwa przejawy błędnego działania wyświetlacza sterowanego w taki sposób? Jakie problemy elektryczne w urządzeniu powstaną z tego powodu? Odpowiadając na te pytania poprawnie masz szansę poprawić ocenę za projekt zegarka z 0/5 na 2/5 punktów. ;)

    pawelr98 napisał:
    Jeśli natomiast klawiatura jest na USB, to wygląda to mniej więcej tak:
    Komputer się pyta na okrągło: "Dzieje się coś ?" A Klawiatura odpowiada "Nie" w większości przypadków.
    I tak w kółko, cały czas. A dlaczego tak się robi w przypadku komputerów ? Bo procesor w komputerze śmiga znacznie szybciej (kilka GHz) oraz ma od tego warstwy pośredniczące w postaci kontrolerów, oraz pewnie jeszcze tona innych rzeczy, którą koledzy informatycy wytłumaczą lepiej.


    Masz rację - informatycy wytłumaczą lepiej, a w zasadzie nie tyle lepiej, co poprawnie, więc może lepiej Ty już nie tłumacz. Podobnie, jak powinno to mieć miejsce w przypadku wyświetlacza, proces odpytywania urządzenia USB nie odbywa się "na okrągło", a jest wyzwalany przerwaniem timera, zwykle nie częściej niż 100 razy na sekundę, Dzięki czemu ani gigahercowy, ani 20-megahercowy procesor nawet nie poczuje obciążenia obliczeniowego z tego tytułu.

    Wypada też zauważyć, że w bardzo wielu przypadkach całe oprogramowanie mikrokontrolera buduje się taki sposób, że w ogóle nie występuje w nim żadna "pętla główna", a cała funkcjonalność zawarta jest wyłącznie w przerwaniach. Takie podejście daje najlepszą responsywność i najniższe możliwe zużycie mocy, co przy zasilaniu urządzenia przez 5 lat z pastylki litowej jest niezwykle istotne.

    To jest właśnie różnica pomiędzy zabawkowym podejściem arduinowców i profesjonalną informatyką. To pierwsze - to takie klocki dla dzieci XXI wieku. Z klocków można zbudować piękny i kolorowy model samolotu, ale samolotu do wożenia przez ocean 200 pasażerów raczej się z nich nie zbuduje.
  • #20 19135703
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    BlueDraco napisał:
    Wypada też zauważyć, że w bardzo wielu przypadkach całe oprogramowanie mikrokontrolera buduje się taki sposób, że w ogóle nie występuje w nim żadna "pętla główna", a cała funkcjonalność zawarta jest wyłącznie w przerwaniach. Takie podejście daje najlepszą responsywność i najniższe możliwe zużycie mocy, co przy zasilaniu urządzenia przez 5 lat z pastylki litowej jest niezwykle istotne.
    Kiedyś spotkałem się gdzieś z takim podobnym komentarzem i go wtedy nie rozumiałem. Ale teraz rozumiem. https://botland.com.pl/content/226-wielozadaniowosc-arduino-czesc-druga znalazłem to w trakcie tego postu. Na początku używałem delay później millis() żeby marnować mniej i myślałem że bardziej oszczędnie się nie da ale da się korzystając z timerów da się.
    Chociaż tyle że z stm jest podobnie. I nie trzeba od nowa ogólna zasada ta sama.
  • #21 19135714
    Konto nie istnieje
    Poziom 1  
  • #22 19135733
    kamil3211
    Poziom 10  
    Posty: 474
    Ocena: 57
    BlueDraco napisał:
    To jest właśnie przykład tego, o czym pisali Koledzy powyżej. Jeśli "śmiga w pętli" to z całą pewnością nie steruje "odpowiednio".
    Zadanie dla kol. pawelr98: Uzasadnij, dlaczego takie rozwiązanie jest całkowicie błędne i niedopuszczalne w prawidłowo zaprojektowanym sprzęcie i oprogramowaniu. Jakie będą widoczne dla użytkownika dwa przejawy błędnego działania wyświetlacza sterowanego w taki sposób? Jakie problemy elektryczne w urządzeniu powstaną z tego powodu? Odpowiadając na te pytania poprawnie masz szansę poprawić ocenę za projekt zegarka z 0/5 na 2/5 punktów.
    Jak kolega nie będzie znał odpowiedzi to niech pan odpowie . No na pewno lepiej się wykorzysta moc obliczeniową. Pewnie też mniejszy pobór prądu. I gdzieś kiedyś coś obiło mi się o uszy że przewody kiedy płynie przez nie prąd to szybciej się zużywają czy korodują ale może się myle.

    Dodano po 5 [minuty]:

    JacekCz napisał:
    Sam język, jakim zbudowałeś pytanie, sugeruje, że nie masz zupełnie wyobrażenia co do hardwaru, jaki pod tym pracuje
    Może coś mam ale jak jedynym źródłem informacji jest internet to tak jest.
  • #23 19135781
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

✨ Przerwania w mikrokontrolerach są kluczowe dla efektywnego zarządzania zdarzeniami, umożliwiając realizację bardziej złożonych zadań bez konieczności ciągłego sprawdzania stanu urządzeń (polling). Użycie przerwań pozwala na zwiększenie użytecznej mocy obliczeniowej, ponieważ procesor może skupić się na innych zadaniach, a przerwania są wywoływane tylko w momencie wystąpienia zdarzenia. W przypadku zastosowań takich jak odczyt danych z czujników czy komunikacja szeregowa, przerwania znacznie upraszczają kod i poprawiają wydajność. Istotne jest również, że przerwania mogą pomóc w oszczędzaniu energii, umożliwiając mikrokontrolerowi przejście w tryb uśpienia, z którego wybudza go zdarzenie przerwania. Warto jednak zrozumieć, że dobrze zaprojektowane przerwania nie powinny znacząco obciążać procesora, a ich implementacja wymaga znajomości specyfikacji używanego mikrokontrolera.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA