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



Teraz jest 28 mar 2026, o 13:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 30 paź 2015, o 10:37 
Offline
Użytkownik

Dołączył(a): 08 lut 2015
Posty: 132
Pomógł: 4

Witam. Piszę sobie taki kod do zabawy z PWM, gdzie w głównym pliku mam:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i gdzieś dalej chce przekazać znak z tej tablicy do zmiennej o nazwie pwm1 w jakiejś pętli:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I w ten sposób wszystko działa ok, lampka się rozjaśnia. Ale kiedy próbuje to "ubrać" w funkcję pojawia się problem:
w 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.

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

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


Ma ktoś pomysł dlaczego w pierwszym przypadku wszystko działa ok, a w drugim nic się nie dzieje tak jak by do zmiennej pwm1 nie była zwracana żadna wartość.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2015, o 10:46 
Offline
Moderator
Avatar użytkownika

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

drewpol napisał(a):
tab++

Poczytaj sobie o zmiennych lokalnych w funkcji, jak myślisz co tutaj da to ++ ? .... Co to ma zrobić ? To działanie na zmiennej lokalnej, więc po wyjściu z funkcji Quniec. Dawaj to ++ do argumentu, który przekazujesz do funkcji a musi on być wtedy wskaźnikiem na tą tablicę, a nie nazwą tablicy.

_________________
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: 30 paź 2015, o 13:52 
Offline
Użytkownik

Dołączył(a): 08 lut 2015
Posty: 132
Pomógł: 4

Dziękuję bardzo za odpowiedź. Mam jeszcze pytanie. W jaki sposób mogę sprawdzać czy liczby w tablicy się skończyły? Napisałem coś takiego, że jeśli wskaźnik jest większy od 255 czyli maksymalnej wartości w tej tablicy to ma ustawić flagę i wtedy nie wykona się już zmiana pwm:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Lecz niestety dioda rozjaśnia się od 0 do maksymalnej wartości i zaczyna bardzo szybko migać. Czy powodem tego jest jakiś błąd w powyższym kodzie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2015, o 14:42 
Offline
Moderator
Avatar użytkownika

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

Nie sprawdzisz - w C dla danych binarnych podaje się długość tablicy jako argument funkcji. Natomiast dla danych ASCII (czyli stringów oczywiście się sprawdzi koniec ;) bo końcem jest zawsze zero )

_________________
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: 30 paź 2015, o 16:19 
Offline
Użytkownik

Dołączył(a): 08 lut 2015
Posty: 132
Pomógł: 4

Ok, rozumiem. Utworzyłem sobie taka funkcję do zmiany pwm:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Teraz pojawiaja się pytanie:

Kiedy makrodefinicja GAMMAR(a) znajduje się w pliku nagłówkowym .h to pojawia się warning taki jak poniżej:
Kod:
warning: implicit declaration of function 'GAMMAR' [-Wimplicit-function-declaration]
   if(GAMMAR(i) < 255) pwm1 = GAMMAR(i++);

Kiedy przeniosę makrodefinicje do pliku .c z z tą funkcją to wszystko jest ok. Dlaczego tak jest i w jaki sposób mogę skompilować to bez warningu z makrodefinicją w pliku nagłówkowym?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2015, o 16:33 
Offline
Moderator
Avatar użytkownika

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

Bo teraz panie to próbujesz wykorzystywać tę makrodefinicję nie jako makro ale jako funkcję. Dlatego kompilator nie widzi ciała funkcji w pliku *.c i wymiotuje warningami ;)

wywal te ++ i -- poza nawiasy ;) i wtedy makro będzie działać jak makro a nie funkcja

_________________
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: 30 paź 2015, o 16:58 
Offline
Użytkownik

Dołączył(a): 08 lut 2015
Posty: 132
Pomógł: 4

Nie wiedziałem, że w tym przypadku jest to traktowane jako funkcja. Kiedy robię tak jak Pan mówi Panie Mirku dostaję kolejne błędy. Więc zostawię po prostu to makro w pliku .c i będzie traktowane jako funkcja lub stworze sobie po prostu funkcję, która będzie pełniła tą samą rolę. Myślę, że traktowanie tego makra jako funkcji nie będzie miało jakiś poważnych konsekwencji ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2015, o 17:04 
Offline
Moderator
Avatar użytkownika

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

drewpol napisał(a):
Kiedy robię tak jak Pan mówi Panie Mirku dostaję kolejne błędy.

a jak ty to robisz ? ;) pewnie źle

Pokaż kod .... chyba nie robisz tego tak przypadkiem co ? ;)

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  
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 3 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO