Seite 1 von 1

Gelöst: gcc-avr 4.5.3: mmc.c:52:3: error: ‘SPCR0’ undeclared

Verfasst: 29.01.2012, 16:58:10
von HoWei
Hi,
ich bastle mal wieder (nach ca. 2 Jahren) am etwas älteren AVR-Webserver (mit Realtek-Karte) rum.
Source: V1.40
ETH: Realtek8019

Ich meine mich zu erinneren das ich mit früheren gcc-avr Versionen die Quellen kompilieren konnte !
Jetzt, mit der Version gcc-avr 4.5.3 kommt folgende Fehlermeldung:

$make clean
$make all
set -e; avr-gcc -MM -mmcu=atmega644 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=sendmail.lst -std=gnu99
...
mmc.c: In function ‘mmc_init’:
mmc.c:52:3: error: ‘SPCR0’ undeclared (first use in this function)
mmc.c:52:3: note: each undeclared identifier is reported only once for each function it appears in
mmc.c:52:14: error: ‘SPE0’ undeclared (first use in this function)
mmc.c:52:23: error: ‘MSTR0’ undeclared (first use in this function)
mmc.c:52:33: error: ‘SPR00’ undeclared (first use in this function)
mmc.c:52:43: error: ‘SPR01’ undeclared (first use in this function)
mmc.c:53:3: error: ‘SPSR0’ undeclared (first use in this function)
mmc.c:53:14: error: ‘SPI2X0’ undeclared (first use in this function)
mmc.c: In function ‘Read_Byte_MMC’:
mmc.c:138:2: error: ‘SPDR0’ undeclared (first use in this function)
mmc.c:139:10: error: ‘SPSR0’ undeclared (first use in this function)
mmc.c:139:21: error: ‘SPIF0’ undeclared (first use in this function)
mmc.c: In function ‘Write_Byte_MMC’:
mmc.c:167:2: error: ‘SPDR0’ undeclared (first use in this function)
mmc.c:168:10: error: ‘SPSR0’ undeclared (first use in this function)
mmc.c:168:21: error: ‘SPIF0’ undeclared (first use in this function)
make: *** [mmc.o] Fehler 1


Liegts an der neuen Compiler Version? Oder was läuft hier falsch ?
Hat jemand eine Idee ?

Danke für eure HIlfe !

Ho

Re: gcc-avr 4.5.3: mmc.c:52:3: error: ‘SPCR0’ undeclared

Verfasst: 29.01.2012, 17:24:37
von HoWei
Hallo,
noch ein Nachtrag:
Das compilieren ist erfolgreich für einen atmega128 !

makefile:
# MCU name
MCU = atmega128
#MCU = atmega32
#MCU = atmega644

Das Problem mit dem ATMEGA644 scheint daran zu liegen, dass für einen ATMega644 in "mmc.h" Zeile 46, folgendes nicht richtig erkannt wird:
#if defined (__AVR_ATmega644__)
#define SPI_DI 6 //Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist
#define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist
#define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
#define MMC_Chip_Select 3 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist
#define SPI_SS 4 //Nicht Benutz muß aber definiert werden
#define SPCR SPCR0
#define SPE SPE0
#define MSTR MSTR0
#define SPSR SPSR0
#define SPDR SPDR0
#define SPIF SPIF0
#define SPR0 SPR00
#define SPR1 SPR01
#define SPI2X SPI2X0
#endif

Aber warum ist "__AVR_ATmega644__" nicht auf "true", wenn im makefile das richtige Target gesetzt ist ?

Hat jemand eine Idee ?

[gelöst]Re: gcc-avr 4.5.3: mmc.c:52:3: error: ‘SPCR0’ undecl

Verfasst: 29.01.2012, 17:42:22
von HoWei
Hi,
Problem gefunden:

Irgendwann wurden in den AVR Libs (iomxx4.h) die Deklarationen der Ports geändert:
Bsp:
Früher: SPCR0
Neu: SPCR

Das Problem lässt sich beheben, wenn man in der "mmc.h" einfach die defines aukommentiert:
#if defined (__AVR_ATmega644__)
#define SPI_DI 6 //Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist
#define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist
#define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
#define MMC_Chip_Select 3 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist
#define SPI_SS 4 //Nicht Benutz muß aber definiert werden
//#define SPCR SPCR0
//#define SPE SPE0
//#define MSTR MSTR0
//#define SPSR SPSR0
//#define SPDR SPDR0
//#define SPIF SPIF0
//#define SPR0 SPR00
//#define SPR1 SPR01
//#define SPI2X SPI2X0
#endif


Gruss
Ho