ATNEL tech-forum https://forum.atnel.pl/ |
|
Prośba o pomoc w zrozumoeniu działania struktury https://forum.atnel.pl/topic22567.html |
Strona 1 z 1 |
Autor: | miki53 [ 19 wrz 2019, o 17:53 ] |
Tytuł: | Prośba o pomoc w zrozumoeniu działania struktury |
Witam wszystkich serdecznie Walczę z strukturami w moim projekcie i doszedłem metodą prób i błędów do oczekiwanego rezultatu ale w inny sposób niż podpowiadany przez kolegów i chciałbym to zrozumieć dlaczego mój sposób działa ( mimo że nie wiem dlaczego działa ) czy to zasługa funkcji czy struktury Przedstawiam kod dla lepszego zrozumienia PLIK h język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
PLIK C język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
MAIN .C język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wyświetlone błędy make all 'Building file: ../main.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=11059200UL -MMD -MP -MF"main.d" -MT"main.o" -c -o "main.o" "../main.c" ../main.c: In function 'main': ../main.c:61:1: error: too many arguments to function 'sterowanie_wyj' sterowanie_wyj (&datetime,&wyj_1, 17,48,0,1, 17,48,30,1); ^ In file included from ../main.c:15:0: ../STER_WY/ster_wy.h:37:7: note: declared here void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al ); ^ ../main.c:62:1: error: too many arguments to function 'sterowanie_wyj' sterowanie_wyj (&datetime,&wyj_2, 17,49,0,2, 17,49,30,2); ^ In file included from ../main.c:15:0: ../STER_WY/ster_wy.h:37:7: note: declared here void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al ); ^ ../main.c:63:1: error: too many arguments to function 'sterowanie_wyj' sterowanie_wyj (&datetime,&wyj_3, 17,48,0,1, 17,48,30,1); ^ In file included from ../main.c:15:0: ../STER_WY/ster_wy.h:37:7: note: declared here void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al ); ^ ../main.c:64:1: error: too many arguments to function 'sterowanie_wyj' sterowanie_wyj (&datetime,&wyj_4, 17,49,0,2, 17,49,30,2); ^ In file included from ../main.c:15:0: ../STER_WY/ster_wy.h:37:7: note: declared here void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al ); ^ ../main.c:65:1: error: too many arguments to function 'sterowanie_wyj' sterowanie_wyj (&datetime,&wyj_5, 17,48,0,1, 17,48,30,1); ^ In file included from ../main.c:15:0: ../STER_WY/ster_wy.h:37:7: note: declared here void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al ); ^ ../main.c:66:1: error: too many arguments to function 'sterowanie_wyj' sterowanie_wyj (&datetime,&wyj_6, 17,49,0,2, 17,49,30,2); ^ In file included from ../main.c:15:0: ../STER_WY/ster_wy.h:37:7: note: declared here void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al ); ^ ../main.c:67:1: error: too many arguments to function 'sterowanie_wyj' sterowanie_wyj (&datetime,&wyj_7, 17,48,0,1, 17,48,30,1); ^ In file included from ../main.c:15:0: ../STER_WY/ster_wy.h:37:7: note: declared here void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al ); ^ ../main.c:68:1: error: too many arguments to function 'sterowanie_wyj' sterowanie_wyj (&datetime,&wyj_8, 17,49,0,2, 17,49,30,2); ^ In file included from ../main.c:15:0: ../STER_WY/ster_wy.h:37:7: note: declared here void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al ); ^ make: *** [main.o] Błąd 1 18:07:46 Build Finished (took 282ms) ***************************************************************** A teraz mój kod działający mimo że nie ma wskażników w IFACH PLIK H język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
PLIK C język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
MAIN .C język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Moja pytanie jest następujące dlaczego w ifach gdy zastosuję wskażniki al-> on_hh , al-> on_mm itd to ten kod nie działa A ten fragment kodu powinien działać tak jak z wskażnikem dt-> hh A druga wersja działa mimo że nie ma wskażników i wygląda to tak jakby to robiła funkcja a nie struktura ( zmienne są pobierane z funkcji a nie z struktury ) i tego nie rozumiem *************************************************************************** Teraz prośba druga jak doprowadzić do ustawiania czasów włączania portów sterujących za pomocą menu na LCD ? prosiłbym o podpowiedzi które pomogłyby mi rozwiązać ten supełek |
Autor: | mirekk36 [ 19 wrz 2019, o 18:17 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Ja bym z chęcią podpowiedział ale gdybyś pokusił się o wyekstrachowanie problemu - powiedz mi - po jakiego grzyba włączasz do przykładowego kodu żeby pokazać swój problem - jakieś hektolitry kodu ... i dziesiątki plików ? Nie mówię tego broń Boże złośliwie czy w nerwach ale chcę ci tylko podpowiedzieć, że właściwe wyizolowanie problemu - często pomaga nawet żeby samemu go rozwiązać ... Dlaczego nie stworzysz dla pokazania przykładu pojedynczego przykładu w jednym pliku main.c, gdzie będzie typedef struktury i poza funkcją main() jakaś inna do której ew przekazujesz jakieś wskaźniki ... ? Polecam ci takie podejście ------------------------ [ Dodano po: 2 minutach ] chociaż tak na pierwszy rzut oka nawet w tym niby działającym przykładzie robisz dużą kaszanę DEFINIUJĄC zmienne typu strukturalnego w pliku *.H ! to niedopuszczalne w C a jeśli tak będziesz robił - to później napotkasz kolejne mega problemy masz może Bluebooka? Jeśli tak to czytałeś rozdział o podziale projektu na pliki ? tzn jakie zasady rządzą tym podziałem ? Czy rozumiesz do końca czym różni się DEFINICJA zmiennej od jej DEKLARACJI ? |
Autor: | miki53 [ 20 wrz 2019, o 07:12 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Skrócę ten przydługawy kod Dlaczego ten kod nie działa mimo że są wskażniki w ifah ? język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Dlaczego ten sposób działa mimo że niema wskażników w ifach ? |
Autor: | miki53 [ 20 wrz 2019, o 10:10 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Wyszło trochę nie bardzo bo powtarzają się funkcje to z tego powodu że było to pisane metodą wytnij wklej z różnych plików i to na szybko Mam nadzieję że to nie przeszkodzi w rozczytaniu kodu Pytanie moje było dlaczego pierwszy kod nie działa mimo że są wstawione wskażniki w ifach a w main.c pokazuje się błąd mówiący że za dużo argumentów w tym fragmencie kodu sterowanie_wyj (&datetime,&wyj_8, 17,49,0,2, 17,49,30,2); Natomiast w drugim przykładzie wszystko działa mimo że wskażników nie ma w ifach W TAKIM RAZIE DLACZEGO TO DZIAŁA ? Czy dlatego że argumenty są pobierane z funkcji a nie z struktury ? Jak to powinno właściwie być ? Przeglądałem poradniki i opisy w książkach ale nie mogę załapać |
Autor: | mirekk36 [ 20 wrz 2019, o 11:07 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Panie kochany - jeszcze raz - napisz że krótki przykładowy kod nawet dwa dla porównania ... z tego co napisałeś to już w ogóle nie wiadomo o co chodzi i w czym ty masz tam problem istna masakra teraz - tym bardziej, że wygląda to jakbyś wkleił dwa takie same kody wyżej ... tzn w drugim inne ilości argumentów w funkcjach - kompletny misz-masz - nie obraź się. przy takim podejściu - to nie dziw się, że każdy tu zagląda i ucieka ... żeby uzyskać pomoc - to jednak warto też się wysilić i PORZĄDNIE zadać pytanie |
Autor: | miki53 [ 20 wrz 2019, o 12:40 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Proszę o cierpliwość ale nie wiem już jak prościej mam zapytać ? Dlaczego ten kod nie działa mimo że są wskażniki do struktury język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Dlaczego ten kod działa skoro niema w drugiej części warunku wskażników do struktur |
Autor: | Marhef [ 20 wrz 2019, o 12:55 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Bo w pierwszej wersji przy wywołaniu funkcji powinieneś podać jako argumenty tylko struktury a w drugiej podajesz dodatkowo elementy (chyba) jednej ze struktur. Pierwszy się nie kompiluje, bo funkcję masz zadeklarowaną jako język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Edit: miki53 napisał(a): Dlaczego ten kod działa skoro niema w drugiej części warunku wskażników do struktur Ponieważ wartości pól struktury podajesz jawnie jako argumenty. I to na tych zmiennych opiera się działanie. |
Autor: | miki53 [ 20 wrz 2019, o 13:30 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
jeśli ta funkcja odczytuje zmienne z struktury void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al ) ale muszę ją wywołać w ten sposób sterowanie_wyj (&datetime,&wyj_1); tu myślę o wywoływaniu jej z pliku main.c to jak wtedy ustawić czas włączania i wyłączania porów sterujących |
Autor: | Marhef [ 20 wrz 2019, o 13:37 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
miki53 napisał(a): ale jak wtedy ustawić czas włączania i wyłączania porów sterujących Ustawiając odpowiednie pola dla zmiennych wyj1, wyj2...Swoją drogą, dziwna ta struktura. Co oznaczają pola ON_WYJ, OFF_WYJ? Wiesz, że przy drugim sposobie nie musisz przekazywać do funkcji struktury wyj_x? I tak z niej nie korzystasz. Z przedstawionego fragmentu wynika, że w ogóle z tych struktur nie korzystasz. |
Autor: | miki53 [ 20 wrz 2019, o 13:52 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Właśnie tak podejrzewam że drugi kod działa nie jako struktura lecz jako funkcja z zmiennymi zawartymi w niej a nie w strukturze pola ON_WYJ pole OFF_WYJ oznaczają zmienne portów które mają być włączone lub wyłączone if ( (czas == alarm) && ( ON_WYJ == 1)) { PORTD &= ~(1<<PD5); } if ((czas == walarm) && ( OFF_WYJ == 1)) { PORTD |= (1<<PD5); } jeśli ON_WYJ = 1 to włącz port PD5 jeśli OFF_WYJ = 1 to wyłącz port PD5 |
Autor: | miki53 [ 20 wrz 2019, o 18:35 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Czy ta struktura jest dobrze napisana ? jeśli nie to jak ją poprawnie napisać |
Autor: | rudy.ini [ 20 wrz 2019, o 19:31 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
plik nagłówkowy: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i kod w pliku c: |
Autor: | miki53 [ 21 wrz 2019, o 14:21 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
jak ustawiać czasy włączania i wyłączania każdego portu niezależnie jak z tego wyjść void test(void) { //najpierw trzeba zainicjowac strukturke TWYJ_PORT init_port(&strTWYJ_PORT1,1,2,3,4,5,6,7,8); //a tak ja mozna wykorzystac sterowanie_wyj(&strDateTime, &strTWYJ_PORT1); } i doprowadzić do miejsca w którym mógłbym ustawiać godziny , minuty i porty które mają się włączyć tak jak było w tym fragmencie kodu sterowanie_wyj (&datetime,&wyj_1, 17,49,0,2, 17,49,30,2); w nim ustawiam dla wyjścia 1 godziny,minuty,sekundy,nr portu który ma się włączyć - po tej stronie czasy wyłączania portu proszę o cierpliwość chcę zrozumieć A widzicie że jestem zielony jak szczypiorek na wiosną |
Autor: | miki53 [ 21 wrz 2019, o 18:52 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Jak w tej strukturze byłoby rozwiązane ustawianie parametrów sterujących 8 portami ( jak je wpisywać ) ? Czy każdy port który chcemy ustawić musi mieć osobną funkcję ? |
Autor: | Wirnick [ 21 wrz 2019, o 20:15 ] |
Tytuł: | Re: Prośba o pomoc w zrozumoeniu działania struktury |
Tablice, struktury(rekordy), unie i pola bitowe to zdefiniowane pola pamięci mikroprocesora. Struktury można napełniać danymi lub je odczytywać - nic więcej. Odczytaną daną z tablicy, struktury, unii poprzez odpowiednią funkcję możesz przesłać na porty równoległe(np. LCD), szeregowe(RS232). Książka BB lub poradniki wiele by Ci wyjaśniły zagadnienie. |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |