Cześć
Postawiłem sobie za zadanie opanować i dobrze zrozumieć bibliotekę uart od Atmela. W poprzednim poście zastanawiałem się nad przerwaniem TXC, a teraz próbuję wykonać coś w rodzaju echa - mianowicie znaki, które wyślę z terminala do procka chcę wysłać na terminal w takiej samej kolejności + liczba informująca o ilości odebranych znaków. Popełniłem więc taki kod:
Zwracany łańcuch jest taki sam jak wysyłany + liczba odebranych znaków. Obawiam się jednak, że nie do końca robię to poprawnie. Może zajść przypadek, że nadejdzie dana/dane w trakcie wykonywania fragmentu warunku if(licznikOdebranychZnakow), gdyż operuję na przerwaniach. Pod koniec ifa zeruję ten licznik. Po zakończeniu wykonywania if'a i wyzerowaniu "licznikOdebranychZnakow" już nic więcej nie przychodzi, a dane wiszą mi w buforze odbiorczym, bo warunek wykonania bloku instrukcji if(licznikOdebranychZnakow) będzie niespełniony. Jak należy to dobrze rozwiązać, żebym zawsze wysłał wszystkie odebrane dane?
Proszę uprzejmie o wskazówki i pozdrawiam.
Dodano po 16 [minuty]:
Co więcej, jak skasowałem fragment:
to echa nie ma w ogóle, na terminal nic nie leci. Jak znowu wstawiłem ten fragment to zdarza się, że np. wysyłając łańcuch znaków: "abcdefghijklmnopqrstuvwxyz" do procesora, na terminal wróci: "zabcdefghijklmnopqrstuvwxy", czyli ostatnia literka zostaje przesunięta na początek.
Jak należy to zorganizować, żeby nie było tego typu błędów?
Postawiłem sobie za zadanie opanować i dobrze zrozumieć bibliotekę uart od Atmela. W poprzednim poście zastanawiałem się nad przerwaniem TXC, a teraz próbuję wykonać coś w rodzaju echa - mianowicie znaki, które wyślę z terminala do procka chcę wysłać na terminal w takiej samej kolejności + liczba informująca o ilości odebranych znaków. Popełniłem więc taki kod:
Kod: C / C++
Zwracany łańcuch jest taki sam jak wysyłany + liczba odebranych znaków. Obawiam się jednak, że nie do końca robię to poprawnie. Może zajść przypadek, że nadejdzie dana/dane w trakcie wykonywania fragmentu warunku if(licznikOdebranychZnakow), gdyż operuję na przerwaniach. Pod koniec ifa zeruję ten licznik. Po zakończeniu wykonywania if'a i wyzerowaniu "licznikOdebranychZnakow" już nic więcej nie przychodzi, a dane wiszą mi w buforze odbiorczym, bo warunek wykonania bloku instrukcji if(licznikOdebranychZnakow) będzie niespełniony. Jak należy to dobrze rozwiązać, żebym zawsze wysłał wszystkie odebrane dane?
Proszę uprzejmie o wskazówki i pozdrawiam.
Dodano po 16 [minuty]:
Co więcej, jak skasowałem fragment:
Kod: C / C++
to echa nie ma w ogóle, na terminal nic nie leci. Jak znowu wstawiłem ten fragment to zdarza się, że np. wysyłając łańcuch znaków: "abcdefghijklmnopqrstuvwxyz" do procesora, na terminal wróci: "zabcdefghijklmnopqrstuvwxy", czyli ostatnia literka zostaje przesunięta na początek.
Jak należy to zorganizować, żeby nie było tego typu błędów?