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



Teraz jest 6 sie 2026, o 20:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 10 mar 2016, o 16:56 
Offline
Użytkownik

Dołączył(a): 02 sie 2012
Posty: 43
Lokalizacja: Jabłonna
Pomógł: 0

witam.
Zrobiłem sobie urządzenie do podglądu działań pieca CO. Piec retortowy opalany miałem ,ale to mniej istotne.
Urządzenie ma mieć możliwość współpracy z regulatorem pokojowym, liczyć ilość ruchów retory (szuflady ), mierzyć i wysyłać temperatury w różnych punktach instalacji.
To tytułem wstępu.

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


i tu zaczyna się problem, bo
w main korzystam między innymi z kilku zmiennych i funkcji
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Program tych samych zmiennych musi korzystać w bibliotece ATCOMMANDS.
Zmienne na początku były zdefiniowane w main ( jak jeszcze nie korzystałem z ATCOMMANDS), ale potem okazało się że muszą być zdefiniowane gdzieś globalnie aby i w ATCOMMANDS były dostępne. Utowrzyłem zatem plik common.h i tam je wrzuciłem, po czym zainkludowałem je do main.c i atcommands.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i tu pojawia się problem.
bo przy kompilacji mam taką listę błędów
Cytuj:
make all
Building file: ../ATCOMMANDS/atcommands.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega88 -DF_CPU=11059200UL -MMD -MP -MF"ATCOMMANDS/atcommands.d" -MT"ATCOMMANDS/atcommands.d" -c -o "ATCOMMANDS/atcommands.o" "../ATCOMMANDS/atcommands.c"
Finished building: ../ATCOMMANDS/atcommands.c

Building file: ../1Wire/crc8.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega88 -DF_CPU=11059200UL -MMD -MP -MF"1Wire/crc8.d" -MT"1Wire/crc8.d" -c -o "1Wire/crc8.o" "../1Wire/crc8.c"
Finished building: ../1Wire/crc8.c

Building file: ../1Wire/ds18x20.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega88 -DF_CPU=11059200UL -MMD -MP -MF"1Wire/ds18x20.d" -MT"1Wire/ds18x20.d" -c -o "1Wire/ds18x20.o" "../1Wire/ds18x20.c"
Finished building: ../1Wire/ds18x20.c

Building file: ../1Wire/onewire.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega88 -DF_CPU=11059200UL -MMD -MP -MF"1Wire/onewire.d" -MT"1Wire/onewire.d" -c -o "1Wire/onewire.o" "../1Wire/onewire.c"
Finished building: ../1Wire/onewire.c

Building file: ../common.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega88 -DF_CPU=11059200UL -MMD -MP -MF"common.d" -MT"common.d" -c -o "common.o" "../common.c"
Finished building: ../common.c

../main.c:18:19: error: redefinition of ‘tempPeriodTime’
volatile uint16_t tempPeriodTime = 60; //liczba sekund pomiedzy odczytami temperatury
^
In file included from ../main.c:15:0:
../common.h:15:19: note: previous definition of ‘tempPeriodTime’ was here
volatile uint16_t tempPeriodTime = 60; //liczba sekund pomiedzy odczytami temperatury
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=atmega88 -DF_CPU=11059200UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
^
../main.c:19:19: error: redefinition of ‘totalConsumption’
volatile uint16_t totalConsumption = 0;
^
In file included from ../main.c:15:0:
../common.h:16:19: note: previous definition of ‘totalConsumption’ was here
subdir.mk:21: polecenia dla obiektu 'main.o' nie powiodły się
volatile uint16_t totalConsumption = 0;
^
make: *** [main.o] Błąd 1


jak zorganizować projekt aby było przejrzyście i zgodnie ze sztuką ?



Pozdr



Ostatnio edytowano 10 mar 2016, o 17:36 przez gaza, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2016, o 17:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 kwi 2013
Posty: 257
Lokalizacja: 3miasto
Pomógł: 5

gaza napisał(a):
jak zorganizować projekt aby było przejrzyście i zgodnie ze sztuką ?


Zacznij może od poprawnego wstawienia kodu na forum aby było przejrzyście i zgodnie ze sztuką ;)

_________________
https://www.facebook.com/jacekplichtaphotography/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2016, o 17:22 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3230
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

gaza napisał(a):
PS. dlaczego po zmianie znaczników z code na syntax zginęły wartości includów ?


Bo źle wstawiłeś kod ;-)

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2016, o 17:37 
Offline
Użytkownik

Dołączył(a): 02 sie 2012
Posty: 43
Lokalizacja: Jabłonna
Pomógł: 0

poprawione



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2016, o 17:48 
Offline
Moderator
Avatar użytkownika

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

gaza napisał(a):
bo przy kompilacji mam taką listę błędów

A czytasz ty chociaż po kolei te błędy co ci się pokazują ? Bo coś mi się wydaje, że nie za bardzo - bo nawet gdybyś chciał powiedzieć, że nie znasz angielskiego to wystarczyłoby użyć google translate .... a błędy masz podane jak na talerzu, proszę pierwszy:

Cytuj:
../main.c:18:19: error: redefinition of ‘tempPeriodTime’


co to znaczy ? .... no że w pliku main.c masz powtórnie zdefiniowaną zmienną o podanej tu nazwie. Żeby tego było mało w kolejnych linijkach kompilator cię informuje DOKŁADNIE,

Cytuj:
In file included from ../main.c:15:0:
../common.h:15:19: note: previous definition of ‘tempPeriodTime’ was here
volatile uint16_t tempPeriodTime = 60;


gdzie ją masz wcześniej zdefiniowaną czyli w pliku common.h ... no to powiedz sam - czego więcej oczekiwać ? Skoro widać, że zdublowałeś zmienne ?

_________________
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: 10 mar 2016, o 18:02 
Offline
Użytkownik

Dołączył(a): 02 sie 2012
Posty: 43
Lokalizacja: Jabłonna
Pomógł: 0

rzeczywiście przeoczenie, bo ten kod był dzisiaj maglowany kilka razy.
w main były jeszcze raz te definicje, zakomentowałem i teraz mam inne błędy
Cytuj:
17:53:54 **** Incremental Build of configuration Release for project usart ****
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=atmega88 -DF_CPU=11059200UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
Finished building: ../main.c

Building target: z_uart.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,z_uart.map -mmcu=atmega88 -o "z_uart.elf" ./MKUART/mkuart.o ./ATCOMMANDS/atcommands.o ./1Wire/crc8.o ./1Wire/ds18x20.o ./1Wire/onewire.o ./common.o ./main.o
./main.o:(.bss.totalConsumption+0x0): multiple definition of `totalConsumption'
makefile:53: polecenia dla obiektu 'z_uart.elf' nie powiodły się
./ATCOMMANDS/atcommands.o:(.bss.totalConsumption+0x0): first defined here
./main.o:(.data.currentHeatState+0x0): multiple definition of `currentHeatState'
./ATCOMMANDS/atcommands.o:(.data.currentHeatState+0x0): first defined here
./main.o:(.data.previousHeatState+0x0): multiple definition of `previousHeatState'
./ATCOMMANDS/atcommands.o:(.data.previousHeatState+0x0): first defined here
./main.o:(.data.tempPeriodTime+0x0): multiple definition of `tempPeriodTime'
./ATCOMMANDS/atcommands.o:(.data.tempPeriodTime+0x0): first defined here
collect2: error: ld returned 1 exit status
make: *** [z_uart.elf] Błąd 1

17:53:55 Build Finished (took 508ms)


Jak usunę include z common.h z pliku main.c to mam tak
Cytuj:
17:57:13 **** Incremental Build of configuration Release for project usart ****
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=atmega88 -DF_CPU=11059200UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
../main.c: In function ‘main’:
../main.c:166:25: error: ‘totalConsumption’ undeclared (first use in this function)
sendTotalConsumption(totalConsumption);
^
../main.c:166:25: note: each undeclared identifier is reported only once for each function it appears in
subdir.mk:21: polecenia dla obiektu 'main.o' nie powiodły się
../main.c:195:11: error: ‘currentHeatState’ undeclared (first use in this function)
switch (currentHeatState) {
^
../main.c:196:8: error: ‘PERMANENT’ undeclared (first use in this function)
case PERMANENT :
^
../main.c:197:27: error: ‘previousHeatState’ undeclared (first use in this function)
if(currentHeatState != previousHeatState) {
^
../main.c:206:8: error: ‘VARY’ undeclared (first use in this function)
case VARY :
^
../main.c:217:24: error: ‘OFF’ undeclared (first use in this function)
currentHeatState = OFF;
^
../main.c:239:18: error: ‘tempPeriodTime’ undeclared (first use in this function)
if (seconds % tempPeriodTime == 0)
^
make: *** [main.o] Błąd 1

17:57:13 Build Finished (took 205ms)


czyli common musi byc załączony w main.c ,ale wtedy mam info, że multiple definition



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2016, o 18:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Jak się napisze do ogółu to nikt nie przeczyta, jak do konkretnej osoby ( może inni zobaczą ) to troszkę niesmacznie brzmi, ale " my tu staramy się pomóc w oparciu o jakieś podstawy programowe a nie raporty co jest źle - nie da się wróżyć"
gaza napisał(a):
czyli common musi byc załączony

Nie wiadomo co tam masz, ale może do tych zmiennych które mają też być w main.c dopisz extern.
Jeśli nie obawiasz się plagiatu ;) ani tego że ktoś Ci to podprowadzi to zamieść cały kod; może ktoś z nudów doprowadzi to do "kompilowalności"

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2016, o 20:39 
Offline
Użytkownik

Dołączył(a): 02 sie 2012
Posty: 43
Lokalizacja: Jabłonna
Pomógł: 0

plagiatu się nie obawiam, a jedynie może trochę wstyd to pokazywać :)

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


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


i common.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 na koniec dwie funkcje z atcommands
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie załączam całego kodu atcommands.c bo to nie open-source :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2016, o 21:37 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Jak masz w błędach napisane 'undeclared' to znaczy, że program ich nie widzi, albo podałeś złą ścieżkę dostępu do pliku .h,
albo dopisz extern przed zmienną. Przed zmiennymi typu "enum" też.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2016, o 22:06 
Offline
Użytkownik

Dołączył(a): 02 sie 2012
Posty: 43
Lokalizacja: Jabłonna
Pomógł: 0

jak mawiał mój dobry nauczyciel od matematyki ze szkoły podstawoej " umiesz liczyć .... "

A tak poważnie , to zainspirował mnie ten post http://forum.atnel.pl/topic14683.html
i wypowiedz Mirka
Cytuj:
Bo to są DEKLARACJE zmiennych

zaś w pliku d_led.c masz bez extern i to są DEFINICJE tych zmiennych

nie zwróciłeś uwagi w Bluebooku na to jak naciskam mocno na to aby czytelnik zrozumiał czym różni się DEKLARACJA od DEFINICJI ? .... brak zrozumienia tego zagadnienia będzie powodował, że wciąż będzie się miało problemy ze zrozumieniem różnych części kodu w C


nie musiałem robić extern
Wystarczyło ,ze w common.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Kompilacja przeszła bez błędów
Jutro wgram hex-a i zobaczę jak działa

Dzięki za poświęcony czas i pomoc

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2016, o 22:45 
Offline
Moderator
Avatar użytkownika

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

gaza napisał(a):
nie musiałem robić extern
Wystarczyło ,ze w common.h


Czyli zainspirowało ciebie to co pisałem (podałeś cytat) a zrobiłeś CAŁKOWICIE ODWROTNIE czyli tragicznie :( bo zrobiłeś definicje zmiennych w pliku *.h

uint16_t tempPeriodTime; //liczba sekund pomiedzy odczytami temperatury
uint16_t totalConsumption;

i w cytacie jak widzisz piszę że DEFINICJE mają być w *.c

Proszę poczytaj czym różni się DEFINICJA i DEKLARACJA bo brniesz w ślepy zaułek a to że teraz ci się dobrze skompilowało wcale nie oznacza że jest dobrze zrobione i że czkawką ci nie zacznie się niedługo odbijać

czyli to czego się NIGDY nie robi w C i od czego będziesz miał w dalszych swoich losach same problemy z działaniem różnych swoich projektów i językiem C jako takim ponieważ ..... ponieważ nadal nie rozumiesz (z tego właśnie widać) czym różni się DEFINICJA od DEKLARACJI.

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

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