(03-07-2019, 06:02)Jarewa0606 napisał(a):Skoro pytasz, to masz małe doświadczenie w programowaniu i nie zrealizowałeś żadnego poważnego projektu a nawet na AVR czy 8051 jest to możliwe ale wymaga większego wkładu pracy niż w przypadku nowoczesnych rozwiązań (ARM, FPGA/CPLD).(02-07-2019, 19:20)es2 napisał(a): To jedno z najprostszych ale i najgorszych rozwiązańA czemu millis to jedno z najgorszych rozwiazań??
Stopniowanie rozwiązań od najgorszego:
- Delay.
- Millis i inne rozwiązania realizowane w pętli głównej.
- Przerwania od timera.
- Wykorzystanie sprzętu.
W ostatnim przypadku najczęściej do wyboru są dwie opcje:
- Wykorzystanie układów peryferyjnych bez użycia DMA.
- Jak wyżej z DMA.
Najlepszym, najdokładniejszy, nieabsorbującym czasu procesora rozwiązaniem tego konkretnego przypadku jest wykorzystania timera w trybie one pulse (na AVR to sprzętowo chyba nie da się zrealizować).
Mills ma ta wadę, że gdy jakieś operacje wykonują się długo, przykładowo wysyłanie danych do LCD, poprzedzone odczytem 1-Wire przez beznadziejne arduinowskie biblioteki korzystające niepotrzebnie z float, do tego ładowanie pliku JPG z karty SD, to zdarzenie, może wykonać się z opóźnieniem prawie 3 sekund a nawet więcej.
Oczywiście, pojawią się głosy, że można robić po kawałku, odczytać 1-Wire, później plik z SD, po kawałku (kto to potrafi?), wysyłać dane do LCD po kawałku (kto próbował?) czyli narobić się a i tak, opóźnień nie da się wyeliminować. Prościej, skuteczniej, użyć przerwań od timera, bo w tym przypadku, sprzętowe sterowanie wyjścia timerem, to przerost formy nad treścią.
Ułomności "metody" delay chyba nie muszę uzasadniać?