[SOFT] Uart_lib v0.02 + update 003
: sobota 16 sty 2016, 21:09
Witam serdecznie.
Od dawna nosiłem się z zamiarem poprzerabiania mojej wcześniejszej wersji "libsa" do uartu/uartów. Nie podobało mi się głównie to, że odebrane dane na sztywno były pozbawiane niektórych znaków (np. \r lub \n - zależnie od konstrukcji przerwania). Jako że sam uart ma ślepo odbierać wszystko, co mu się prześle, postanowiłem co nieco zmienić spojrzenie na ów problem. Do całości projektu dorzuciłem funkcję rejestrującą roboczy bufor, funkcję, która zostanie wywołana po odebraniu wiadomości i jej przejęciu do bufora roboczego, a także znak, na który ma reagować przerwanie. W chwili wykrycia przez przerwanie znaku, który nas interesuje, zostaje podjęta akcja odbioru całej wiadomości z bufora cyklicznego.
Rejestrowanie wygląda następująco:
0 - numer uartu
buf - nazwa bufora roboczego (użytkownika)
mini_callback - nazwa funkcji, która zostanie wywołana po przeniesieniu wiadomości do bufora roboczego (w tym przypadku buf)
'\n' - znak, który ma być pilnowany. Odebranie tego znaku przez uart natychmiast spowoduje reakcję. Wiadomość o niezmienionej treści zostanie przekopiowana do bufora roboczego i jeśli została zarejestrowana funkcja (w powyższym przykładzie została zarejestrowana funkcja o nazwie mini_callback), to zostanie ona wywołana. Dodatkowo przekazywany jest do niej wskaźnik na bufor roboczy (użytkownika).
Zrezygnowałem z dwóch osobnych funkcji do wysyłania liczb w postaci dziesiętnej i szesnastkowej. Było to niepotrzebne powielanie kodu i obecnie jest jedna funkcja uart_put_int przyjmująca numer uartu, liczbę do przesłania oraz tzw. radix.
Uprościłem również plik nagłówkowy, bo w poprzedniej wersji trudno było ogarnąć, które z wierszy były dla użytkownika, a które nie. Obecnie w nagłówku ustawiamy rozmiary buforów cyklicznych oraz włączamy/wyłączamy kompilację funkcji służących do wysyłki intów bądź stringów zawartych w pamięci flash.
Aha, funkcja inicjalizująca moduł uart również uległa zmianie. Obecnie przekazuje się do niej, oprócz numeru inicjalizowanego uartu, rzeczywisty baudrate, czyli np. 9600, 19200, czy 115200. Niektóre urządzenia oczekują zmiany prędkości transmisji w trakcie działania programu (np. po inicjalizacji) i właśnie tym jest podyktowana modyfikacja "initu".
Usiłowałem wygenerować dokumentację programem Doxygen, ale chyba będę zmuszony poprosić kogoś o pomoc, bo mimo starań nie udało mi się wygenerować pliku pdf.
Poniżej zamieszczam spakowany projekt dla środowiska Eclipse. Proszę o uwagi i zgłoszenia o błędach w działaniu.
Pozdrawiam
Wersja 002:
Wersja 003:
Od dawna nosiłem się z zamiarem poprzerabiania mojej wcześniejszej wersji "libsa" do uartu/uartów. Nie podobało mi się głównie to, że odebrane dane na sztywno były pozbawiane niektórych znaków (np. \r lub \n - zależnie od konstrukcji przerwania). Jako że sam uart ma ślepo odbierać wszystko, co mu się prześle, postanowiłem co nieco zmienić spojrzenie na ów problem. Do całości projektu dorzuciłem funkcję rejestrującą roboczy bufor, funkcję, która zostanie wywołana po odebraniu wiadomości i jej przejęciu do bufora roboczego, a także znak, na który ma reagować przerwanie. W chwili wykrycia przez przerwanie znaku, który nas interesuje, zostaje podjęta akcja odbioru całej wiadomości z bufora cyklicznego.
Rejestrowanie wygląda następująco:
Kod: Zaznacz cały
uart_reg_callback(0, buf, mini_callback, '\n');0 - numer uartu
buf - nazwa bufora roboczego (użytkownika)
mini_callback - nazwa funkcji, która zostanie wywołana po przeniesieniu wiadomości do bufora roboczego (w tym przypadku buf)
'\n' - znak, który ma być pilnowany. Odebranie tego znaku przez uart natychmiast spowoduje reakcję. Wiadomość o niezmienionej treści zostanie przekopiowana do bufora roboczego i jeśli została zarejestrowana funkcja (w powyższym przykładzie została zarejestrowana funkcja o nazwie mini_callback), to zostanie ona wywołana. Dodatkowo przekazywany jest do niej wskaźnik na bufor roboczy (użytkownika).
Zrezygnowałem z dwóch osobnych funkcji do wysyłania liczb w postaci dziesiętnej i szesnastkowej. Było to niepotrzebne powielanie kodu i obecnie jest jedna funkcja uart_put_int przyjmująca numer uartu, liczbę do przesłania oraz tzw. radix.
Uprościłem również plik nagłówkowy, bo w poprzedniej wersji trudno było ogarnąć, które z wierszy były dla użytkownika, a które nie. Obecnie w nagłówku ustawiamy rozmiary buforów cyklicznych oraz włączamy/wyłączamy kompilację funkcji służących do wysyłki intów bądź stringów zawartych w pamięci flash.
Aha, funkcja inicjalizująca moduł uart również uległa zmianie. Obecnie przekazuje się do niej, oprócz numeru inicjalizowanego uartu, rzeczywisty baudrate, czyli np. 9600, 19200, czy 115200. Niektóre urządzenia oczekują zmiany prędkości transmisji w trakcie działania programu (np. po inicjalizacji) i właśnie tym jest podyktowana modyfikacja "initu".
Usiłowałem wygenerować dokumentację programem Doxygen, ale chyba będę zmuszony poprosić kogoś o pomoc, bo mimo starań nie udało mi się wygenerować pliku pdf.
Poniżej zamieszczam spakowany projekt dla środowiska Eclipse. Proszę o uwagi i zgłoszenia o błędach w działaniu.
Pozdrawiam
Wersja 002:
Wersja 003: