Pagina 1 van 1

compiler directive issue

Geplaatst: vr jul 10, 2020 7:17 pm
door pascal
Aan de compiler (gcc-avr) geef ik het volgende mee -D MCU=atmega328p

In mijn code het volgende

Code: Selecteer alles

#if MCU == atmega328p
#warning "Configured for 328p"
#define BLAAT blahblah
#endif

#if MCU == atmega2560
#warning "Configured for 2560"
#define BLAAT blohbloh
#endif
Ik krijg steeds beide meldingen
en obviously een waarschuwwing dat BLAAT dubbel toegewezen is.
Begrijp niet waarom deze situaltie zo is.

heb het wel als volgt opgelost
-D MCU_atmega328p

Code: Selecteer alles

#ifdef MCU_atmega328p
#warning "Configured for 328p"
#define BLAAT blahblah
#endif

#ifdef MCU_tmega2560
#warning "Configured for 2560"
#define BLAAT blohbloh
#endif
Maar het blijft toch een beetje poep zo.

Re: compiler directive issue

Geplaatst: do jul 23, 2020 6:10 pm
door vi coactus
Fijn dat je wat allemaal doet, maar waarom gebruik je niet gewoon:

Code: Selecteer alles

-mmcu=
Plus, leer F_VAR of wat dan ook te gebruiken, zal me niets verbazen als MCU sowieso al gedefinieerd is.
+2: Niet van #elif gehoord?

Re: compiler directive issue

Geplaatst: do jul 30, 2020 10:57 pm
door pascal
-mmcu geeft de compiler aan voor welke cpu hij moet compileren, niet welke specifieke code er gekozen moet worden.
Embedded software is meer dan een andere CPU kiezen, ook je hardware is totaal anders.

if / endif if / endif en if else endif is werkelijk iets heel anders.

Re: compiler directive issue

Geplaatst: do jul 30, 2020 11:38 pm
door vi coactus
Nu doe je alsof ik nooit gcc-avr gebruikt heb..
Jij doet vast hoog intelligente dingen waar ik te dom voor ben.

Re: compiler directive issue

Geplaatst: vr jul 31, 2020 11:20 pm
door pascal
het gaat niet enkel om gcc-avr, in fact ik gebruik zelden avr

Re: compiler directive issue

Geplaatst: za aug 01, 2020 5:26 pm
door vi coactus
In dit geval gaat het er gewoon om wat je wilt bereiken.
Er bestaan namelijk onder andere de volgende variabelen die de compiler meegeeft:

Code: Selecteer alles

#define __AVR_ATmega8__ 1
#define __AVR_DEVICE_NAME__ atmega8
Dus een #ifdef __AVR_ATmega8__ etc is voldoende als je gewoon wilt weten welke processor je gebruikt.
Waar het bij jou zeer waarschijnlijk misgaat is in de preprocessor.
Voeg -Wundef toe aan je compile ding. Je kunt ook nog met -dM kijken welke variabelen er zijn, allicht wat nuttigs waardoor je niet meer hoeft te kijken naar welke precieze cpu je gebruikt, maar naar de functies die je nodig hebt.