Dzień dobry.
Witam wszystkich - to mój pierwszy post.
Usart po raz kolejny, bo przejrzałem chyba wszystkie posty na ten temat, ale wciąż czegoś nie mogę pojąć.
Biblioteki Mirka z zielonej książki. Urządzenie pracujące jako slave (kilka lat pracowało bezbłędnie pod Bascomem, teraz w ramach nauki C próbuję przepisywać programy moich urządzeń z Bascoma na C). Jego zadaniem jest odczytywać temperatury z czujników DS1820 (czterech) i na żądanie mastera wysłać wyniki. Będąc na etapie książki niebieskiej, stworzyłem kod pozwalający realizować to zadanie, ale w sposób trochę prymitywny. W pętli głównej jedną z instrukcji było
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Po zakupie i przeczytaniu książki zielonej chciałem to zrobić prawie jak komendy AT, ale na początek prościej. Układ działa, ale trochę dziwnie. Po resecie mikroprocesora, w odpowiedzi na odpowiedni ciąg znaków z mastera, w buforze pojawiają się na początek dwa przypadkowe znaki (o kodach 67 i 225 a dopiero po nich znaki wysyłane przez mastera). Co ciekawe, jeśli ręcznie zmuszę mastera do wysłania ponownie sekwencji znaków, program zaskakuje i działa dobrze do najbliższego resetu. Tak jest przy komunikacji (po RS485) z masterem. Jeśli podłączam terminal i łącze się po RS232, pierwsze wysłanie odpowiednich znaków nie wywołuje żadnej reakcji, dopiero drugie powoduje "zaskoczenie" programu jak powyżej.
Podejrzewam, że problem może być w okolicach funkcji UART_RX_STR_EVENT(char * rbuf), albo uart_getc(void), albo uart_get_str(char * buf), albo w przerwaniu odbiorczym. Nie wiem np. po co w funkcji "..get_str" jest warunek
if( ascii_line )...
Przecież funkcja ta jest wywoływana tylko w jednym miejscu (UART_RX_STR_EVENT) pod warunkiem, że "ascii_line" i tak jest różne od zera....?
Wstawię tu pełny kod, gdyby komuś chciało się rzucić okiem i coś podpowiedzieć, byłbym wdzięczny.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W plikach mkuart.c i mkuart.c raczej mało grzebałem, ale na wszelki wypadek:
[ posłuchaj zasada i moja prośba jest taka - aby nie publikować na forach bibliotek z książki - no chyba że sam je znacznie przerabiasz ok ? .... mirekk36 ]pozdrawiam wszystkich