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



Teraz jest 6 kwi 2026, o 17:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 22 ] 
Autor Wiadomość
PostNapisane: 12 mar 2013, o 13:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

Niebieska biblia, str 76.


i jeszcze volatile sprawdź

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 13:41 
Offline
Moderator
Avatar użytkownika

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

Dokładnie po pierwsze PRIMO

definicję (ale UWAGA nie struktury!) tylko typu strukturalnego (typedef) umieszczasz w dołączanym wszędzie pliku nagłówkowym *.h

po drugie

DEFINICJĘ struktury czyli to:

Kod:
mstr opcja1;


bo to jest panie - DEFINICJA .... umieszczasz w jakimś pliku *.c np w main.c

a wtedy (uwaga!) DEKLARACJĘ czyli to

Kod:
extern mstr opcja1;


umieszczasz także w tym pliku nagłówkowym *.h gdzie masz zdefiniowany TYP strukturalny

Jak widzisz gdy się operuje właściwymi nazwami to wszystko staje się jaśniejsze ;)

ale jeszcze jedna uwaga do ciebie albo dwie ;)

Jak definiujesz TYP strukturalny to posłuchaj mnie i definiuj go DUŻYMI literami czyli MSTR a nie mstr .... bo to strasznie kocio wygląda

Kod:
mstr opcja1;


a gdy się patrzy na

Kod:
MSTR opcja1;


to od razu dla oka widoczny jest nowy TYP - mam tu na myśli typy strukturalne bo nowe typy zmiennych też robiłbym małymi literkami

druga rzecz specyfikator volatile jest tu niepotrzebny

i jeszcze jedno - powiedz mi ale tak szczerze po kiego grzybka z uporem godnym podziwu używasz czegoś takiego:

Kod:
unsigned char tab[3];


zamiast po prostu

Kod:
char tab[3];


?????? hmmmm toż nie podejrzewam że w domyślnych opcjach kompilacji zmieniłeś coś sobie a więc każdy typ char będzie i tak automatycznie zamieniany do unsigned char a ciebie to ustrzeże przed zadawaniem kolejnych pytań później i rwaniem włosów z głowy gdy zaczniesz mieć problemy z rzutowaniem - zobaczysz ;)

_________________
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: 12 mar 2013, o 14:19 
Offline
Moderator
Avatar użytkownika

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

squeez napisał(a):
Przyjmuję uwagi i obiecuję poprawę :) te unsigned char to gdzieś w jakimś kodzie podpatrzone. Generalnie wydawało mi się, że char i tak jest unsigned bo nie może mieć wartości "ujemnych".


char jak najbardziej może mieć ujemne wartości - no ale właśnie domyślne opcje kompilacji powodują że jest traktowany jak unsigned żeby nie trzeba było bawić się w poetyckie pisanie takich rzeczy, podobnie sprawa się ma np z typami

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


:) po co tak skoro można

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

_________________
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: 12 mar 2013, o 17:27 
Offline
Moderator
Avatar użytkownika

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

squeez napisał(a):
mirekk36 napisał(a):
Dokładnie po pierwsze PRIMO
druga rzecz specyfikator volatile jest tu niepotrzebny


Ale z tej struktury korzystam w przerwaniach, dlatego dałem volatile. No chyba że czegoś nie wiem (co jest mocno prawdopodobne), że struktury są nieco inaczej traktowane w przerwaniach niż normalne zmienne, ale nie przypominam sobie żebym coś takiego gdzieś wyczytał.

Na to odpowiem później ok ?

squeez napisał(a):
Generalnie piszę obsługę USART na przerwaniach z buforem. Idzie to mozolnie. Wiem w niebiskiej jest kompletna biblioteka i nawet z obsługą RS485 z czego zapewne skorzystam ale na początek sam chcę "organoleptyczne" posmakować USARTA i poznać mechanizmy niż bezmyślnie używać gotowca.
To jest bardzo zdrowe podejście i nic tak nie nauczy ja próba posmakowania tego samemu ..... Popieram.

squeez napisał(a):
PS. pisząc ujemnie wartości chodziło mi o to, że przyjmuje wartości 0-255, choć jak teraz patrzę to jest taki twór jak signed char (-128 127) tak z ciekawości przy czym się to stosuje?


Nie jest normalnie używane - ale niektórzy z lubością używają char jako typowych zmiennych uint8_t

_________________
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: 12 mar 2013, o 20:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
tak może podepnę się pod temat bo widzę ciekawą dyskusję na temat "char".
Mirku chodzi mi o twoją funkcję "char * uart_get_str(char * buf)" z lekcji o UART z drugiej książki. Robisz takie sprawdzenie :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
gdzie c jest typu char. Nie mam gcc ale z tego co się domyślam to powinna być domyślna promocja do unsigned char. Tak jest przynajmniej w kompilatorze do PIC (xc8 lub hi tech). Taki zapis powoduje od razu ostrzeżenie kompilatora "warning: mismatched comparison" więc muszę zadeklarować zmienną c jako signed char i dopiero wtedy jest ok, czyli logicznie. Więc jak to jest w gcc, że nie generuje warninga (zakładam, że przykłady z książki nie generują warning)??.

Pozdrawiam
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 21:11 
Offline
Moderator
Avatar użytkownika

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

Lemosek masz rację ale w ostatnim rozdziale biblioteka do obsługi UART to już CAŁKIEM inna biblioteka i nagłówek funkcji o której mówisz wygląda tak:

int uart_getc(void);

więc już chyba wiesz, że nie chodzi o zmienną typu char tylko int

aaaaa przepraszam chodzi ci o funkcję

Cytuj:
char * uart_get_str(char * buf) {
char c;
char * wsk = buf;
if( ascii_line ) {
while( (c = uart_getc()) ) {
if( 13 == c || c < 0) break;
*buf++ = c;
}
*buf=0;
ascii_line--;
}
return wsk;
}


eeeeh tu jest błąd i oczywiście muszę dodać to do erraty - powinno być:

Cytuj:
char * uart_get_str(char * buf) {
int c;
char * wsk = buf;
if( ascii_line ) {
while( (c = uart_getc()) ) {
if( 13 == c || c < 0) break;
*buf++ = c;
}
*buf=0;
ascii_line--;
}
return wsk;
}

_________________
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: 12 mar 2013, o 21:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
no właśnie o to mi chodziło, że nie zgadzały mi się typy :d. Nie znam gcc, dlatego wolałem dopytać :) tak z ciekawości.

Pozdrawiam
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2013, o 21:21 
Offline
Moderator
Avatar użytkownika

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

Lemosek napisał(a):
Witam,
no właśnie o to mi chodziło, że nie zgadzały mi się typy :d. Nie znam gcc, dlatego wolałem dopytać :) tak z ciekawości.

Pozdrawiam
R.L.


Niestety GCC nie zgłasza w takich sytuacjach warninga .... a ja pisząc tą funkcję zapomniałem że przerobiłem tą do pobierania znaku i że zmienił się jej rezultat z char na int ;)

_________________
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: 16 kwi 2015, o 22:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Witam :)
Pozwolicie, że troche odgrzeje temat :)

Zaczynam przygodę z AVRami i natknołem się na taki mały problem, otóż zgodnie z tym co napisał Mirek (w ogóle niskie pokły dla Jego osoby za to co robi) w postach:
- topic2550.html#p30462
- http://mirekk36.blogspot.com/2013/07/st ... adnie.html
- http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html cz.1, 2, 3

Postanowiłem wszystko ładnie scalić w jedność i napisac krótki programik wykorzystujący wyświetlacz 7-mio segmentowey . A więc mam takie coś:

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



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



po odpaleniu kompilacji wykaskują mi błędy dotyczące inicjalizacji klawisza:

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


Natomiast przeniesienie kodu odpowiedzialnego za inicjalizację klawisza do pliku gównego main.c powoduje zniknięcie błedów.
Jeśłi to możliwe prosił bym o wytłumaczenie dlaczego błędy te pojawiają się w pliku klawiatura.c a znikają w main.c?
Pozdrawiam serdecznie i z góry dziękuję za odpowiedź :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2015, o 23:09 
Offline
Moderator
Avatar użytkownika

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

masz gdzieś babola w kodzie - brak przecinka, średnika albo coś podobnego

i może być wcześniej

------------------------ [ Dodano po: kilkunastu sekundach ]

może to być nawet średnik gdzieś w makrze #define

_________________
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: 17 kwi 2015, o 09:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

Cytuj:
squeez napisał(a):
mirekk36 napisał(a):
Dokładnie po pierwsze PRIMO
druga rzecz specyfikator volatile jest tu niepotrzebny


Ale z tej struktury korzystam w przerwaniach, dlatego dałem volatile. No chyba że czegoś nie wiem (co jest mocno prawdopodobne), że struktury są nieco inaczej traktowane w przerwaniach niż normalne zmienne, ale nie przypominam sobie żebym coś takiego gdzieś wyczytał.

Na to odpowiem później ok ?


Czy padła gdzieś w końcu odpowiedź? Ciekaw jestem.
A i przepraszam kolegę amilo_pa za wciśnięcie się w wątek!;-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2015, o 20:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Witam.
Mirku przepatrzyłem cały kod i nigdzie nie zauwazyłem brakującego znaczka.

Tak jak pisałem wcześniej dopiero zaczynam zabawe więc może coś pominołem i nie wiem gdzie więc umieszczam oba pliki, może ktoś coś zauważy.


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


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




Kolego zoom wybaczam i przeprosiny przyjęte :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2015, o 21:17 
Offline
Użytkownik
Avatar użytkownika

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

Wrzuć ten kawałek kodu do jakiejś funkcji.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

A następnie tą funkcje wywołaj np. w funkcji main.

Bo teraz to próbujesz przypisywać wartości do zmiennych poza ciałem jakiejkolwiek funkcji. A to raczej nie zadziała.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2015, o 22:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Kolego jacek232 wielkie dzięki za podpowiedź kompilacja poszła poprawnie natomiast wyskoczył worning w głównym pliku, mianowicie krzyczy, że:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dlaczego wyskakuje ostrzeżenie, że deklaracja funkcji jest niejawna skoro jest w pliku nagłówkowym klawiatura.h?

plik 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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2015, o 06:06 
Offline
Moderator
Avatar użytkownika

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

mokrowski napisał(a):
,,jak jelita na wierzchu"

:lol: :lol: :lol: ... no nie wytrzymam... :lol:

_________________
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 kwi 2015, o 11:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Ad1. Ochrzan pomógł - poszukałem, znalazłem, zrozumiałem :)
Ad 2 i 3:
Zrobiłem tak:

plik main.c:
- definicja zmiennej globalnej button
- definicja oraz deklaracja parematrów zmiennej button w postaci funkcji button_init();

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.

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

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


O to chodziło?
Bardzo prosze o konstruktywną krytyke i ewentualne uwagi oraz wskazówki, abym dalej takich błędów nie popełniał.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2015, o 21:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Zwał jak zwał, ale pomogło :P
czy
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
jest funkcją, której argumentem jest wskaźnik na poczatkowy adres deklaracji struktury TBUTTON ? dobrze to rozumię?:)
Jeżeli ta deklaracja jest deklaracją funkcji to nie wiedziałm, że funkcję można deklarować wewnątrz funkcji:)

Jedyne wnioski jaki mi się nasuwają to takie, że od razu wiadomo czego tyczy się ta deklaracja button_init, że jest ona powiązana ze strukturą TBUTTON - nie trzeba się domyślać co autor miał na myśli.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2015, o 22:42 
Offline
Użytkownik
Avatar użytkownika

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

Kol. mokrowskiemu chodziło chyba o coś takiego
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: 18 kwi 2015, o 22:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Witam:)
a więc jednak przed funkcją main().
Strzałek uzyłem:)
Dziękuje za podpowidź :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 kwi 2015, o 10:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Serdeczne dzięki chłopaki.
Jeszcze duuużo nauki przede mną :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 kwi 2015, o 13:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Chciałbym teraz dołożyć obsługę drugiego klawisza. Jednak kod nie działa po mojej myśłi ;/

W tym celu postanowiłem zdublować zmienną
Kod:
button
oraz funkcję
Kod:
void button_init(TBUTTON *butt);
Po wprowadzeniu tych zmian klawisz 2 w ogóle nie reaguje.
Proszę o Anielską cierpliwość i wyjaśnienie dlaczego to nie działa i co należy zrobić abym mógł dodać drigi i więcej klawiszy.

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: 23 kwi 2015, o 18:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 298
Pomógł: 13

mirekk36 napisał(a):
squeez napisał(a):
mirekk36 napisał(a):
Dokładnie po pierwsze PRIMO
druga rzecz specyfikator volatile jest tu niepotrzebny


Ale z tej struktury korzystam w przerwaniach, dlatego dałem volatile. No chyba że czegoś nie wiem (co jest mocno prawdopodobne), że struktury są nieco inaczej traktowane w przerwaniach niż normalne zmienne, ale nie przypominam sobie żebym coś takiego gdzieś wyczytał.

Na to odpowiem później ok ?


Skoro temat trochę ucichł, to jeszcze raz się upomnę;-)
Czy Pan Mirek odpowiedział w końcu na powyższe pytanie squeeza?
Bo wydaje mi się, że nie, a ciekawi mnie to.



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

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