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



Teraz jest 28 maja 2026, o 00:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 19 sty 2013, o 13:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Hej, jako, że nie lubię mieć jakichkolwiek błędów, czy to podkreślonych na czerwono, czy też na żółto... To zadaję to pytanko :)

Jak zrobić, żeby się nie powtarzały definicje w kilku plikach .h? Chodzi mi o Mirkowe przykłady z płytki. Otwieram powiedzmy taki gotowy projekt or RC5 (nr. 11 - RC5_decode). Robię swoje ustawienia portów lcd, ustawiam taktowanie procesora i sam procek przestawiam na m16.

Podczas kompilacji wyskakują mi błędy:
Kod:
In file included from ../main.c:24:0:
../I2C_SOFT/i2c_soft.h:18:0: warning: "PORT" redefined [enabled by default]
../LCD/lcd44780.h:124:0: note: this is the location of the previous definition
../I2C_SOFT/i2c_soft.h:21:0: warning: "PIN" redefined [enabled by default]
../LCD/lcd44780.h:127:0: note: this is the location of the previous definition
../I2C_SOFT/i2c_soft.h:24:0: warning: "DDR" redefined [enabled by default]
../LCD/lcd44780.h:130:0: note: this is the location of the previous definition


wiem o co chodzi, po prostu tutaj i tutaj są te same #define, ale nie mogę tego po prostu zakomentować, bo wtedy kompilator nie wie o co chodzi w kodzie.

A w obu plikach jest prawie to samo:
lcd44780.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2013, o 13:55 

Pomógł: 0

Mirek w swoich video poradnikach mówił o pliku common.h, jak również w książce też o tym jest. Przenosisz tam wszystkie powtarzające się deklaracje preprocesora.....


Autor postu otrzymał pochwałę


Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2013, o 14:07 
Offline
Użytkownik

Dołączył(a): 27 gru 2012
Posty: 159
Pomógł: 3

Zawsze można takie błędy zawrzeć w dyrektywie #ifndef #endif
czyli np:

w bibliotece (np do LCD)
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 pliku common.h
robisz niezależną od niej definicje

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


W ten sposób nie będziesz musiał nic usuwać z kodu biblioteki


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2013, o 14:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Dzięki wielkie za szybką odpowiedź :)

Rzeczywiście była mowa o common.h, ale gdzieś mi umknęła informacja że w takim przypadku można ją wykorzystać.
W plikach lcd44780.h i i2c_soft.h powyższe linie poprzedziłem //, czyli już nie są brane pod uwagę, a common.h wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


tylko jeszcze miałem przez chwilę problem. Otóż w/w pliki są w odpowiednich folderach, a plik common.h jest katalog wyżej no i nie był widziany.
Czy tak się robi inkludowanie plików znajdujących się katalog wyżej?
#include "../common.h"
działa, ale czy na pewno tak jest dobrze? (tak się to robi np. w php)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sty 2013, o 14:45 

Pomógł: 0

Dokładnie tak.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2013, o 14:00 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Ok musze odkopać ten temat bo mam podobny problem przy RC5. Kompilator burzy się że w plikach IR_Decode i LCD znajduje się podwójna definicja makr:

Kod:
../IR_DECODE/ir_decode.h:33:0: warning: "PORT" redefined [enabled by default]
../LCD/lcd44780.h:126:0: note: this is the location of the previous definition
../IR_DECODE/ir_decode.h:36:0: warning: "PIN" redefined [enabled by default]
../LCD/lcd44780.h:129:0: note: this is the location of the previous definition
../IR_DECODE/ir_decode.h:39:0: warning: "DDR" redefined [enabled by default]
../LCD/lcd44780.h:132:0: note: this is the location of the previous definition


W pliku LCD wygląda to tak:

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


Natomiast w IR_DECODE:

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


Teraz jak sobie z tym poradzić? Bo szczerze próbowałem na różne sposoby używając #ifdef ale jakoś kiepsko :/


Ok poradziłem sobie tworząc wspólny plik nagłówkowy ;)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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