(24-05-2019, 06:56)PierwszyWolnyLogin napisał(a): Na początek wywaliłem te opóźniacze i czas pomiaru skurczył sie do <> 4msNie możesz zakładać czasu konwersji 4ms gdy przetwornik może to robić nawet 21ms.
Biblioteki dla Arduino, w 90% są pisane na "sztukę". Dobra biblioteka używa przerwań, sprawdza czy konwersja skończyła się i odczytuje wynik. Takie postępowanie nie "zawiesza" CPU na długie ms bez potrzeby.
Pisząc soft, tak jak to robi większość "Arduinowców" można zniweczyć najszybsze uC i 1GHz nie pomoże, gdy CPU będzie kręcił się w kółko przez 70ms.
Jak już ma się problem z pisaniem programów wielowątkowych to trzeba sięgnąć po RTOS, ale tam też obowiązują pewne zasady. Trzeba też pamiętać, że RTOS lubi RAM, na szczęście nie tak jak pseudosytem Windows. Zapotrzebowanie na RAM wynika z konieczności zapamiętywania wszystkich rejestrów uC, jak ma FPU to także tych. Każdy task, musi mieć swój stos (istniej opcja wspólnego stosu ale coś za coś).
Teoretycznie, RTOS można uruchomić na AVR z 2kB RAM, ale to iluzja, bo "na dzień dobry" mnie 2kB nie wystarcza przy wielowątkowości, bo np bufor UART to 256bajtów, LCD 1..150kb a dochodzą bufory dla (nadawcze i odbiorcze) dla SPI czy I2C albo USB.
Jak nie ma LCD to 16..20kB wystarcza, no chyba, ze jest jeden interfejs, np SPI, wtedy i 8kB wystarczy (czasem i mniej). Jak jest LCD to on "narzuca" wielkość RAM. Inne interfejsy, jak SPI, I2C, UART tyle i le potrzebują, to może być kilkanaście bajtów a mogą być i kB. ETH po trochę ponad 1,5kB dla każdego (nadawczy i odbiorczy), USB po 1kB.