Atlantis napisał(a):
Już znalazłem przyczynę - zabrakło instrukcji zerującej zmienną ascii_line przy przepełnieniu bufora.
aż sobie zajrzałem do kodu z GB i taki mamy oto komentarz nawet w kodzie :
Cytuj:
// sprawdzamy, czy wąż nie zacznie zjadać własnego ogona
if ( tmp_head == UART_RxTail ) {
// tutaj możemy w jakiś wygodny dla nas sposób obsłużyć błąd spowodowany
// próbą nadpisania danych w buforze, mogłoby dojść do sytuacji gdzie
// nasz wąż zacząłby zjadać własny ogon
UART_RxHead = UART_RxTail;
}
to tak w uzupełnieniu do:
Atlantis napisał(a):
a przeglądając kod z książki (i moje modyfikacje) za nic nie mogę wytypować potencjalnej przyczyny.
Atlantis napisał(a):
A może przypadkiem za takie zachowanie może odpowiadać układ FT232?
Po prostu trzeba przeglądać dokładniej ....
a to:
Atlantis napisał(a):
Wiem, że takie rozwiązanie jest mało prawdopodobne, ale pomysł nie wziął się bynajmniej "z komosu". Kiedyś miałem do czynienia z modułem GSM, który zachowywał się bardzo podobnie - zaczynał wariować, kiedy wysyłało mu się kolejną komendę, gdy on jeszcze nie skończył odsyłać odpowiedzi na poprzednią. Terminal wyświetlał wtedy bzdury. Kilku innych użytkowników Usenetu potwierdziło zaobserwowanie dokładnie takiego samego objawu w przypadku tego modelu.
nie jest ŻADNYM, podkreślam żadnym potwierdzeniem, że pomysł nie był "z kosmosu" wręcz przeciwnie - tym bardziej pomysł z kosmosu - a to co napisałeś potwierdza tylko fakt, że nie ty sam jeden wpadłeś na pomysł z kosmosu ale jeszcze kilku użytkowników tego usnetu jak napisałeś ....
Bo kto wysyła do modemu komendy gdy ten nie zakończył wykonywania poprzedniej ? .... to tylko świadczy znowu o tym że ty czy inni użytkownicy usenetu jesteście początkujący i nie wiecie jak się obsługuje zdarzenia asynchroniczne. Nie wiecie, że PODSTAWOWY standard komend AT daje możliwość sprawdzenia czy jest odpowiedź z modemu czy nie. Że sprawdza się zawsze w takiej rozmowie z modemem co najmniej TRZY podstawowe stany:
1. odpowiedź OK
2. odpowiedź ERR
3. brak odpowiedzi czyli TimeOUT
co DOBITNIE pokazuje - że pomysł - iż coś z modemem jest nie tak gdy odsyła bzdury w takiej sytuacji jak opisałeś - jest pomysłem z KOSMOSU
ale znowu tutaj wychodzi to samo - że brak ci takiego podejścia:
mokrowski napisał(a):
Ostatnią rzeczą którą można sprawdzać jeśli kod działał do tej pory to błąd sprzętu. Jak zmieniasz oprogramowanie i nie działa... to logika nakazuje szukać w nim błędu a nie w kompilatorze, IDE czy sprzęcie. Mi to podejście się sprawdza...
i przez to jak sam widzisz - co rusz popadasz w coraz większe PUŁAPKI własnych pomysłów z kosmosu. Bo raz sobie ubzdurałeś coś z tym modemem - zamiast doczytać właśnie , douczyć się jak się je obsługuje, jak wyeliminować taki błąd ze swojego kodu i potem ... powielasz to samo w BYLE JAKIM innym przypadku ...
sorry że poświęcam temu tyle czasu ale staram się tępić takie podejście i pokazywać na takim właśnie KLASYCZNYM przypadku jaki tu zaprezentowałeś - że to do NICZEGO nie prowadzi ... A jak sam widzisz - nie jest to tylko moje podejście ...