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



Teraz jest 9 kwi 2026, o 22:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 20 lut 2014, o 00:42 
Offline
Nowy

Dołączył(a): 29 sty 2012
Posty: 18
Pomógł: 0

Witam

Chciałbym prosić o pomoc. Mam problem z odbiorem łańcucha znaków poprzez uart, a następnie porównanie ze wzorcem i wykonanie odpowiedniego rozkazu. Korzystam z pierwszej wersji niebieskiej książki (niestety zielonej nie mam) i wykorzystałem z niej kod do obsługi tego interfejsu. Wykombinowałem taki kod, który jest wykonywany po wykryciu że coś zostało odebrane:

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


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


I reszta do obsługi LED.
Efekty jakie uzyskuje:
Gdy wyślę on1, dioda się zapala, w terminalu dostaje:
Kod:
Ilosc elementow w tablicy: 3
tablica: on1
wzorzec1: on1
wzorzec2 :on2
wzorzec3 :off


Gdy wyślę on2, nic się nie dzieje, w terminalu dostaje:
Kod:
Ilosc elementow w tablicy: 3
tablica: on2
wzorzec1: on1
wzorzec2 :on2
wzorzec3 :off


Gdy wyślę off, również nic się nie dzieję, nadal jest zapalona dioda LED1. Terminal:
Kod:
Ilosc elementow w tablicy: 3
tablica: off
wzorzec1: on1
wzorzec2 :on2
wzorzec3 :off


Po resecie uC, wysyłam najpierw on2. I zapala się LED1 zamiast oczekiwanego LED2. Terminal:
Kod:
Ilosc elementow w tablicy: 3
tablica: on2
wzorzec1: on1
wzorzec2 :on2
wzorzec3 :off


Gdzieś coś źle robię i nie mogę doszukać się gdzie a kod jest bardzo prosty. Wg tego co wypluwa terminal, to powinno działać. Dodaję sccren z terminala:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2014, o 20:57 
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

Kod jest dobry.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2014, o 21:15 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

A moze cos z makrami do led masz nie tak? Skoro masz uarta to czemu zamiast LED_ON1; nie wstawisz np uart_puts("pierwszy strcmp zwrocil 0"); mozliwosci debugowania takiego kodu majac uart jest wiele.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2014, o 21:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Tu mi się nie zgadza:

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


To powinno być po wyjściu z pętli while:

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
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2014, o 21:39 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

Zgadza sie. Nie wiem czy to planowe ale mi sie podoba to zagranie. Kazdy znak zostanie zapisany a w nastelnej komorce tabeli zapisane zostanie \0. Przy kolejnym obrocie petli znak zostanie wstawiony w miejsce \0 a kolejne miejsce ubrane w \0. Jak nastepny znak okaze sie byc znakiem konca linii to do tablicy nic nie zostanie wstawione a string bedzie mial zero na koncu :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2014, o 21:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Kod wykona się prawidłowo tylko po co wykonywać zbędną operację przy każdym obrocie pętli.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2014, o 07:32 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

nixie napisał(a):
Kod wykona się prawidłowo tylko po co wykonywać zbędną operację przy każdym obrocie pętli.


Chocby po to, zeby nie nadpisywac tablicy jak przyjdzie sam znak konca lini.
Oczywiscie pytanie pozostaje czy to zamierzony efekt czy pomylka. Na pewno nie wplywa to na problem ktory ma kolega.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2014, o 23:53 
Offline
Nowy

Dołączył(a): 29 sty 2012
Posty: 18
Pomógł: 0

Witam ponownie
Tak to był zamierzony efekt. Ale jak już było wspomniane, można było by to rozwiązać w ten sposób że znak końca był by przypisywany jednorazowo po pętli while. Wracając do tematu, problem rozwiązany. Aż mi wstyd się przyznawać co było nie tak. Problem tkwił w makrze do gaszenia diód, Zmiana jednej cyferki rozwiązała problem i wszystko teraz działa. Więc tego tematu w ogóle nie powinno być, przepraszam za zamieszanie i dziękuję za wszystkie odpowiedzi :)



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: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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