Skocz do zawartości

Wielozadaniowość w Arduino - biblioteka Timers


Pomocna odpowiedź

Może i to rozwiązanie nie jest idealne, ale to tak samo jak jechać po kursie podstaw C++, gdzie autor używa cin/cout. Zależy jaka jest grupa docelowa.

Faktem jest, że można coś ulepszyć, po to sam się wypowiedziałem, ale nie ma co od razu mieszać tematu z błotem, bo ktoś się wychylił z czymś od siebie. Taki kod ma walory edukacyjne i nawet jego przeanalizowanie może coś wnieść do umiejętności programistyczne czytelników forum. Fakt, że jest tu wielu doświadczonych programistów, którzy mogą się swobodnie wypowiadać, ale patrząc choćby po naczelnej tematyce kursów - podstawy/edukacja, to wrzucenie takiego programu jest jak najbardziej uzasadnione.

A jeżeli jest możliwość rozszerzenia tego, to fajnie podać możliwe sposoby wzbogacenia. Ale też jeżeli ktoś ma takie umiejętności i doświadczenie, to podanie przykładowej implementacji byłoby miłym gestem wzbogacającym treść merytoryczną forum.

  • Lubię! 2
8 minut temu, Gieneq napisał:

Taki kod ma walory edukacyjne

Pozwolę sobie być innego zdania... ale to Ty jesteś informatykiem (a przynajmniej moderatorem w dziale dla informatyków) a nie ja 😞

  • Lubię! 1

Posłuchajcie mnie, krytyka powinna być konstruktywna i prowadząca do czegoś lepszego. Natomiast prywatne wycieczki niezależnie spod czyjej klawiatury wychodzące nigdy nie będą przeze mnie tolerowane. Proszę więc powstrzymać się od wzajemnego obrażania. Tak więc posty tylko na temat.

  • Lubię! 2

Dawno temu dioda, bo tak się kiedyś nazywał Forbot był mega fajnym miejscem, ale widzę że czasy się zmieniają.

W każdym razie, wracając do krytyki konstruktywnej - mamy taki kod:

        long long delta_time = actual_time - _elements[i].begin_time;
        
        if (delta_time < 0)
        {
          delta_time += 0xffffffff;
          delta_time += 1;
        }
        if (_elements[i].interval > 0 && delta_time >= _elements[i].interval)
        {
          onTime(i);
          _elements[i].func();
          _elements[i].begin_time = actual_time;
        }

mam więc kilka konstruktywnych pytań:

1) ile operacji musi wykonać 8 bitowy mikrokontroler, żeby poradzić sobie z typem danych long long

2) czy jego użycie jest konieczne

3) czy uzasadnione

4) i wreszcie konstruktywnie - jak to samo napisać prościej, szybciej i poprawniej

(edytowany)

To jak się czepiamy:

5) Po co liczyć delta_time jeśli _elements[ i].interval będzie równe zeru?

6) Po co w ogóle zmienna delta_time i dlaczego jest signed? Kiedy może być mniejsza od zera?

Nie zaglądam do całego kodu...

Edytowano przez ethanak

Te dwa ostatnie wpisy są jak najbardziej konstruktywne i dają trochę do myślenia. 

11 godzin temu, Elvis napisał:

ile operacji musi wykonać 8 bitowy mikrokontroler, żeby poradzić sobie z typem danych long long

8 razy więcej względem zmiennych byte?

11 godzin temu, Elvis napisał:

czy jego użycie jest konieczne

actual_time to unsigned long begin_time to też unsigned long więc nie?

11 godzin temu, Elvis napisał:

czy uzasadnione

 

54 minuty temu, ethanak napisał:

Kiedy może być mniejsza od zera?

wychodzi że nigdy. 

11 godzin temu, Elvis napisał:

i wreszcie konstruktywnie - jak to samo napisać prościej, szybciej i poprawniej

Poniżej 1/4s to mógł by być byte? jest od 0 do 255. Jeśli więcej niż minuta to można by zliczać przepełnienia w drugiej zmiennej byte a wynik podawać w zmiennej unsigned int?

To takie odpowiedzi osoby , która co prawda studia skończyła ale nie związane z informatyką (ale jeden fakultet był) więc mogą być błędne.

  • 1 rok później...

Bardzo mi się podoba ta biblioteka i właśnie ją zastosowałem.Zaglądając do pliku tekstowego natknąłem się na:

attach    KEYWORD2
setInterval    KEYWORD2
updateInterval    KEYWORD2
process    KEYWORD2
onTime KEYWORD2

Chodzi mi o pełny opis tej biblioteki  a szczególnie o onTime.. Czy kolega ma jakąś wiedzę ta ten temat i czy mógłby się podzielić wiedzą.

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...