Skocz do zawartości
wojtekizk

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ę! 1

Udostępnij ten post


Link to post
Share on other sites
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

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
Share on other sites
(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

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

Dyskusja wróciła na właściwe tory, zachęcam więc do kontynuowania rozważań 😉

Udostępnij ten post


Link to post
Share on other sites

Oj, po takim potraktowaniu autor wątku chyba już się nie pojawi:(

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...