mg101 napisał(a):
Uważam bufor cykliczny ma sens tylko wtedy gdy:
Ja bym powiedział zdecydowanie inaczej. Bufor cykliczny ma zawsze sens, jest potrzebny w 99,999999999999% przypadków a ten, 0,0000000000000001% przypadków możemy pominąć w naszych rozważaniach.
Przy czym ważna rzecz - mówię tu o buforze cyklicznym ODBIORCZYM ... !!! WAŻNE !!! ... bo nadawczy rzeczywiście w wielu przypadkach możemy pominąć.
Dalsze twoje rozważania odnośnie działania opisanego mechanizmu są poprawne...
Na koniec zadajesz typowe pytanie po przeczytaniu I-szej książki, ponieważ nagle urywa się opis transmisji UART, o ile jest i ładnie działa nadawanie to już z odbieraniem wielu ludzi ma problem. Na szczęście są dwa rozwiązania:
1. tu na forum już kilku kolegów się pokusiło i z moją lekką pomocą napisali sobie odbieranie stringów ... jak znajdę ten wątek to go tutaj wkleję
2. w II-giej książce - jest to już ABSOLUTNIE i pięknie do końca opisane jak odbierać stringi
ale pytasz - skąd procesor ma wiedzieć, że już może zrobić uart_getc() ?
no może zrobić kiedy mu się tylko spodoba ale trzeba sobie to dalej już jakoś właśnie oprogramować - bo tego pierwsza książka nie opisuje. Kończę w niej na wyjaśnieniach tak istotnych rzeczy jak prawidłowe podejście do odbioru w przerwaniach do buforów cyklicznych - co bardzo ładnie opisałeś swoimi słowami/przykładami
a teraz podpowiedź - gdybyś dalej chciał sam tworzyć odbiór stringów - bo tak polecam podejść.
1. Pomyśl sobie - skoro mowa o stringu np wysłanym z terminala to zwykle zakończony on będzie znakiem CR (enter)
2. skoro wpadnie 17 bajtów do bufora to 17 albo 18 będzie właśnie Enter
3. można więc już na etapie przerwania odbiorczego zliczać sobie ilość Enterów które wpadły do bufora cyklicznego a w programie głównym sprawdzać. I jak jest ich więcej niż 0 to pobierać całą linię z bufora za pomocą getc() aż do znaku ENTER, który trzeba pominąć.
Dzięki takiemu mechanizmowi - nie musisz się martwić przestojami w programie głównym - bo gdyby był czymś zajęty i nie zdążył odebrać jednego stringa i nagromadziłoby się ich tam (w zależności oczywiście od wielkości bufora cyklicznego) kilka czy kilkanaście - to jak w końcu się dorwiesz to możesz naraz je wszystkie obsłużyć
Pisałeś też że inny mikrokontroler wolno nadaje ....
to nie wynika z mikrokontrolera i jego chęci, bo tak samo może być z terminala. To wynika z prędkości baudrate, które są o wiele wiele wolniejsze niż możliwości wykonywania w tym samym czasie niezliczonych operacji przez mikrokontroler.
_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]