Wpis z mikrobloga

Używam hardware serial (arduino uno) do odbierania danych z modułu GPS. Bufor z tego co się orientuję ma 64B. W głównej pętli sprawdzam czy są jakieś dane (Serial.available()) i je odczytuję. Co się dzieje gdy zanim odczytam dane bufor będzie już pełny, a GPS nie skończy jeszcze wysyłania? Dane od razu przepadają? Główna pętla wykonuje się za długo, żebym był pewny, że zawsze zdążę odebrać dane przez zapełnieniem bufora. #arduino #avr #uart
  • 7
Chyba nie przegiąłeś z delay, coo? :P


@zaqwsxdsa: Nie mam żadnego. Używam np. wyświetlacza 128x64, to na pewno mocno spowalnia. Jak sprawdzałem to jest chyba ok. 50razy/sek, to chyba nie jest wolno, tylko z tym uartem jest problem, może to się jakoś inaczej rozwiązuje, nie wiem..
@psi-nos: http://arduino.stackexchange.com/questions/1726/how-does-the-arduino-handle-serial-buffer-overflow

Jakiego baud rate używasz? To jest faktycznie problem w twoim przypadku, czy tylko gdybasz? Możesz zacząć od zmniejszenia baud do 9600 (wtedy zapełnienie bufora jest praktycznie niemożliwe). Jeśli nie możesz tego zrobić, zawsze możesz napisać sobie czytanie serial portu oparte na przerwaniach (ale to już samemu, bo libki arduino tego nie wspierają) :)
@psi-nos: w tej sytuacji, jeśli twoja pętla zajmuje tyle-a-tyle czasu, to możesz sobie obliczyć na jaki baud możesz sobie "pozwolić". Zwiększenie bufora to też jakieś rozwiązanie.

Nadal obstaję przy tym, że podejście oparte na przerwaniach będzie najuniwersalniejsze :)
@zaqwsxdsa: na razie spróbuję z buforem, bo z przerwaniami bym miał dużo kombinowania. Korzystam z kilku funkcji Serial, jak find, readBytesUntil itp., jakbym chciał to realizować bez biblioteki to by mi to chyba za dużo czasu zajęło :P