[SOFT] Uart_lib v0.02 + update 003

Projekty użytkowników forum zarówno sprzętowe, jak i związane z programowaniem w dowolnym języku.
Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1115
Rejestracja: czwartek 03 wrz 2015, 22:02

[SOFT] Uart_lib v0.02 + update 003

Postautor: Antystatyczny » 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:

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:
uart_v002.zip


Wersja 003:
uart_v003.zip
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
mokrowski
User
User
Posty: 188
Rejestracja: czwartek 08 paź 2015, 20:50
Lokalizacja: Tam gdzie Centymetro

Re: [SOFT] Uart_lib v0.02

Postautor: mokrowski » czwartek 21 sty 2016, 23:36

Hm... zbudowałeś dużą strukturę oraz jest tam kilka funkcji nie do końca rozumiem po co zgromadzonych w strukturze.
Nie znam jednak założeń. Dość że jeśli chcesz wołać funkcję która parsować Ci będzie dane przesłane z Uart, to można to zrobić tak:
1. Rejestrować funkcję callback zwykłą pojedynczą funkcją register_callback i trzymać wskaźnik dostępny dla przerwania.
2. Do rejestracji przekazać także funkcję predykatu (funkcja zwracająca true/false) która jak zwróci true, to będzie wołany callback.
3. Przerwanie zawoła predykat i jak zwróci true to:
- włączy przerwania (bo nie wiadomo jak długo callback będzie wykonywany)
- wywoła callback
- wyłączy przerwanie
- wyjdzie poprawnie z przerwania.

Trochę offtop ale mam na dziś już dosyć ... :-)
,,Myślenie nie jest łatwe, ale można się do niego przyzwyczaić" - Alan Alexander Milne: Kubuś Puchatek

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1115
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [SOFT] Uart_lib v0.02

Postautor: Antystatyczny » środa 06 kwie 2016, 17:47

Witam ponownie. Zaktualizowałem soft i obecnie obsługuje wszystkie 4 moduły USART, a przy okazji dodałem obsługę kilku układów AVR. Zaktualizowana paczka znajduje się w pierwszym poście.

Pozdrawiam.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.


Wróć do „DIY”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość