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



Teraz jest 5 mar 2025, o 05:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 3 kwi 2016, o 19:23 
Offline
Użytkownik

Dołączył(a): 27 maja 2014
Posty: 75
Pomógł: 0

Witam,

Trochę już szukam rozwiązania po internetach i za bardzo się już zakręciłem dlatego postanowiłem założyć temat tu.

Mam sobie taką funkcję ustawiania czasu (godzina i minuta). Do tej pory rozwiązywałem to mniej więcej w ten sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

no i gdzieś dalej w programie odwoływałem się do tego...
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Teraz na potrzeby nowego rozwiązania chciałbym tą godzinę i minutę mieć po prostu w tablicy więc parametrem funkcji będzie tablica przekazywana przez referencję...

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


no i gdy wywołuję funkcję w ten sposób (chociaż próbowałem już też na wiele innych :) )
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to warninguje mi kopilator:
passing argument 1 of 'sett_time' from incompatible pointer type [enabled by default], a po wgraniu do sterownika zmieniać mogę tylko pierwszy argument (ale i tak tylko w dół..)

Nie jestem orłem dlatego zwracam się do Was o pomoc jak mam się do tego odwołać :)

Z góry dzięki!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 19:48 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

Na początek nie ten dział, bo nie ma referencji w C (są w C++). A co do warninga to dlaczego przekazujesz wskaźnik na element tablicy, a w deklaracji funkcji masz wskaźnik na wskaźnik? Poza tym chyba coś mieszasz bo w ani jednej ani drugiej deklaracji funkcji nie ma nic o referencji (z kodu wynika, że piszesz w czystym C więc referencji nie może być).


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 20:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 paź 2014
Posty: 233
Lokalizacja: Rzeszów
Pomógł: 11

Wydaje mi się, że przesyłasz do funkcji tablicę wskaźników.


Autor postu otrzymał pochwałę

_________________
Mr. Nobody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 20:52 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

Nie wiemy czy to tablica wskaźników. Nigdzie nie pokazał definicji zmiennej w_timeoff, ani pełnego błedu z GCC.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 21:28 
Offline
Użytkownik

Dołączył(a): 27 maja 2014
Posty: 75
Pomógł: 0

w_timeoff to tablica zmiennych. Jest zadeklarowana w headerze:

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


make all
'Building file: ../function.c'
'Invoking: AVR Compiler'
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=16000000UL -MMD -MP -MF"function.d" -MT"function.d" -c -o "function.o" "../function.c"
../function.c: In function 'func_godzina':
../function.c:365:3: warning: passing argument 1 of 'sett_time' from incompatible pointer type [enabled by default]
../function.c:188:6: note: expected 'uint8_t **' but argument is of type 'uint8_t *'
'Finished building: ../function.c'



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

Dołączył(a): 17 paź 2014
Posty: 233
Lokalizacja: Rzeszów
Pomógł: 11

Nieprecyzyjnie się wyraziłem

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


Funkcja wygląda tak, jakby oczekiwała tablicy wskaźników. Zrozumiałem to w ten sposób, że autor chciałby wysłać do funkcji tablicę, aby mógł ją modyfikować.


Autor postu otrzymał pochwałę

_________________
Mr. Nobody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 22:03 
Offline
Użytkownik

Dołączył(a): 27 maja 2014
Posty: 75
Pomógł: 0

APAP75 napisał(a):
Zrozumiałem to w ten sposób, że autor chciałby wysłać do funkcji tablicę, aby mógł ją modyfikować.


Dokładnie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 22:21 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 22:25 
Offline
Moderator
Avatar użytkownika

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

ryba84 napisał(a):
No to powinieneś wywoływać funkcję tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A ponieważ sama nazwa tablicy jest wskaźnikiem na pierwszy jej element to można pominąć operator pobierania adresu i zrobić to też tak:

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


Autor postu otrzymał pochwałę

_________________
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: 3 kwi 2016, o 22:29 
Offline
Użytkownik

Dołączył(a): 27 maja 2014
Posty: 75
Pomógł: 0

Super, już teraz rozumiem :) Wielkie dzięki za pomoc !



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2016, o 22:42 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

mirekk36 napisał(a):
ryba84 napisał(a):
No to powinieneś wywoływać funkcję tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A ponieważ sama nazwa tablicy jest wskaźnikiem na pierwszy jej element to można pominąć operator pobierania adresu i zrobić to też tak:

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

Dlatego ja napisałem to w ten sposób. w_timeoff jest tablicą (wskaźnikiem) na elementy typu uint8_t a funkcja potrzebuje wskaźnika na tablicę (wskaźnik). O tym mówi nam GCC:
Kod:
../function.c:365:3: warning: passing argument 1 of 'sett_time' from incompatible pointer type [enabled by default]
../function.c:188:6: note: expected 'uint8_t **' but argument is of type 'uint8_t *'

Wnikając w kod tej funkcji wynika, że zbędne jest przekazywanie do niej wskaźnika na wskaźnik. Wystarczy taka definicja:
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.

Tylko musiałbyś poprawić samo "ciało" funkcji (pozbyć się znaku wyłuskania *). W C tablice nie są kopiowane, więc operujemy na danych przekazanej tablicy.


Autor postu otrzymał pochwałę


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

Strefa czasowa: UTC + 1


Kto przegląda forum

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