Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 kwi 2026, o 06:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 28 lip 2013, o 15:38 

Pomógł: 0

Nie no, jak u Mirka bym powiedział jest wzorcowo, po co wyważać otwarte drzwi.
Po prostu umieszczamy bibliotekę w libsach potrzebną do obsługi UARTa i tyle.
Kod jest wtedy bardziej przenośny.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 15:44 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Użyj strumienia i w kodzie będziesz miał zawsze printf.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 15:45 

Pomógł: 0

No ale co za problem :). Wiesz u Mirka też trzeba posiedzieć chwilę by przystosować biblioteki czy soft, do innej biblioteki, ale dzieki temu że wszystko jest przejrzyste nie stwarza to problemu.
A tak jak wrzucisz do libsa GPSu obsługę sprzętową AVRowego UARTu to dupa, przerobić to np. na freescale nie będzie już tak łatwo. A tak zmieniasz tylko deklaracje funkcji podpinasz inną bibliotekę UARTa i działa.

------------------------ [ Dodano po: 2 minutach ]

Krauser napisał(a):
Użyj strumienia i w kodzie będziesz miał zawsze printf.


Ale czy to dobry sposób? 2K kodu dodatkowo tylko dla samego printf?



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 15:58 

Pomógł: 0

A to ok, nie zrozumiałem intencji ;). A sam unikam printfa jak ognia ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 16:18 

Pomógł: 0

Napisz własną :).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 16:40 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27456
Lokalizacja: Szczecin
Pomógł: 1045

Jeśli ja coś mogę zauważyć, to....

ale najpierw uprzedzam, że wcale mi nie chodzi o to aby forsować akurat rozwiązania, których ja używałem

Anty - chcesz zrobić super uniwersalną bibliotekę - powiedziałbym hermetyczną i czystą ... Super. Czyli na końcu może z niej powstać wręcz prawdziwa biblioteka - bo już kiedyś też gdzieś pisałem ale nie tylko ja, że to co my tu zwykle robimy i sobie używamy określenia że robimy LIB'sy to tak na prawdę nie są żadne lib'sy :( . Prawdziwie biblioteki to te skompilowane do postaci (bodajże *.a) i można ich używać rzeczywiście tak jak

#include <avr/io.h>

później. W takim przypadku ja np też może i próbowałbym w tym co mówisz pójść drogą printf'a ... czyli podmianą strumienia itp bo wtedy mamy rzeczywiście pełną uniwersalność i praktycznie na każdy AVR

ale czy ty rzeczywiście chcesz taką bibliotekę *.a przygotować ?

Jeśli nie, a zależy ci na tym aby była ona np wygodna dla wszystkich to jednak warto pokusić się o dodanie nawet własnego LIB'sa do UART'a który poprzez kilka funkcji styka się z twoim UART'em. I to przecież przez kilka pewnie typowych funkcji takich jak do przesłania znaku, stringa, liczby itp bo czegóż więcej. A zatem na prawdę łatwo byłoby każdemu podłączyć w to miejsce jakąś inną 'ala' własną czy cudzą bibliotekę ;)

natomiast podmiana strumienia i przystosowanie do printf'a może (ale to TYLKO moje nieobiektywne zdanie) raczej hmmm skomplikować całość do wykorzystania takiego LIB'sa dla przysłowiowego "jana kowalskiego"

Jeśli zaś zależy ci na tym aby kod był mega uniwersalny i przenośny między platformami to już można to zrozumieć - chociaż i tu będzie potworny haczyk. Bo czy tak czy siak przeniesienie takiej biblioteki np na PIC'a będzie i tak wymagało ogromnej ingerencji i przeróbek

z TRZECIEJ zaś strony - jeśli potraktować to jako samo szkolenie się w opracowywaniu bibliotek *.a - to bardzo fajna okazja ;)

zresztą jak znam życie to nie ważne jakim sposobem to zrobisz i tak pewnie jak to zwykle u ciebie bywa niesamowicie zaskoczysz wszystkich pozytywnie i tego ci życzę ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 17:03 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27456
Lokalizacja: Szczecin
Pomógł: 1045

Antystatyczny napisał(a):
Zaczynam widzieć w tym pewien dotąd ukrywany przede mną potencjał.


No ba! to na prawdę jest od dawna bardzo fajnie przemyślane ;) ale chyba jak wszystko w naszym ukochanym że tak powiem C.

Nie mniej jednak próba korzystania z pritf'a na takim przecież procku który też ma sprzętowy UART jak np ATtiny2313 ;) spowoduje że programista poużywa sobie jak przysłowiowy pies w studni :lol: .... bo po pierwszym-drugim użyciu zabraknie FLASH'a na wszystko inne.

A tymczasem do prostych aplikacji i takie procki się używa z takimi urządzeniami czy to gps czy gsm. Wiadomo też że zależy na jaką drogę decydujemy się przy tworzeniu LIB'sa

aha - fajnie ten sposób podmiany strumienia opisany był w serii kursu języka C (jednego z lepszych moim zdaniem), który ukazał się kiedyś na łamach EP. Jeśli może masz dostęp do archiwalnych numerów to śmiało możesz tam zajrzeć.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 17:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

Anty , może libsa od GPS tak zrobić żeby wywoływał ze swojej struktury w której ma wskaźniki funkcji np obsługi wysłania literki i przyjęnia literki drugiej funkcji ... i to by działało na tej zasadzie że w main.c uruchamiasz uart a do GPS libsa dopisujesz tylko funkcje obsługi zdarzenia z gps o wysłanie literki. Zaletą tego jest to że nie konieczne jest później wysyłanie literki uartem, bo można wtedy wysłać czy wpisać do bufora gdzie się chce ... w zależności obsługi zdarzenia od GPS.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 17:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

no coś w tym rodzaju , poprostu libs od GPS nie musi nic wiedzieć o uart, wystarczy że dane z uart w przerwaniu albo z bufora będą przekazywane przez funkcje do libsa GPS ... tak ja bym to widział.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 18:21 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

Jest tylko jedno ALE Anty

GPSY różnych firm znacznie się różnią od siebie nie tyle konstrukcyjnie co wysyłanymi danymi

głównie chodzi o to że o ile odbiorniki OEM co prawda co 1s wysyłają komplet danych w zdaniach NMEA
to same zdania np najpopularniejsze GGA może być różnie zbudowane i można nie trafić w dane których się spodziewałeś
ponadto jeśli trafisz na odbiornik GPS nie OEM wymagana jest ręczna inicjalizacja i dane otrzymujesz tylko na żądanie poprzez odpytanie modułu o konkretną informację ....

Więc siła rzeczy libs będzie uwiązany z konkretnym typem lub przynajmniej producentem odbiornika GPS



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 18:28 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

w zasadzie jeśli robisz pod konkretny model to możesz zrobić wyłuskiwanie danych (rozbić zdania na konkretne informacje gotowe do prezentacji) jak np Time_GPS(); position_N(); Position_E(); sat_nr(); itd ...

co ułatwi wielu interpretację wysyłanych danych przez GPS

bo inaczej niema sensu .... gdyż i tak wysyła wszystko co potrzeba , a zazwyczaj nas interesuje tylko GGA :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 21:02 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

W końcu przerobiłem bibliotekę Antystatycznego. Mam nadzieję, że niczego nie popsułem :roll: Pliki uart.c i uart.h tylko leciutko zmodyfikowane przy użyciu #ifdef, aby zmniejszyć rozmiar kodu.
Wyniki:
- bez użycia strumieni:
Program: 2320 bytes (3.5% Full)
(.text + .data + .bootloader)
Data: 114 bytes (2.8% Full)
(.data + .bss + .noinit)

- przy wykorzystaniu strumieni:
Program: 4056 bytes (6.2% Full)
(.text + .data + .bootloader)
Data: 168 bytes (4.1% Full)
(.data + .bss + .noinit)
Pliki:
-main.c:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

-uart.h:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

-uart.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Ostatnio edytowano 28 lip 2013, o 22:48 przez Krauser, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2013, o 21:22 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Nie musisz z tego korzystać w swoim projekcie, ale warto wiedzieć. Twój podpis zobowiązuje.
A wracając do tematu to zrobisz to na funkcjach zwrotnych (callback) ?

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 18 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO