Forum: Compiler & IDEs defines bedingt compilieren für m328 bringt Compilerfehler


von Christian S. (roehrenvorheizer)


Angehängte Dateien:

Lesenswert?

Hallo,

mein Projekt ist gewachsen und soll in einem Mega328 ablaufen.
Damit es auf verschiedenen Prozessoren laufen kann, habe ich in der 
header-Datei die Fallunterscheidungen für spezielle Registernamen 
eingeführt, damit abhängig vom eingestellten Prozessortyp der Compiler 
die richtigen Definitionen heraus sucht. Das klappte bisher mit Mega8, 
Mega48, Mega88 und Mega168 ganz gut. Kann mir bitte jemand mit Tipps 
weiter helfen, weshalb es mit dem Mega328 nicht so funktioniert? Es 
erscheinen permanent Comilerfehler, da nicht der richtige Prozessor-Typ 
ausgewählt ist. Unterscheidliche Schreibweisen helfen nicht weiter. 
Codeauszug im Anhang.

Compilerfehler:
Build started 6.3.2015 at 06:41:27
avr-gcc  -mmcu=atmega328p -Wall -gdwarf-2 -std=gnu99 
-DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct 
-fshort-enums -MD -MP -MT i2c_to_go6.o -MF dep/i2c_to_go6.o.d  -c 
../i2c_to_go6.c
../i2c_to_go6.c: In function 'main':
../i2c_to_go6.c:417: warning: implicit declaration of function 
'RFM12BP_INT_ENABLE'
../i2c_to_go6.c:419: error: 'INT0_CONTROL' undeclared (first use in this 
function)
../i2c_to_go6.c:419: error: (Each undeclared identifier is reported only 
once
../i2c_to_go6.c:419: error: for each function it appears in.)
../i2c_to_go6.c:419: error: 'INT0_FALLING_EDGE' undeclared (first use in 
this function)
../i2c_to_go6.c:422: warning: implicit declaration of function 
'RFM12BP_INT1_ENABLE'
../i2c_to_go6.c:423: error: 'INT1_RISING_EDGE' undeclared (first use in 
this function)
../i2c_to_go6.c: At top level:
../i2c_to_go6.c:757: warning: 'RFM12BP_INT' appears to be a misspelled 
signal handler
../i2c_to_go6.c:790: warning: 'RFM12BP_INT1' appears to be a misspelled 
signal handler


mit freundlichem Gruß

von Linksammler (Gast)


Lesenswert?

Das define heißt anders, evtl mit "P" statt "p"?

mach im Header aus den Einzel-Ifs eine if - else if  - else Serie mit 
Fehlermeldung/Abbruch im letzten else, dann findet man sowas leichter.

von Linksammler (Gast)


Lesenswert?

Nachtrag: ich meinte natürlich das MCU-Typ-Define, also:
1
#if defined(__AVR_ATmega328P__)

von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

das große P war es. Das habe ich nicht probiert bei den verschiedenen 
Schreibweisen.

Danke. Danke!

Die Konstruktion mit "Serie mit Fehlermeldung/Abbruch" werde ich 
demnächst mal probieren.

AVR Memory Usage
----------------
Device: atmega328p

Program:    4386 bytes (13.4% Full)
(.text + .data + .bootloader)

Data:        135 bytes (6.6% Full)
(.data + .bss + .noinit)

EEPROM:      130 bytes (12.7% Full)
(.eeprom)


Build succeeded with 12 Warnings...


Gruß

von Konrad S. (maybee)


Lesenswert?

Wie findet man das passende Macro? Hier ein Beispiel:

Beitrag "Re: IRMP - Infrared Multi Protocol Decoder"

Mist, auf dem Tablet geht der Link nicht richtig. Also dann eben so:
1
echo | avr-gcc -E -dDM - -mmcu=atxmega128a1 | grep -i xmega
2
#define __AVR_XMEGA__ 1
3
#define __AVR_ATxmega128A1__ 1

von Christian S. (roehrenvorheizer)


Lesenswert?

bei mir geht's in der Eingabeaufforderung:


C:\Dokumente und Einstellungen\...>echo | avr-gcc -E -dDM - 
-mmcu=atxmega128a
1 | grep -i xmega
#define _AVR_XMEGA_ 1
#define _AVR_ATxmega128A1_ 1


C:\Dokumente und Einstellungen\...>echo | avr-gcc -E -dDM - 
-mmcu=atmega328 | grep -i mega328
#define _AVR_ATmega328_ 1

C:\Dokumente und Einstellungen\...>

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.