(29-06-2019, 11:26)PierwszyWolnyLogin napisał(a): (29-06-2019, 10:02)es2... napisał(a): W ogóle kiedykolwiek używałeś DMA? Np na Z-80? Wiesz jak to działa? Na ile spowalnia CPU?
Zauważyłeś JEŁOPIE o czym jest ten wątek?
Zauważyłem JEŁOPIE, że nie masz pojęcia o uC. Tylko jakieś zabawkowe AVR i Arduino IDE.
RTOS nie rozwiąże braku DMA, jeśli natomiast nie potrzebujesz DMA to na 99% i bez RTOS się obędziesz.
Co chcesz zyskać używając DMA? Opisz konkretny przypadek a ja napiszę czy da się to zrobić bez RTOS ale z użyciem DMA.
(29-06-2019, 11:26)PierwszyWolnyLogin napisał(a): a pewno nie o twoich problemach, nikogo one nie interesują!
Problem to masz ty, próbując RTOS-em rozwiązać problem, który z dużą dozą prawdopodobieństwa można rozwiązać prościej ale trzeba zapomnieć o AVR i Arduino IDE za to zapoznać się z wielopoziomowym systemem przerwań (pewnie nie używałeś, ja tak: w Z-80 i pseudo na AVR, w ARM nie było potrzeby) i DMA.
(29-06-2019, 11:38)Jarewa0606 napisał(a): Dzis ma problem tylko z dwoma prostymi zadaniami, jak dojdą przerywania to dopiero głowa go zaboli od myślenia.
Aby używac RTOS, trzeba dobrze znać kompilator, uC, biegle używać przerwań, DMA jak jest. Programy (bez RTOS) pisać bez delay itd, ipt o czym pisałem w swojej pierwszej wypowiedzi.
RTOS nie rozwiąże magicznie problemów "braku czasu CPU", którego powodem jest brak DMA czy brak pamięci RAM. RTOS lubi RAM, bo gdzie bufory UART, LCD i inne musi pomieścić. RTOS będzie działał dobrze gdy będzie miał bufory zarówno nadawcze jak i odbiorcze dla peryferii a nie jak w Arduino 64 bajty na bufor odbiorczy UART. Chcesz wysyłać dane do WS2812 to musisz je wszystkie zmieścić w RAM, odpalić DMA (ostatecznie przerwania) i wysłać. Jak RAM jest za mało i wszystkich danych nie zmieścisz, to RTOS niewiele poprawi sytuację w stosunku do tego jakbyś RTOS nie miał a czasem może nawet pogorszyć. To samo z LCD. RTOS wymaga więcej RAM niż programy używające z DMA bo każdy task ma swój stos. Owszem, można to zmienić ale pojawiają się kolejne kłopoty. W RTOS nie należy zawieszać przerwań, bo zwyczajnie przestaje on działać. Mało tego, RTOS rodzi nowe problemy, związane np z synchronizacją tasków, przekazywaniem danych z przerwań do tasków, itp, itd.
RTOS jest wygodny, ale aby spełniał swoje zadanie, musi dysponować dużą ilością RAM i na max wykorzystywać sprzęt, więc należy zapomnieć o obsłudze 1-Wire czy WS2812 przez "machanie" GPIO tylko użyć np UART.
Co da RTOS w AVR, gdy na czas obsługi 1-Wire czy WS2812 (np na 30ms) trzeba zawiesić przerwania? Taski mają być przełączane co najmniej co 1ms, WS2812 blokuje przerwania na 30ms. Co to oznacza? Ze co najmniej 30 tasków nie wykona się albo 2 taski nie wykonają się po 15 razy.
Jaka korzyść z RTOS? ŻADNA!
Trzeba więc najpierw biegle posługiwać się sprzętem peryferyjnym w uC a co za tym idzie, zapomnieć o Arduino.
W pierwszej wypowiedzi pokazałem porównanie obsługi TFT z DMA i bez. Widać wyraźnie, że dziesiątki razy szybszy ARM nic nie dał gdy nie używałem DMA, Czy w takiej sytuacji, RTOS rozwiąże problem wolnej animacji na wyświetlaczu? Nie, wręcz ją pogorszy, nieznacznie ale
pogorszy!