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



Teraz jest 15 sty 2025, o 21:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 22 cze 2014, o 16:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Witam ,próbuję użyć Mirkowych bibliotek USART z GreenBooka ,ale wyskakuje mi błąd w ostatnich
linijkach (a raczej warning pchełkowy) ,biblioteka oryginalna z DVD nic nie zmieniałem.

Nie załączam całego kodu z wiadomych przyczyn ,jedynie linijkę z błędem ,chyba chodzi o
to by zakończyć case instrukcją breake ,też macie taki problem z tą biblioteką?

Obrazek


Próbuję wykorzystać tego EVENTA do prostej obsługi zapalania Diody za pomocą konend Start i Stop

Program jednak nie działa ,nie zwalam od razu na bibliotekę ,bo to pewnie moja wina, coś robię nie tak.

Jak w praktyce obsługiwać tego Eventa?

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

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2014, o 17:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Z tego co się orientuje to takie porównanie ci nie zadziała
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Do porównywania stringów najlepiej będzie wykorzystać jedną z funkcji wbudowanych np. strcmp(), która jest dostępna po zainkludowaniu pliku string.h.
Kod:
int strcmp( const char *s1, const char *s2 );
Porównuje s1 z s2, uwzględniając wielkość liter. Zwraca wartość mniejszą od 0 jeżeli s1 jest mniejsze od s2. Zero jeśli są równe. Większą od zera jeśli s1 jest większe od s2.


Czyli porównanie powinno wyglądać tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
lub
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A co do tych pchełek to są to ostrzeżenia samego Eclipsa a nie kompilatora. A odpowiada za to taka funkcja Eclipsa, która nazywa się Code Analysis. Na forum było już o tym nie raz. A tak na szybko to odznacz odpowiedniego ptaszka w Window---->Preferences tak jak na obrazku poniżej
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2014, o 23:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Spróbowałem i dalej nie działa ,nie wiem czemu.
Nie chce wrzucać znaków do tab3.

Wyrzuciłem nawet tego Eventa i spróbowałem ze zwykłej funkcji uart_get_str(); ,też nie pomogło.

Kod po przeróbce:

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

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 07:35 

Pomógł: 0

Zastanów się co ci zwraca funkcja uart_get_str(). Bo to nie jest cały string, a tylko wskaźnik do początku stringa.

U mnie przy porównaniu i wykorzystaniu eventów z GB wygląda to tak

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



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 08:31 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

rezasurmar napisał(a):
Zastanów się co ci zwraca funkcja uart_get_str(). Bo to nie jest cały string, a tylko wskaźnik do początku stringa.


Przypisanie wskaźnika do tablicy jest w C niedozwolone.

mac34 napisał(a):
char tab3[] = {0,0,0,0,0}; //tablica odbiorcza ,5 elementów o wartociach poczatkowych 0
tab3 = uart_get_str(); //????


Ciekawe jakim cudem program się kompiluje?

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 10:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Nie wiedziałem ,że funkcja zwraca wskaźnik.

Wcześniej używałem odbioru jednego znaku i działało:

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


Pomyślałem więc,że funkcja uart_getstr() zwróci mi ciąg znaków ,które wrzucę do tabeli ,a potem porównam ze wzorcem.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 10:07 

Pomógł: 0

Wskaźnik do pierwszego znaku...

Po za tym w tym wypadku masz tylko jeden znak, czyli char, char możesz kopiować metodą char1 = char2



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 20:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Zmieniłem kod jak poradziłeś ,dodałem twoją funkcję i dalej nie działa ,nie kompiluje się.

Możliwe ,że coś żle zrobiłem ,poniżej kod (swój stary zakomentowałem) ,wyrzuca błąd odnośnie argumentów funkcji.

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



poniżej screen z błędem:

Obrazek

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 21:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

wywołujesz funkcję (linia 36 w kodzie z postu)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

bez parametru,

a zadeklarowaną masz (linia 12 w kodzie z postu)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

z parametrem



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 21:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Dzięki ,ale poszła jedynie kompilacja ,program dalej nie działa.

Wgłębiam się teraz w temat
topic968-60.html

,widzę że odbiór stringów i ich porównywanie to nie tylko moja zmora, jakoś nie umiem tego zrozumieć.

Przydałby się jakiś konkretny przykład czy poradnik. Nie wiem może ze mną jest coś nie tak.

Tekst wysyłam z własnego terminala. (może tam coś jest skopane ,choć z LCD działa)
topic7526.html

Tekst na wyświetlaczu umiem wyświetlać ,a przy zapalaniu diody Led odpadłem :( ,no powoli szlak mnie trafia (sorki za określenie)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 cze 2014, o 06:33 
Offline
Moderator
Avatar użytkownika

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

mac34 napisał(a):
Nie wiem może ze mną jest coś nie tak.


Na pewno tak nie jest ... kłopot polega tylko na tym, że odpuściłeś sobie prawdopodobnie ćwiczenia zagadnień z zakresu podstaw jeszcze z bluebooka, a dokładniej mówiąc na bazie pytań jakie zadajesz i problemów jakie opisujesz można wysnuć konkretny wniosek, że masz problemy

1. ze wskaźnikami
2. z tablicami
3. z funkcjami

gdzieś tam wyżej piszesz np że nie wiedziałeś że jakaś tam funkcja zwraca wskaźnik , no to zaraz zaraz hola hola - prosty test, co po kolei zwracają wg ciebie te 3 funkcje poniżej ?

void funkcja1( int a );

int funkcja2( char * b );

char * funkcja3( void * c );

??? hmm przecież to nie jest tak, że trzeba znać na pamięć co jakaś tam funkcja zwraca, wystarczy znać zasady definiowania funkcji - a one od podstaw są opisane w bluebooku

_________________
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: 24 cze 2014, o 10:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

No ,więc tak Mirku:

1) pierwsza funkcja ,nic nie zwraca ,za to przekazuje argument integer (a).

2) druga funkcja zwraca wynik w postaci integer ,a przekazuje adres na argument char.

3) tej przyznam się uczciwie nie rozumiem do końca ,zwłacza (void * c); ,tak jakby wskazywała na nic.
Skompiluje się wogóle?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 cze 2014, o 11:26 
Offline
Moderator
Avatar użytkownika

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

mac34 napisał(a):
3) tej przyznam się uczciwie nie rozumiem do końca ,zwłacza (void * c); ,tak jakby wskazywała na nic.
Skompiluje się wogóle?


tak skompiluje się ... może niepotrzebnie taki już bardziej zaawansowany przypadek z argumentem pokazałem ... ale widać jednak że orientujesz się o co chodzi z rezultatem funkcji ;) więc nie rozumiem w takim razie dlaczego wyżej pisałeś - że nie wiedziałeś co zwraca funkcja

a jeśli chodzi o ten konkretny przypadek

void * c;

to jest nieokreślony typ wskaźnikowy i dopuszczalna technika, która ułatwia przekazywanie argumentów do funkcji o różnych typach ... krótko mówiąc argument będzie takiego typu - jakiego typu przekażesz argument do takiej funkcji

_________________
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: 24 cze 2014, o 11:30 

Pomógł: 0

mirekk36 napisał(a):
3) tej przyznam się uczciwie nie rozumiem do końca ,zwłacza (void * c); ,tak jakby wskazywała na nic.
Skompiluje się wogóle?


Polecam poradnik o calbackach, eventach, eepromach i grze snake ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 24 cze 2014, o 11:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

A to nauczyłem się czegoś nowego. :)

A wracając do porównywania stringów, to moje założenie polega by odebrać go ,zapisać (raczej w tablicy) ,a potem porównać ze sobą.

Tak teraz jednak pomyślałem czy nie lepiej by je było porównywać "w locie" ,znak ze znakiem ,aż będzie "0" .

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 cze 2014, o 14:32 
Offline
Moderator
Avatar użytkownika

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

mac34 napisał(a):
Tak teraz jednak pomyślałem czy nie lepiej by je było porównywać "w locie" ,znak ze znakiem ,aż będzie "0"


tak można robić gdy się ma mało pamięci RAM np w jakimś ATtiny - to można się gimnastykować - ale w większych prockach ? po co ? skoro masz do tego gotowe i to dobre narzędzia wbudowane w C

_________________
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: 25 cze 2014, o 03:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

No zobaczymy jeszcze jak to uda mi się rozwiązać.

Teraz oglądam serię poradników z GRĄ SNAKE (jestem na 2 części). Myślę ,że po ich obejrzeniu trochę mi się rozjaśni. :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 cze 2014, o 07:16 

Pomógł: 0

Sam wykorzystuje mocno Eventy z biblioteką do AT przez UART. Łącznie z rozbudowaniem ich do 2 uartów pod 644 na eventach :D. Można sobie bezkolizyjnie przekazywać dane między uartami z ich parsowaniem.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 27 cze 2014, o 10:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

A więc tak małymi kroczkami ,by zminimalizować niewiadome napisałem krótki programik z diodą debugującą
nadający komendy "start" ,"stop" .

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



Podejrzałem w terminalu Putty ,czy faktycznie wysyła sie to co chcę.

Obrazek


Następnie napisałem aplikację na PC (bo tak mi łatwiej) ,gdzie okienko Led: Status , Status zmienia kolor tła z szarego na czerwone
symulując miganie LED i to ,że poprawnie porównano String:

Obrazek

Obrazek

Kod poniżej:

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


I sukces ,bo wszystko działa!!! ;)

Teraz pozostaje tylko "przetłumaczenie" tego na AVR ,bo domyślam się ,że nie będzie już tak łatwo jak tu:

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





Sorki ,troszkę się rozpisałem ,jeszcze trochę i wyjdzie z tego mój pierwszy mini poradnik :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 cze 2014, o 17:01 
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

Jeśli chodzi o porównywanie łańcuchów znakowych to dla AVRów też są odpowiednie funkcje np. strcmp

_________________
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: 20 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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