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



Teraz jest 30 gru 2025, o 20:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 32 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 18 sie 2012, o 17:46 
Offline
Moderator
Avatar użytkownika

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

no nie rozumiesz właśnie funkcji uart_getc();

ale może powiedz czego w niej nie rozumiesz ? bo tak to musiałbym tu na nowo rozdział książki o tym pisać ????

podpowiem tylko że wkładanie na oślep tej funkcji do lcd_str() albo jeszcze jawne rzutowanie (ciekawe na co?) to już w ogóle oznaka że próbujesz coś na zasadzie "albo się uda albo się nie uda" .....

tymczasem jak można wrzucać do lcd_str(), która oczekuje wskaźnika na tablicę znaków , C-String zakończony zerem, rezultat funkcji uart_getc(), która zwraca pojedynczy znak ???? to świadczy w takim razie o niezrozumieniu tablic i wskaźników w tym podstawowym zakresie ....

ok ale jak precyzyjnie określisz czego nie rozumiesz w uart_getc() to ja być może będę umiał coś pomó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: 18 sie 2012, o 18:43 
Offline
Moderator
Avatar użytkownika

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

Ok to mnie się wydaje tak jakbyś w ogóle rozdziału o buforach cyklicznych nie przeczytał - czyli jak działa odbiór danych z RS232 na przerwaniach :( to po pierwsze

a po drugie - to funkcja uart_getc() służy (UWAGA!) TYLKO I WYŁĄCZNIE do odczytywania pojedynczego znaku z takiego bufora cyklicznego - o ile nadleciały jakieś znaki w ogóle.

Na stronie 415 na dole masz przykład wykorzystania tej funkcji

może rzuć okiem i sprawdź

No i jeszcze raz powtórzę - żeby to zrozumieć musisz jednak zacząć od zrozumienia zasady działania odbioru w przerwaniach .... i do buforów cyklicznych .... inaczej będziesz miał ciężko

od strony 266 rozdział: 5.8.2 - jest opis, który powinieneś przyswoić ... i ew dopytać czego w nim nie rozumiesz

Bo teraz to robisz strasznie dziwne rzeczy w kodzie - szczególnie ten delay :( albo zapis do pierwszego elementu tablicy (tego twojego bufora) i dlaczego akurat bufor ma mieć rozmiar na podstawie danych z pliku nagłówkowego ???

jak chcesz sobie to przetestować to jak mówię strona 415 albo tak:


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


ale sam widzisz że bez zrozumienia podstaw nie będzie łatwo nawet tego przeanalizować....

tymczasem utworzyłem tu sobie własny buforek i tylko na dwa bajty bo po co więcej do testu, skoro będzie odbierany tylko pojedynczy znak (ale to to już mówiłem ci kilkakrotnie) a ty wciąż spodziewasz się odebrania tą funkcją jakiegoś ciągu znaków ..... ciekawe jak ? .... Taką funkcję to trzeba by było sobie dopiero od nowa napisać

zatem w pętli głównej wciąż sprawdzam czy do bufora trafił jakiś znak, bo jeśli 0 to nie a jeśli trafił to przecież jego kod ASCII musi być większy od zera.....

i dopiero jak się trafi jakiś znak to wyświetlam bufor bo wiem też że w drugim bajcie będzie z kolei 0 jako że jest to zmienna globalna i była zainicjalizowana zerami

_________________
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: 18 sie 2012, o 18:52 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Kolego Antystatyczny jak chcesz odbierać stringi to tutaj masz wątek: topic968.html, z tym że jeżeli chcesz załapać w praktyce o co chodzi z funkcją odbierania znaku to napisz prosty program który będzie umożliwiał zapalanie diodą led z poziomu komputera PC(przez jakiś terminal), bo odczytywanie go na lcd trochę mija się z celem w wypadku jednego znaku :( .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sie 2012, o 19:24 
Offline
Moderator
Avatar użytkownika

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

Ale wysyłanie jest o wiele prostsze niż odbieranie i stąd twoje problemy. Toż w przykładzie z książki na DVD masz funkcje do wysyłania całych stringów .... i od razu działają co za problem

ty niestety nieszczęśliwie zacząłeś od próby odbierania w uC. A w książce tzn w tej części na tej funkcji zakończyło się omawianie obsługi UART'a jeśli chodzi o odbieranie danych. Więc jeśli nie masz drugiej książki a będziesz chciał coś sam wskórać w tym zakresie to rzeczywiście poczytaj link jaki podał ci wyżej kolega MichalXY

_________________
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: 18 sie 2012, o 19:26 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Może jest jakiś prosty sposób, by po prostu sprawdzić odbiór? Choćby jeden znak na wyświetlaczu...


No teraz to mnie zadziwiasz ;) na maxa - przecież podałem ci taki przykład wyżej - a ty pytasz czy jest taki sposób ... hmmm nic nie rozumiem.

_________________
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: 19 sie 2012, o 09:16 
Offline
Moderator
Avatar użytkownika

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

Pisałem wyżej - wywal tego _delay_ms(1000).... , ale ty nie .... więc jak chcesz - to ci będzie przeszkadzać w odbieraniu kolejnych znaków będziesz miał dziwne opóźnienia.... (no ale powinno coś tam odbierać) ... niestety to nie tylko program ale także elektronika i ustawienia termianala w kompie.

Więc jeśli ci nie działa to sprawdź połączenia albo pokaż schemat co porobiłeś bo tak to można tylko zgadywać niestety

_________________
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: 19 sie 2012, o 11:11 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Kolego Antystatyczny jeżeli korzystasz z Mirkowej biblioteki do UART to inicjujesz definicją _UBRR a nie wartościami jake ty tam wprowadzasz, bo ta definicja to spore ułatwienie - wszystko będzie policzone automatycznie i będzie działać, bo być może ta wartość którą ty podajesz jest powodem problemu.

Kod:
USART_Init(_UBRR)


Druga sprawa to oczywiście elektronika i ustawienia jakimi dysponujesz o czym wcześniej wspomniał Mirek.

Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2012, o 21:06 
Offline
Moderator
Avatar użytkownika

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

nie rozumiejąc do końca działania funkcji uart_getc() oraz dokąd nie wyświetli ci się ten jeden odebrany znak, ja bym się na twoim miejscu nie brał w ogóle za testowanie odbioru stringów bo prosisz się o dodatkowe kłopoty....

Szkoda że nie chcesz sprawdzać tego co polecałem - no ale może całkiem inną drogą też dojdziesz do swojego celu ;) 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: 20 sie 2012, o 21:13 
Offline
Moderator
Avatar użytkownika

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

Całe sedno rozdziału o parsowaniu danych z UART w drugiej książce to właśnie odbiór danych w ASCII zakończonych znakami CRLF i to pięknie w zdarzeniach....

Tutaj, ten twój klocek to nieobsłużony znak LF albo CR z poprzedniej ramki. Musisz się go po prostu pozbywać za każdym razem.

_________________
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: 20 sie 2012, o 21:24 
Offline
Moderator
Avatar użytkownika

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

No właśnie cały widz na tym polega aby przystosować odbiór stringów do różnych aplikacji, które mogą wysyłać raz CR a innym razem CRLF. Więc trzeba je wycinać. Nie wiem co znaczy "na chama skrócić string" ??? ;) .... ale no trzeba go skrócić o te znaki właśnie, a zero na końcu samemu dostawić. Wtedy lcd_str() będzie działać grzecznie.

_________________
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: 20 sie 2012, o 21:39 
Offline
Moderator
Avatar użytkownika

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

No ale jak w taki sposób

bufor = bufor - 2;

można byłoby się pozbyć akurat znaków CRLF, albo samego LF - o ile w ogóle taka operacja byłaby możliwa. A przecież wiesz że to nie Bascom i nie można sobie robić takich operacji jak na zmiennych typu

Dim bufor As String * 16

zresztą i w Bascomie nie zrobiłbyś operacji wtedy bufor = bufor - 2

bo co to miałoby znaczyć ?

przecież napisałeś wyżej jakąś niby funkcję do napełniania bufora więc w niej sprawdzaj jakie znaki wpadają do niego i je usuwaj.

_________________
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: 20 sie 2012, o 21:49 
Offline
Moderator
Avatar użytkownika

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

Toż wyżej mówię że to niemożliwe przecież kompletnie jeśli bufor to tablica np:

char bufor[10];

to nigdy nie wykonasz operacji

bufor = bufor - 2;

chyba żebyś sobie wskaźnik powołał do życia. Ale to i tak w ogóle nie tędy droga - jakoś chcesz do tego strasznie podejść od tyłu. Jeszcze raz powiem, wcześniej masz jakąś swoją funkcję która napełnia ten bufor, to chyba po drodze wiesz jakimi znakami prawda ? albo możesz je sprawdzać - to co stoi na przeszkodzie aby nie wpuścić do bufora CRLF, zamiast tak jak ty chcesz po dwarkroć dłużej - czyli najpierw wkładać te znaki do bufora a potem znowu je usuwać ....

_________________
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: 20 sie 2012, o 22:12 
Offline
Moderator
Avatar użytkownika

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

Ja niestety nie za bardzo rozumiem w ogóle działania tej pętli, jaka jest jej idea? ... teoretycznie wydawać by się mogło że ma się realizować do momentu gdy nie CR i LF ale weź że sprawdź sobie sam. Zakładając np że pierwszy znak to będzie LF to co się stanie ? - no doda się do bufora i już masz ZONK'a

_________________
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: 21 sie 2012, o 12:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Ale ten warunek zawsze będzie spełniony zamiast && użyj ||.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2012, o 23:01 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Pozostaje mi kupić drugą książkę (już, natychmiast)


A może mi kolega ale tak szczerze powiedzieć co to ma oznaczać ? (nie będę się domyślał bo może źle pomyślę, więc proszę o podpowiedź)

_________________
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: 22 sie 2012, o 09:06 
Offline
Moderator
Avatar użytkownika

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

Ale zanim kupisz drugą książkę, proszę potestuj jeszcze sporo rzeczy z tej, szczególnie postaraj się zrozumieć działanie timerów programowych czy też ZDARZEŃ, których dotykam w ostatnich rozdziałach praktycznych. Bez tego może być ci bardzo bardzo ciężko dalej.....

A tak nawiasem mówiąc to powiedz mi - czy to też ci umknęło w tym wątku jak na początku kolega MichalXY podał ci LINK na naszym forum, gdzie inny kolega żmudnie ale samodzielnie (no może z lekką pomocą) stworzył już to z czym teraz ty się borykasz ???? i to bez drugiej książki - żeby chociaż tak w podstawowy sposób działało ???

topic968.html

toż przeczytaj dokładnie cały ten wątek post za postem do końca, bo masz tam rozwiązanie jak na patelni - nie wiem dlaczego pomijasz takie podpowiedzi ? ;) i męczysz się z próbą rozwijania swojego sposobu, który nie jest szczęśliwy - bo sam nawet przyznajesz ten fakt. A nieumiejętne posługiwanie się tu wskaźnikiem jak pisał też wyżej kolega GwynBleiD ... doprowadzi cię już w ogóle do masakry. (doczytaj jego uwagę bo trzymanie się twierdzenia że taka proteza powiedzmy że działa, zaowocuje kolejnymi błędami i myśleniem nie w tą stronę)

reasumując - prześledź ten wątek - jeszcze raz przypominam.

_________________
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: 22 sie 2012, o 20:11 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Mirku, oczywiście śledziłem ten wątek (no, może od przedwczoraj nie śledzę). To z tamtego wątku wziąłem pomysł na inkrementowanie flagi w przerwaniu, gdy nadejdzie CR. ....


Ale panie kochany to jest dalej rozwinięte i działa. Więc dlaczego zatrzymałeś się w środku na analizie tylko tego faktu że jest inkrementacja falgi ? ;)

_________________
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: 22 sie 2012, o 22:01 
Offline
Moderator
Avatar użytkownika

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

Twoja funkcja polegnie wcale nie ze względu na jakieś zachcianki jakiegoś programisty a chociażby ze względu na różne standardy. Czasem bowiem same terminale posługują się albo tylko CR, ale czase CRLF itd itp

to po pierwsze.....

a po drugie to mam nadzieję, że rozumiesz, że ambicja nie ma tu nic do rzeczy - bo na etapie nauki podstaw - nie chodzi o to żeby budować coś na zasadzie domku z kart i to jeszcze podczas silnego wiatru bo taką masz ambicję. Co więcej jeszcze się upierać aby ktoś ci podpowiadał jak to zrobić bo ty wierzysz że to dobra droga. Ja tam zawsze jak coś poznaję a mam taką możliwość to lubię podpatrzeć najpierw jak to robią inni, tzn wiele różnych rozwiązań..... I wtedy jest dopiero czas na ambicję - na podstawie podstawowych informacji budować coś własnego ....

No! chyba że człowiek zabiera się za oprogramowanie modułu do którego jeszcze nikt nie zrobił żadnych przykładów albo ciężko je znaleźć..... Tyle że przy podstawowej jeszcze wiedzy z samego zakresu C pewnie się nie zdziwisz że zajmie ci to X+Y+Z więcej czasu ..... A z kolei sam mówisz że wciąż masz go mało na naukę - zatem na końcu sam sobie trochę jakby zaprzeczasz ....

Na koniec dodam, że i tak to rozwiązanie z tego wątku, który dostałeś nie jest hmmm jakby to powiedzieć idealne. Jakoś działa - ale próba robienia w oparciu o nie dalszych większych programów to jak chodzenie po polu minowym ;)

dlatego postaraj się je obejść szybciej i jak będziesz znał ścieżki - to wtedy przyjdzie ew czas na drugą książkę - o ile jeszcze będzie potrzebna oczywiście.

_________________
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: 22 sie 2012, o 22:40 
Offline
Moderator
Avatar użytkownika

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

Heh - ty mnie źle zrozumiałeś - ja nie pomijałem celowo żadnych informacji dla początkujących .....

po prostu chciałem pokazać obsługę odbierania stringów w PEŁNEJ KRASIE ale już z użyciem ZDARZEŃ (EVENTS) .... a tego nie mogłem pokazać w pierwszej książce zanim nie zrobiłbym nawet wprowadzenia do takich zagadnień. Pod koniec pierwszej właśnie się to pojawia .... a w drugiej książce - także celowo ten rozdział jest na samym końcu książki a nie na początku - bo na początku stopniowo coraz bardziej wprowadzam czytelnika po kolei .... w tą tematykę .... a na końcu korzystamy już z tego w pełni i dzięki temu - odbieranie i parsowanie danych działa po prostu "dobrze"

_________________
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: 23 sie 2012, o 20:14 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Niestety nie mam pomysłu na to, by zautomatyzować tę funkcję, by odrzucała również znak LF. Nie wiem, rozłożyłem ręce.


Ok rozumiem, ale mam nadzieję że nie poprosisz teraz aby przekopiować ci tutaj rozwiązanie, które leży na tym forum ? żeby tą funkcję zautomatyzować trzeba ją napisać całkiem inaczej a ty się upierasz przy swojej wersji - no więc ja już nie jestem w stanie nic dodać w tym temacie niestety.... ale życzę powodzenia - na pewno uda ci się za jakiś czas ją zmienić żeby było ok....

_________________
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 sie 2012, o 09:36 
Offline
Moderator
Avatar użytkownika

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

GwynBleidD napisał(a):
Niestety nie zadziała to dobrze, gdy na raz dostaniesz 2 linie danych. Dlatego moim zdaniem najlepiej jest usuwać te znaki nie w funkcji odczytującej z UART, ale tuż przed wyświetleniem na LCD.


I skoro pojawia się już jakiś konkretny pomysł to mogę poddać sugestię. To nie jest dobre rozwiązanie - jeszcze raz przypomnę nie warto i wręcz nie należy po stokroć przesyłać stringów zawierających znaki CR LF - i pozbywać się ich dopiero w ostatecznych funkcjach ..... to niestety jest najgorsze co może być..... ponieważ nagle 50% twojego programu podporządkowane jest pilnowaniu CR LF. Takich sytuacji trzeba unikać jak ognia. Załatwia się to na najniższym poziomie. A gdzie jest najniższy poziom ????

toż głupi znak LF kompletnie do niczego nie potrzebny można pomijać już na etapie samego przerwania. Wtedy CR jako znak końca linii w buforze cyklicznym może być usuwany o piętro wyżej czyli w czymś co zabiera linię z tego bufora czyli w jakiejś funkcji gest_string().....

ta funkcja MUSI hmmm powinna przynajmniej ;) już dostarczać CZYSTY C-String ;) a nie znowu zapełniony jakimiś chwastami CR albo LF . A już na pewno nie powinna dostarczać pociętego czy poszatkowanego stringa.

_________________
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 sie 2012, o 10:07 
Offline
Moderator
Avatar użytkownika

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

Nie trzeba żadnego kompromisu to co opisałem ;) ten sposób a w całości w jednej z form podany w ostatnim rozdziale drugiej książki .... a tu podaję ogólne zasady ..... daje to że NIC ci się nie SKLEI ;)

Panie kochany jak to jest tak zorganizowane jak ci mówiłem to możesz wysyłać do procka swoje polecenia AT (tu troszkę zarzartuję ale) ... z prędkością światła ;)

Nie rozumiesz na razie podstawowej IDEI .... no właśnie ale jak ją tu wytłumaczyć skoro w książce specjalnie na to poświęciłem CAŁY JEDEN SPORY rozdział .....

pomimo to w skrócie

taka flaga reagująca na CR mówi ci ile masz w buforze cyklicznym linii ze swoimi komendami ;) .... więc co się sklei jeśli będziesz pobierał każdą z nich z osobna po kolei do znaku CR i go wtedy eliminował ?

Zrozum to nie jest nawet jakiś mój prywatny pomysł ..... takie mechanizmy są stosowane w transmisji ASCII od chyba tak dawna jak istnieje RS232 - a sprawdź sobie w necie jak dawno ten standard został wymyślony. Więc ja tu nie odkrywam ameryki - ale też dlatego gorąco polecam książkę widząc takie jeszcze spore niezrozumienie tego zagadnienia i się nie dziwię też do końca bo wszyscy tu mieszają pojęcia

parsowania danych z ich odbieraniem - czyli z oddzieleniem warstwy fizycznej aplikacji od warstwy tzw abstrakcyjnej, która już nie jest w żaden sposób związana ze sprzętem. A do tego warto dążyć w swoich programach - i cała druga książka to kontynuacja przekazywania wiedzy w tym zakresie ....

_________________
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 sie 2012, o 22:36 
Offline
Moderator
Avatar użytkownika

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

To nie o to chodzi - ale jak ci teraz podpowiem tak:

1. w przerwaniu zrób eleiminację zbędnych znaków i info dla EVENT'a (zdarzenia)
2. w Zdarzeniu obsłuż pobieranie ramek i stosownych flag dbając aby było w pełni nieblokujące
3. przygotuj sobie funkcję typu callback do zarejestrowania własnych zdarzeń
4. przygotuj prototyp funkcji dla użytkownika
5. odpalaj już sobie na końcu wygodnie zdarzenie w pętli głównej while
6. a parsowanie danych wykonuj we własnej funkcji użytkownika
7. jednocześnie zrób tak aby użytkownik mógł sobie rejestrować callbacka, innego dla dowolnej funkcji w całym programie

to co ci to da teraz ? - czy może mam każdy z podpunktów tu rozpisać ?

czy to oznacza że można TYLKO tak ??? nie da rady prościej ktoś zapyta ???? a ja odpowiem, że tak jak napisałem to jest najprościej .... a to co ty tutaj teraz robisz to dopiero jest komplikacja .....

więc sam widzisz - że można mieć jednak różne podejście do tego samego problemu prawda ? I chyba nie wątpisz że aby omówić kilka z powyższych punktów to warto a nawet trzeba się po drodze jeszcze kilku innych rzeczy dowiedzieć nie mówiąc już o lepszym przetrenowaniu wskaźników .... a prowadzę cię przez to w końcowych rozdziałach tej książki którą masz - oraz w pierwszych aż do ostatniego rozdziału drugiej

Ja mam swoją wizję jak podać zjadliwie te wiadomości żeby nie było później że to skomplikowany sposób - i już co najmniej kilku kolegów na tym forum może ci podpowiedzieć - że warto było przejść tą drogę - bo z tego sposobu już korzystają chociaż teraz na spokojnie już we własnych modyfikacjach. Najważniejsze było załapać ideę.

_________________
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 sie 2012, o 14:14 
Offline
Moderator
Avatar użytkownika

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

aha to o parsowaniu masz jeszcze też fajny przykład w rozdziale o UDP przy okazji Ethernetu w książce - wprawdzie to ethernet ale nie ważne - parsowanie to parsowania - zawsze jest takie same tzn podobna zasada

_________________
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: 26 sie 2012, o 07:57 
Offline
Moderator
Avatar użytkownika

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

GwynBleidD napisał(a):
mirku, widzisz... Nie dobrnąłem do tego jeszcze w Twojej książce, a do głowy przychodzi mi tylko schemat gdzie na sztywno decydujemy czy używamy obu znaków (CR i LF), czy tylko jednego. Popatrzę w książce i zobaczę, może coś odkryję co mi nową lampkę w umyśle zaświeci :)


Dlatego polecam LF pozbywać się jako śmiecia w przerwaniu, a CR dopiero podczas pobierania stringu z bufora cyklicznego. I wtedy uwierz mi, że nie ważne jest jak nadaje druga strona - czy używa dwóch znaków CRLF czy tylko jednego CR .... zawsze to będzie działać.

_________________
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: 26 sie 2012, o 09:06 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Hmm, mam pytanie... Dopiero teraz zwróciłem uwagę na fakt, że w obsłudze przerwania deklarowana jest zmienna lokalna data i tmp_head. Żadna z nich nie jest inicjalizowana, a kompilator nie wywala warningów. Pamiętam, że kiedyś deklarowałem jakąś zmienną lokalną i kompilator natychmiast zwrócił mi uwagę na fakt, że jej nie inicjalizuję. Od czego zależy jak zareaguje kompilator na zmienną z przypadkową zawartością?


No a jak myślisz ? ;)

pokażę ci trzy przypadki

1.

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



2.

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



3.

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


Sam je przetestuj ;) przecież nawet nie trzeba tego wgrywać do procka, tylko zapuścić końpilację ;) i zobacz w których przypadkach kompilator nie będzie płakał a w których ew będzie płakał. Myślę że po tym już ci się rozjaśni raz na zawsze to pytanie które zadałeś ;)

_________________
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: 26 sie 2012, o 09:15 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
... a zerknąłeś na moją obsługę przerwania? Idę w dobrym kierunku?


Tak - teraz w bardzo dobrym ;)

_________________
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: 26 sie 2012, o 09:27 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Ok, to walczę dalej. Największym problemem będzie dla mnie stworzenie dobrego callback'a.


to też na początek popróbuj bez callbacka - tylko z "ręcznym" pobieraniem danych z buforów cyklicznych na żądanie ... jak to będzie ci wychodziło i zobaczysz zalety takiego podejścia do komunikacji RS232 to wtedy możesz to zacząć obudowywać w paczki zwane zdarzeniami i rurki zwrotne zwane callbackami ;)

_________________
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: 26 sie 2012, o 13:08 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Ok, czas na rozważania teoretyczne. Mam zbudować funkcję, która zareaguje na flagę, pobierze dane z bufora cyklicznego, a na koniec wywoła funkcję, którą przekażę w parametrze własnie budowanej funkcji(w moim przypadku będzie to LCD_string()). Dobrze rozumiem ideę callback'a?


O ile dobrze zrozumiałem to pewnie ideę samego callbacka w jakimś zakresie już rozumiesz jak wynika z tych rozważań teoretycznych, ale na pewno daleko jeszcze od tego do zdarzeń....

zatem nie ciągnijcie mnie panowie już za język dalej jeśli chodzi o te kwestie bo to nieco bardziej abstrakcyjny temat hmm abstrakcyjna warstwa programu i aby tu się dobrze porozumiewać to wolałbym abyś miał to co teraz robisz dobrze opanowane plus chociaż trochę przykładów jednak z drugiej książki. I znowu - nie chodzi mi o to aby ją na siłę wciskać - jednak podam tu też pewną sugestię ogólną:

zdarzenie to taki rodzaj funkcji, która wykonuje się na podstawie zdarzenia sprzętowego (np przerwanie/flaga, sygnał z jakiegoś wejścia/ z ADC itp itp) .... Można powiedzieć że ona niejako musi potrafić wciąż monitorować te stany ale też zdarzenie powinno być tak skonstruowane aby można było je wykorzystać w dowolnej innej funkcji, a zatem nie może być powiązane z żadną lokalną funkcją bazową hmmm no np tą w której ją testujemy itp ....

przy takiej konstrukcji zdarzenie np RS232 można odpalać sobie w DOWOLNEJ innej funkcji/podprogramie na IDENTYCZNEJ zasadzie. (dotyczy tzn powinno to dotyczyć wszystkich zdarzeń a nie tylko RS232) .... I teraz najważniejsze. Dzięki wskaźnikom można implementować na każdym poziomie użycia zdarzenia inną obsługę dzięki callbackom .... tzn ... hmmm w zasadzie taka konstrukcja zaczyna przypominać prawie OBIEKT z języka wyższego poziomu jak np C++, gdzie odpowiednikiem metod są właśnie rejestrowane callbacki. Różni się to od obiektówki już tylko tym, że tu musimy ręcznie dbać o implementację metod i propertiesów ;) takich zdarzeń .... Jednak podstawową zaletą takiego postępowania jest przepiękna możliwość odizolowania w programach własnych warstwy abstrakcji od warstwy fizycznej - a pewnie tu i tam słyszeliście, że tak się powinno pisać programy w C. Tyle tylko że na pewnym forum ele... ludzie wpadają , pochwalą się, że tak trzeba ale pokażcie mi gdzieś - żeby postarali się to komuś później wytłumaczyć? z tym już jest dużo gorzej. I nie tylko dlatego że oni nie chcą czy się mądrzą - ale takie tłumaczenie to nie chop siup .... a jak ktoś się zabiera za to w 2-3 zdaniach na forum - to właśnie - wyjdzie mniej więcej to co ja tu wyżej napisałem.... tylko jest jedna różnica .... ja postarałem się jednak spisać wszystko w postaci książki i znowu panowie to nie jest książka o jakichś tam tylko fajnych czy mniej fajnych projekcikach (chociaż i tylko z tego punktu widzenia na pewno każdy znajdzie chociaż ze 2-3 rzeczy/biblioteki dla siebie) .... ważne jest to że na takich przykładach staram się właśnie opowiadać i przemycać innym do podświadomości takie postępowanie jak opisuję wyżej.... Robię więc to niejako "po kryjomu" bez opisywania ton teorii - a raczej na praktycznych przykładach - ot takie mam pomysły i co ważne one się sprawdzają jak ktoś podąża takim moim tokiem rozumowania. Sprawdzone na kursach naziemnych ;) więc wiem co mówię to nie tylko moje wymysły.

wiem wiem .... może troszkę zaszalałem teraz z tłumaczeniem .... ale może dlatego ten kto nie miał w ręku drugiej książki w ogóle uzna to za jakieś herezje i czarną magię - ale mam nadzieję, że tym wytłumaczyłem dlaczego wolałbym rozmawiać o zdarzeniach z kimś kto ma tę pozycję w ręku - ponieważ wtedy też pojawią się CAŁKIEM inne pytania i tu już będę mógł wskoczyć śmiało w tok rozumowania bez szkody dla pytającego ;)

a i tak dodam, że na tym etapie tzn drugiej książki nie udało mi się już płynnie przedstawić takich mechanizmów jak podmianę "w locie" metod dla takich obiektów oraz dlaczego to może być ważne a przede wszystkim NIESAMOWICIE przydatne .... ale w ostatnim rozdziale podsumowującym całość jest to zasygnalizowane i w kolejnej książce możecie się spodziewać rozwinięcia .....

ale też pewnie i niektórzy już na podstawie kilku dodatkowych pytań do mnie będą w stanie zacząć sami z tego korzystać .... a to już właśnie jest to co tygrysy lubią najbardziej ;) jeśli chodzi o C .....

czy to wyczerpuje wszystkie zagadnienia i ciekawostki technik programowania ? na pewno nie - ale analizując kody rozdziału o warstwach na LCD i obsługi wielowątkowości na takim przykładzie i połączenie zdarzeń to już będzie 70-80% czego nam potrzeba na co dzień ....

_________________
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: 26 sie 2012, o 15:41 
Offline
Moderator
Avatar użytkownika

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

No ale właśnie widać, że nawet ładnie ci to idzie i coraz lepiej - pomimo że jak się nieraz zabierasz za coś od nowa i masz kłopot to - zwykle troszkę chaotycznie jeszcze postępujesz i chyba obawiasz się że ciężko będzie - to sam zobacz jak niedużo czasu upłynęło odkąd wyrażałeś swoje obawy o zrozumienie RS232 - a już jak w miarę daleko jesteś ;) ..... do wszystkiego się uda dojść

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 32 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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