Skocz do zawartości

Wielozadaniowośćna Arduino - pozbądź się delay


Gość es2

Pomocna odpowiedź

Gość es2
ok, pierwsza rzecz(wybacz moją zieloność), co w ogóle robi ta linijka:
if( czas > millis() ) return; 

Wychodzi z funkcji gdy czas > millis().

Aby programować w C, C++ trzeba znać podstawy języka. Zapoznaj sie z literaturą z załącznika.

i jakim cudem może czas być kiedyś większy od millis skoro od razu po wejściu do procedury ustawiamy

 uint32_t static czas=0; 

, to jak dwie linijki niżej może być czas większy od millis?

Zauważyłeś, że zmienna czas jest zadeklarowana jako static? I znów podstawy C. Taka zmienna jest ustawiana raz, po resecie uC, po wyjściu z funkcji zmienne ta nie straci swej wartości. Jeśli przypiszesz w funkcji np 5, to po kolejnym wejściu będzie tam wartość 5. Taka zmienna to to samo co zmienna globalna ale widziana w funkcji. Może mieć taka samą nazwę jak zmienna globalna, ale globalna zmienna czas to inna zmienna niżn lokalna statyczna zmienna czas.

Przy okazji tego pytania znalazłem błąd w kodzie. Ze względu na to, ze po resecie czas=0, pierwsze wywołanie funkcji spowoduje "ping" na ledach. Aby tak nie było, należy zmiennej czas przypisać wartość -1 (0xFFFFFFFF).

Czego nie rozumiem?

druga rzecz, nie wiem co to wirtualne timery..., czym się różnią od "normalnych"?

Normalnym masz np 3 a wirtualnych możesz zrobić kilkadziesiąt, kilkaset, kilka tysięcy (zależy ile masz pamięci i czasu procesora na obsługę timerów).

o co chodzi z tym przerwaniem co 1ms(lub inna wartość)? Co robimy co 1ms?

W każdym systemie istnieje konieczność odliczania czasu. Trzeba np co 180 wysłać zapytanie ARP. Co 1 sekunde zmienić stan diody. Po 500ms wyłączyć silnik bramy gdy napotka opór. Co 1ms wysłać pakiet SOF w USB.

Przeważnie odlicza się czas z rozdzielczością 1 lub 10ms.

Co to za zmienna używna w przerwaniach(volatile) timled?

Co robi ta linijka:

if( timled ) timled--; 

Znów podstawy C. Na temat volatile mozna długo pisać (poczytasz w literaturze z załącznika). Tak w skrócie, jeśli zmienną modyfikujesz w przerwaniu i używasz jej w programie głównym deklarujesz ją jako volatile. To sygnał dla kompilatora aby jej nie optymalizować. Nie wiem jak to prościej napisać.

if( timled ) timled--; 

jeśli zmienna timled różna od 0 to zmniejsz ją o 1. Funkcja ta jest wywoływana w przerwaniu 1ms (to musisz sobie dodac do swojego kodu, skorzystaj z biblioteki timer). Czyli jak wpiszesz do timerled wartość 100, to po 100ms osiągnie wartość zero. Dalsze liczenie bedzie zatrzymane.

PS

W jednym z projektów miałem około stu wirtualnych timerów. Znasz procesor, który miałby tyle timerów w swojej strukturze?

_C.pdf

_C Programowanie w jezyku C.pdf

_C prof_mikolajczak_c.pdf

Link do komentarza
Share on other sites

SOYER, jak już będziesz powtarzał podstawy C to zwróć uwagę że:

 !alarm

to nie to samo co

 alarm==false

Może taka powtórka to dobra rzecz i dla początkujących i dla tych co uważają że już wszystko wiedzą?

Link do komentarza
Share on other sites

Gość es2
SOYER, jak już będziesz powtarzał podstawy C to zwróć uwagę że:
 !alarm

to nie to samo co

 alarm==false

Może taka powtórka to dobra rzecz i dla początkujących i dla tych co uważają że już wszystko wiedzą?

W przypadku tego kody ma to dokładnie takie samo działanie.

Link do komentarza
Share on other sites

Niekoniecznie. Wszystko zależy od typu zmiennej alarm i całej reszty programu. Polecam poczytać Stroustrup-a, pastwił się nad tym biednym typem bool nieprzyzwoicie długo.

A ogólnie to bardzo trzeba uważać z udawaniem guru na forach takich jak to - jedno małe potknięcie i wszyscy wytkną błędy.

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

Gość es2
i dla tych co uważają że już wszystko wiedzą?

Proponuję pomagać nie czepiać się.

[ Dodano: 16-04-2018, 18:44 ]

Niekoniecznie. Wszystko zależy od typu zmiennej alarm i całej reszty programu. Polecam poczytać Stroustrup-a, pastwił się nad tym biednym typem bool nieprzyzwoicie długo.

Początkującemu, nieznającemu ce mam robic wykłady? Można, po 10 postach zniechęci się. Ale jak sie kolega czepia, to przy każdej wypowiedzi dodam * i napisze że to uproszczenie, dokładne wyjaśnienie w literaturze.

Arduinowiec, przeważnie nie ma ochoty sie uczyć, chce w godzinę napisać działający program.

Link do komentarza
Share on other sites

To pomagaj - na razie na wszystko piszesz "naucz się podstaw", a sam robisz podstawowe błędy. Wcześniej Marek1707 wytykał Ci błędy w podstawach elekotrniki (chociaż chyba niesłusznie zakładał że w EP znasz się na księgowości). Teraz chcesz pokazać się jako guru programistów, ale pokazujesz tylko że nikt nie jest doskonały. Więc może zamiast leczyć tutaj kompleksy i udawać mega-eksperta, warto odpowiadać na pytania użytkowników - jest ich sporo, a niejeden będzie wdzięczny za pomoc. A jak pomożesz odpowiednio wielu początkującym bidulkom to wszyscy to docenią, a może i pewnego dnia uznają Cię za Wielkiego Eksperta .

Link do komentarza
Share on other sites

Gość es2
To pomagaj - na razie na wszystko piszesz "naucz się podstaw", a sam robisz podstawowe błędy. Wcześniej Marek1707 wytykał Ci błędy w podstawach elekotrniki (chociaż chyba niesłusznie zakładał że w EP znasz się na księgowości). Teraz chcesz pokazać się jako guru programistów, ale pokazujesz tylko że nikt nie jest doskonały. Więc może zamiast leczyć tutaj kompleksy i udawać mega-eksperta, warto odpowiadać na pytania użytkowników - jest ich sporo, a niejeden będzie wdzięczny za pomoc. A jak pomożesz odpowiednio wielu początkującym bidulkom to wszyscy to docenią, a może i pewnego dnia uznają Cię za Wielkiego Eksperta .

Ile już kolega napisał postów w tym temacie, które nikomu nie pomogły? Tak kolega był tym zajęty, że jako ekspert nie zauważył błędu w moim kodzie.

Link do komentarza
Share on other sites

Przecież ten wątek nie jest po to żeby komukolwiek pomagać. Sam go utworzyłeś, sam sobie zadałeś pytanie i odpowiedziałeś. Niestety była to zła odpowiedź, a sam wpis do tego stopnia zadęty, że przywrócił mnie z mojego niebytu na forum.

Jedynym który o coś pyta jest SOYER, ale nie wiem czy dostał jakąkolwiek pomocną odpowiedź poza tym, że ma się nauczyć podstaw.

Link do komentarza
Share on other sites

Powiem tak Elvis, kiedyś byłeś dla mnie najlepszym nauczycielem na tym forum, bardzo wiele Ci zawdzięczam, Twój język i sposób tłumaczenia był dla mnie bardzo jasny, był też Marek1707, również bardzo pomocny, jednak z językiem bardziej "akademickim", jednak z powodów które nie mnie oceniać Ty wycofałeś się z forum, a Marek1707 też jakby bardziej obok. Dlatego cenię sobie każdego kto zechce się podzielić ze mną swoją wiedzą, czasami idzie to lepiej, raz brak odzewu, ale zawsze miło jak ktoś poświęca swój czas i nerwy na tłumaczenie takim jak ja.

Chyba zauważyliście, przynajmniej ja odniosłem takie wrażenie, że ostatnio jakby mniej "żyje" to forum, wątków mniej, odpowiadających jeszcze mniej 🙁 więc każdy kto zechce dzielić się wiedzą jest na wagę złota...

Prawo każdego wytykać błędy i poprawiać nieścisłości, na tym polega dyskusja, jednak omijajmy osobiste wycieczki i czepialstwo. Wszyscy.

Szkoda Elvis, że już się nie udzielasz, przecież nie musisz uczestniczyć w każdej dyskusji jeśli nie chcesz, ale czasami brakuje kogoś kto pociągnie temat i da zadanie do przemyślenia i nieprzespanej nocy 😅

Pozdrawiam

P.S. "Arduinowiec, przeważnie nie ma ochoty sie uczyć, chce w godzinę napisać działający program." TO NIE JA 😉

Link do komentarza
Share on other sites

A ja to zrozumiałem tak, że z jakiegoś powodu Pan es2 ma ostatnio więcej czasu i wszystkich nauczy dobrego programowania. Nie ważne czy to emerytura, czy firma padła przez Arduino, byle było dużo fajnych przykładów z Arduino, może jakieś wyebane w kosmos biblioteki? Np. do obsługi modemów GSM, serwerów ESP, takie domowe BMS, własny serwer thinkspeak na bazie dysków sieciowych (można przejrzeć allegro co bardziej popularne, jakie są biblioteki i napisać jakieś lepsze, z przerwaniami). Tylko proszę nie naśmiewać się z Arduinowców, którzy programują od paru miesięcy. Ja i tak większości uwag nie zrozumiem. Ale jakieś Tutoriale chętnie poczytam, z przykładami i wyjaśnieniami skąd co i na co. I ślicznie o takie proszę.

Link do komentarza
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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

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

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.