ATNEL tech-forum
https://forum.atnel.pl/

Problem z dyrektywą kompilacji warunkowej. Proszę o pomoc
https://forum.atnel.pl/topic7016.html
Strona 1 z 1

Autor:  wat1970 [ 9 maja 2014, o 09:24 ]
Tytuł:  Problem z dyrektywą kompilacji warunkowej. Proszę o pomoc

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


Projekt ustawiony dla ATMEGA8, (w Miscellanous opcja do rozpoznawania procesora po nazwie wpisana zgodnie z bluebookiem )kompilator w Eclipse zgłasza błąd dla drugiego warunku czyli dla atmega328 . Komunikat błędu :

../main.c: In function 'main':
../main.c:81: error: 'EIMSK' undeclared (first use in this function)
../main.c:81: error: (Each undeclared identifier is reported only once
../main.c:81: error: for each function it appears in.)
../main.c:82: error: 'EICRA' undeclared (first use in this function)
make: *** [main.o] Error 1

Czy ktoś z Szanownych Forumowiczów byłby uprzejmy podpowiedzieć co może być przyczyną komunikatu o błędzie. Wygląda to tak jakby obie opcje były kompilowane choć warunek spełnia tylko jedna.

Autor:  karolek [ 9 maja 2014, o 10:13 ]
Tytuł:  Re: Problem z dyrektywą kompilacji warunkowej. Proszę o pomo

możesz użyc kompilacji warunkowej np 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.

Autor:  wat1970 [ 9 maja 2014, o 11:25 ]
Tytuł:  Re: Problem z dyrektywą kompilacji warunkowej. Proszę o pomo

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


Jeśli zamiast warunku dotyczącego atmegi328 zmienię zapis na negację !atmega8 to kompilator nie zgłasza wtedy błędów , czyli jeśli mamy w projekcie ustawioną atmegę 8 to drugi warunek nie jest kompilowany i to jest oczywista oczywistość
Nadal jednak nie wiem gdzie tkwi przyczyna błędu w zapisie pierwotnym czyli #if MCU == atmega328 .

Autor:  acid3 [ 9 maja 2014, o 11:40 ]
Tytuł:  Re: Problem z dyrektywą kompilacji warunkowej. Proszę o pomo

Jeśliby kolega wpisał

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


powinno zadziałać.

A czy mógłby kolega pokazać więcej kodu z
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: 5 minutach ]

Ja osobiście bardziej skłanałbym się do zapisu
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  wat1970 [ 9 maja 2014, o 13:05 ]
Tytuł:  Re: Problem z dyrektywą kompilacji warunkowej. Proszę o pomo

Dziękuję bardzo koledze acid3 za podanie alternatywy dla mojego problemu. Bo tak jak kolega podał kod to działa i mucha nie siada. Męczy mnie jednak nadal dlaczego podany przeze mnie zapis nie działa prawidłowo, wzorowałem się tutaj na zapisie Pana Mirka ze strony 137 z Bluebooka łącznie z ustawieniem MCU w Eclipsie C/C++ Build / Settings / AVR Compiler / Miscellanous jako -DMCU=$(AVRTARGETMCU) str 138, w świetle tego zapisu zmienna MCU powinna być teoretycznie rozpoznawana w procesie kompilacji tak jak np F_CPU bez podawania w #define.
Jedyne co mi przychodzi do głowy to to , że jednak te ustawienie w Eclipse (-DMCU=$(AVRTARGETMCU) zapodane w Bluebook-u na str 138 coś nie zatrybia u mienia :)

Autor:  acid3 [ 9 maja 2014, o 13:10 ]
Tytuł:  Re: Problem z dyrektywą kompilacji warunkowej. Proszę o pomo

Później poszukam, bo jakoś nie kojarzę tego z BB ... :) i zobaczę jak to wygląda...

Tak czy inaczej moim zdaniem lepiej jest opierać się na toolchainowych #define'ach bo nie powstaje wtedy bałagan i kilka wersji tego samego. W tym drugim zapisie wystarczy zmienić procka we właściwościach projektu i nic więcej nie trzeba pamiętać. :)

Autor:  Jachimo [ 14 wrz 2019, o 18:16 ]
Tytuł:  Re: Problem z dyrektywą kompilacji warunkowej. Proszę o pomo

Witam.
Miałem podobny problem ATmega328 ale po zastosowaniu "#ifdef __AVR_ATmega328__... #endif" ten niby błąd zniknął (kompilator nie sygnalizował błędu ale w edytorze i eksploratorze był błąd). Piszę niby błąd ponieważ plik *.hex po załadowaniu do procesora działał poprawnie.
Co więcej skompilowany kod programu zmniejszył się o 26 bajtów. Ciekaw jestem dlaczego.

Autor:  rskup [ 15 wrz 2019, o 17:30 ]
Tytuł:  Re: Problem z dyrektywą kompilacji warunkowej. Proszę o pomo

wat1970 napisał(a):
Dziękuję bardzo koledze acid3 za podanie alternatywy dla mojego problemu. Bo tak jak kolega podał kod to działa i mucha nie siada. Męczy mnie jednak nadal dlaczego podany przeze mnie zapis nie działa prawidłowo, wzorowałem się tutaj na zapisie Pana Mirka ze strony 137 z Bluebooka łącznie z ustawieniem MCU w Eclipsie C/C++ Build / Settings / AVR Compiler / Miscellanous jako -DMCU=$(AVRTARGETMCU) str 138, w świetle tego zapisu zmienna MCU powinna być teoretycznie rozpoznawana w procesie kompilacji tak jak np F_CPU bez podawania w #define.
Jedyne co mi przychodzi do głowy to to , że jednak te ustawienie w Eclipse (-DMCU=$(AVRTARGETMCU) zapodane w Bluebook-u na str 138 coś nie zatrybia u mienia

A zobacz jak masz w konsoli wypisywane w komendzie kompilowania?

--
Pozdrawiam,
Robert

Autor:  xentis [ 15 wrz 2019, o 17:35 ]
Tytuł:  Re: Problem z dyrektywą kompilacji warunkowej. Proszę o pomo

Koledzy, zwróciliście uwagę na daty postów? Szpadle połamiecie wykopując tak stare wątki... :lol:

Autor:  rskup [ 16 wrz 2019, o 12:13 ]
Tytuł:  Re: Problem z dyrektywą kompilacji warunkowej. Proszę o pomo

xentis napisał(a):
Koledzy, zwróciliście uwagę na daty postów? Szpadle połamiecie wykopując tak stare wątki... :lol:
No tak, dałem się zapędzić do kopania :(. No cóż, tak bywa jak się jest za dobrym i jak się widzi że ktoś kopie i się nie patrzy tylko łapie za szpadel :oops: ...

--
Pozdrawiam,
Robert

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/