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ß
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.
Nachtrag: ich meinte natürlich das MCU-Typ-Define, also:
1 | #if defined(__AVR_ATmega328P__)
|
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ß
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 |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.