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



Teraz jest 19 sty 2025, o 07:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 31 lip 2012, o 21:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

Dopiero niedawno przesiadłem się na eclipse, więc tak naprawdę dopiero co go poznaję. Tworząc projekt trafiłem na pewien problem z dołączaniem plików. Po krótce, dla przejrzystości zrobiłem podział na kilka modułów:

Plik główny main.c (załączam jedynie istotne fragmenty dla nakreślenia problemu)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Plik main.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 menu.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 menu.c

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 problemem jest to, że kompilator krzyczy o podwójną deklarację:

Kod:
./menu.o:(.bss+0x0): multiple definition of `idx'
./main.o:(.bss+0x0): first defined here
./menu.o:(.data+0x0): multiple definition of `epods'
./main.o:(.data+0x0): first defined here
make: *** [Duzy_pokoj_panel_v2.elf] Error 1


Nie wiem w jakich plikach zrobić odpowiednie odwołania do innych używanych plików.
Jak widać w bibliotece "C" potrzebuję operować na zmiennych z bibloteki "B", a plik główny to "A".

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


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

to zapewne otrzymam wartość 26, a nie 64? Jest na to myk? czy jedynie konstrukcja tablicy i inkrementacja indeksu?

_________________
eDiyCraft.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2012, o 22:17 
Offline
Moderator
Avatar użytkownika

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

Pierwszy POWAŻNY błąd to to co zrobiłeś w pliku main.h :( TAK się nie robi - umieściłeś definicję struktury w pliku *.h .... BAAARDZO ŹLE :( .... jak już to umieść tam definicję typu struktury o 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 potem w pliku 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.


------------------------ [ Dodano po: 2 minutach ]

Kolejne poważne BABOLE :(

widzę, że tego w ogóle nie rozumiesz jakby ..... Otóż definicje zmiennych też umieszczasz w pliku *.h ..... BAAARDZO ŹLE

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


nie może być w *.h ------> MUSI być w *.c !!!

------------------------ [ Dodano po: 4 minutach ]

savian86 napisał(a):
i jak wykonam w programie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to zapewne otrzymam wartość 26, a nie 64? Jest na to myk? czy jedynie konstrukcja tablicy i inkrementacja indeksu?


ja bym dał tablicę a indeks można robić na dwa sposoby albo za pomocą zmiennej albo za pomocą wskaźnika - jak wygodniej.

_________________
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: 1 sie 2012, o 06:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

Dzięki za rozjaśnienie. Przyznam, że z odpowiednim podziałem co w którym pliku to nie łapałem blusa. Długo pisałem "ciurkiem", nie rozdzielając tych elementów jak należy. W avrstudio dodawanie komponentów też może być trochę inaczej realizowane i to łyknie, dlatego nie przykładałem do tego większej wagi. Po prostu mimo że pisanie właściwego programu jakoś tam zawsze szło, to muszę więcej poćwiczyć aby było to robione zgodnie ze sztuką ;)

Jeszcze drobna sprawa, jak piszę kod w poście w syntax to jak wstawić tabulację w oknie edytora :D ?

_________________
eDiyCraft.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2012, o 07:00 
Offline
Moderator
Avatar użytkownika

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

savian86 napisał(a):
Dzięki za rozjaśnienie. Przyznam, że z odpowiednim podziałem co w którym pliku to nie łapałem blusa. Długo pisałem "ciurkiem", nie rozdzielając tych elementów jak należy. W avrstudio dodawanie komponentów też może być trochę inaczej realizowane i to łyknie, dlatego nie przykładałem do tego większej wagi. Po prostu mimo że pisanie właściwego programu jakoś tam zawsze szło, to muszę więcej poćwiczyć aby było to robione zgodnie ze sztuką ;)


Poczekaj poczekaj, bo ja teraz dopiero zauważyłem, że ty to o czym ja tu piszę kojarzysz z różnicami pomiędzy środowiskami..... O nie nie panie kolego. Jeśli tak będziesz myślał to w przyszłości wkopiesz się w kolejne problemy.

MUSISZ zapamiętać, że te zasady o których pisałem wyżej i w książce nie dotyczą ŻADNEGO środowiska a TYLKO i WYŁĄCZNIE języka C.

To że w AVR Studio coś ci się tam kompilowało bez warningów czy błędów a tu nie to całkiem inna sprawa. Np w AVR Studio 4.xx pewnie (jak spora ilość początkujących) nawet nie zwracałeś uwagi na warningi, które przeleciały na dole w konsoli na górę okienka. Poza tym tam inaczej dodaje się same pliki do projektu w takim drzewku i można taki misz-masz narobić że jak poinkludujesz pliki h jako źródłowe w nieodpowiedni sposób to AVR Studio nawet nie piśnie - ale to nie oznacza że dobrze zrobiłeś jeśli chodzi o C

Dlatego mam nadzieję, że tym bardziej doceniasz zalety Eclipsa teraz


savian86 napisał(a):
Jeszcze drobna sprawa, jak piszę kod w poście w syntax to jak wstawić tabulację w oknie edytora :D ?


Sam nie wiem ;) ja zawsze klikam i męczę spację ... A najlepiej to wkleić kod już z wcięciami i dać w syntax, wtedy tabulatory same się pojawią.

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

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

mirekk36 napisał(a):
Poza tym tam inaczej dodaje się same pliki do projektu w takim drzewku i można taki misz-masz narobić że jak poinkludujesz pliki h jako źródłowe w nieodpowiedni sposób to AVR Studio nawet nie piśnie - ale to nie oznacza że dobrze zrobiłeś jeśli chodzi o C


Miałem to wyczajone, że AVR Studio to do siebie ma, stąd moje dzisiejsze problemy, bo po co zawracać sobie głowę czymś co działa :) .

mirekk36 napisał(a):
MUSISZ zapamiętać, że te zasady o których pisałem wyżej i w książce nie dotyczą ŻADNEGO środowiska a TYLKO i WYŁĄCZNIE języka C.


Byłem tego świadomy, ale ponownie nawiązuję do powyższego, skoro działa to nie ma problemu.

Ale czasy AVR Studio minęły, nastały czasy Eclipse, więc że tak powiem Bascomowe bajery w postaci, że dane narzędzie zrobi coś za nas idą w odstawkę, trzeba samemu ruszyć mózgownicą ;)


Wracając do sedna problemu, na szybko poprzerzucałem jak radziłeś i nie pomogło.

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


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


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



w pliku menu.c instrukcje nie widzą struktur zadeklarowanych w main.c
Po pracy na spokojnie nad tym posiedzę i powalczę. Ale chętnie przyjmę cenną rade ;)

_________________
eDiyCraft.blogspot.com



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

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

No cenna rada jest taka ;) że:

1. napisałeś że nie pomogło, wrzuciłeś kod ale ja nie wiem co dokładnie się dzieje - wypadałoby podać teraz konkretne komunikaty błędów ;) bo tak to wiesz

ale ok tak na szybko z tego co widzę - niech będzie porada ;) cosik mi się wydaje, że nie doczytałeś Pan w książce o tym czym różni się DEKLARACJA od DEFINICJI zmiennej hmmmm? Bo tutaj widzę że to strasznie pokutuje i tak czułem wcześniej już, że jak przerobisz to to wylezie jak szydło z worka ;) ....

A w książce z uporem maniaka co chwilę przypominam o tym aby KONICZNIE ZROZUMIEĆ różnice pomiędzy deklaracjami a definicjami zarówno zmiennych jak i funkcji w C bo to PODSTAWA ;)

Spróbuj na razie na gorąco sam sobie i może tu w tym poście odpowiedzieć na to pytanie -

"jaka jest różnica pomiędzy deklaracją a definicją zmiennych"

OK ? (możesz zaglądać do ściągawki czyli książki)

Dzięki temu może się okazać że sam rozwiążesz ten problem albo wpadniesz jeszcze na kolejne pomysły. Ale jeśli nie to pomożemy dalej - spokojnie ;)

------------------------ [ Dodano po: 3 minutach ]

savian86 napisał(a):
Ale czasy AVR Studio minęły, nastały czasy Eclipse,


No może nie tak do końca bo przecież pojawiły się nowe wersje AVR Studio 5 i 6 ale to z kolei tak opasłe i chore kobyły, że na prawdę ich nie polecam bo jeszcze na dodatek przysparzają wielu innych problemów początkującym poza ociężałością, o których nawet nie będę tu teraz pisał OK?


savian86 napisał(a):
więc że tak powiem Bascomowe bajery w postaci, że dane narzędzie zrobi coś za nas idą w odstawkę, trzeba samemu ruszyć mózgownicą ;)


Noooo to podstawa, ale zobaczysz niedługo ile korzyści przyniesie to ruszanie mózgownicą ;) za kilka miesięcy jak dalej będziesz robił w C i przypomnisz sobie niektóre koszmarki czyli ograniczenia Bascoma to ci dreszcze przejdą po plecach. Nie oznacza to że Bascom jest zły - ale że ma swoje ograniczenia to chyba zrozumiał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: 1 sie 2012, o 19:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

Fakt, nawet nie napisałem jakie błędy są generowane ;) pisałem tamtego posta w pośpiechu, bo zbierałem się w teren.

Różnice między deklaracją a definicją znam, nawet niedawno wróciłem do tego rozdziału w książce. Jak się okazało, w teorii znałem, ale w praktyce, gdzie w jakim pliku umieścić to już nie bardzo.

Na spokojnie postudiowałem trochę i udało mi się "zaskoczyć" o co w tym chodzi.

Deklaracja zwykłej zmiennej, lub funkcji (plik.h):
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Definicja tego co wyżej (plik.c):
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Prościzna, zrozumiałe i logiczne. Ale jak to samo zrobić ze strukturą, typem wyliczeniowym enum ? Na tym poległem, zabrakło mi wiedzy w stylu "jak to się pisze w C ?"
Poczytałem i się dowiedziałem

Teraz mam w ten sposób: plik main.h

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


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


W każdym innym pliku jeśli potrzebuję operować na tej strukturze dołączam tylko #include "main.h"

Filozofia dołączania plików przez AVR Studio zrobiła mi pranie mózgu i byłem opóźniony w rozwoju :)

Cytuj:
Ale czasy AVR Studio minęły,


i tu w domyśle niewidzialną czcionką jest dopisek DLA MNIE 8-) Teraz tak sobie myślę, że nieźle się katowałem wcześniej. Żeby napisać i wgrać program to potrzebowałem mieć odpalone cztery programy :D Notepad++ bo w tym dopiero dało się pisać, AVR Studio do wciskania F7 ;) avrdude, oraz nakładkę graficzną na niego. Istne wariactwo, nieraz wgrywałem program zanim się skompilował :D

Dzięki za nakierowanie mnie w czym szukać

_________________
eDiyCraft.blogspot.com



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

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

No ale udało ci się w końcu wszystko ogarnąć ? te struktury i enum ? ;) bo znowu nie napisałeś tego ;)

Wyżej dobrze zrobiłeś ja też zwykle za pomocą typedef tworzę typ strukturalny w pliku *.h, potem tworzę zmienną tego typu w *.c i ew exportuję tę zmienną znowu w pliku *.h, który potem będzie dołączany do innych plików źródłowych

dokładnie tak samo z enum

czyli jesteś na dobrej drodze albo już sobie poradził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: 1 sie 2012, o 19:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

:D Tak, ładnie się kompiluje.

_________________
eDiyCraft.blogspot.com



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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