Skocz do zawartości

Dlaczego "millis jest złe" ;)


SOYER

Pomocna odpowiedź

7 minut temu, 42n4 napisał:

nawet FreeRTOS-em nakładką na Arduino

Temat znany. Na UNO bez sensu 9RAm), na większych AVR raczej bez sensu (min czas wywłaszczania 15ms - WDG) albo pożegnasz się z timerem, których w AVR za dużo nie jest. Jakiś tam sens jest w mega128x, 256x, 1284 (ten ma dużo RAM a timery zdaje się tylko 4). Używałem RTOS na STM32 i zapotrzebowanie na pamięc jest spore no chyba, ze tylko LEDem chce się pomigać ale do tego nie trzeba angażować RTOS.

RTOS na Arduino ma sens, jak używa się STM32, ESP itp dużych uC one o czym już pisałem, aby rozwinąć skrzydła muszą używać DMA. Programowe łaty (1-Wire, WS281x, I2C, SPI, UART) to nieporozumienie a biblioteki Arduino praktycznie NIE UŻYWAJĄ sprzętu, przynajmniej w przypadki 1-Wire i WS2812. Jedyna korzyść z ARM taka, że w przeciwieństwie do AVR nie są w czasie komunikacji zawieszane przerwania ale funkcje są blokujące i program w czasie transferu "wisi".

Dla niezorientowanych, do 1-Wire używa się UART. To bez problemu działa nawet na AVR o czym można przeczytać w Elektronice praktyczne 1/2019. Do WS281x UART, SPI, zaawansowanych opcji timerów (Xmega da radę), na I2C (ARM o AVR można zapomnieć) też powinno się udać. W przypadku AVR WS281x przez UART działają ale obciążenie CPU jest 80..90% (zawsze lepiej niż 100% z bibliotekami arduino) i problemy z niektórymi przerwaniami.

 

Link do komentarza
Share on other sites

Czyli te softwarowe timery http://bit.ly/arduinotimer używane na forum arduino są zbyt długo wywłaszczane?

Ludzie używają ich do wielu projektów i wystarczają, ale to zwykle jakieś karmiki, czy nawet klimy? Pewnie czasami trzeba szybszego przełaczania.

Co do hardwarowych timerów to Arduino rzeczywiście ma je przypisane do pinów i od 2 do 4.

Jasne potrzebne są mocniejsze układy typu STM do tak wymagających transferów przez UART.

Link do komentarza
Share on other sites

25 minut temu, 42n4 napisał:

Czyli te softwarowe timery http://bit.ly/arduinotimer używane na forum arduino są zbyt długo wywłaszczane?

Szkoda zajmować się taką biblioteką. Ona działa poprawnie gdy pętla loop wykonuje się szybko. Wirtualne timery powinny być obsługiwane na przerwaniach. Jest to banalne.

irq( TIMER_1_MS ){
 if ( timer1 ) timer1-- 
 if ( timer2 ) timer2-- 
 if ( timer3 ) timer3-- 
 ...  
}

W pętli głównej np zmiana stanu led co 500ms

if( ! timer1 ){
 timer 1 = 500; 
  
 ZMIEN_STAN_LED;
}

naturalnie, trzeba zastosować się do moich wcześniejszych rad i być może użyć ATOMIC_BLOK jeśli te 500ms ma być w miarę dokładne. Nie poruszam tu tematu migania ledem w przerwaniu, bo nie o to chodzi).

Oczywiście, w kodzie nie może być jakiś odczytów dallasów przez 700ms, czy wyświetlania obrazków na LCD przez 2,7 sekundy bo led będzie się "zacinał". na to wszystko są różne rozwiązania ale to zawsze będą protezy i nic nie zastąpi lepszego uC.

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

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.