Hallo, ich habe heute ein Programm zur Ansteuerung eines Displays über SPI getestet. Der Zielprozessor ist ein ATMega324P. Beim Compilieren im AtmelStudio(6.1.2730 SP2) bekomme ich folgende Fehlermeldungen: 'SPCR' was not declared in this scope 'SPE' was not declared in this scope so geht es weiter für alle SPI spezifischen Ausdrücke (MSTR, SPR1, SPR0 etc.) Das Eigenartige: Wenn ich die Zielhardware unter "Device" auf einen ATMega644P (also gleiche Familie nur mehr Speicher) ändere läuft das Compilieren fehlerfrei. Woran kann das liegen? Danke Hier noch die Fehlermeldungen: ------ Build started: Project: Display_Test, Configuration: Debug AVR ------ Build started. Project "Display_Test.cppproj" (default targets): Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.1\Vs\Compiler.targets" from project "C:\Users\Mackie-2011\Dropbox\Messtechnik\GPS_Counter\Display_Test\Displ ay_Test\Display_Test.cppproj" (target "Build" depends on it): Task "RunCompilerTask" C:\Program Files (x86)\Atmel\Atmel Studio 6.1\shellUtils\make.exe all Building file: .././Display_Test.cpp Invoking: AVR8/GNU C Compiler : 3.4.2 "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.1002\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega324p -c -MD -MP -MF "Display_Test.d" -MT"Display_Test.d" -MT"Display_Test.o" -o "Display_Test.o" ".././Display_Test.cpp" .././Display_Test.cpp: In function 'void InitSPI()': C:\Users\Mackie-2011\Dropbox\Messtechnik\GPS_Counter\Display_Test\Displa y_Test\Display_Test.cpp(97,1): 'SPCR' was not declared in this scope C:\Users\Mackie-2011\Dropbox\Messtechnik\GPS_Counter\Display_Test\Displa y_Test\Display_Test.cpp(97,13): 'SPE' was not declared in this scope
Hallo Holger, die Fehlermeldungen kommen ja für alle SPI bezogenen Ausdrücke.Hab nur nicht die komplette Liste angehängt. Ausserdem besitzen der 324p und der 644p den gleichen Befehlssatz und beim 644p geht es problemlos. Evtl. kann die Makefile nicht mit dem 324p umgehen?
>Evtl. kann die Makefile nicht mit dem 324p umgehen?
Doch, kann es. Die Bezeichnungen für SPI sind beim 324p auch
bei meinem Compiler in den Headerdateien anders.
Eben mit der '0' am Ende. Warum das so ist?
Hi >Doch, kann es. Die Bezeichnungen für SPI sind beim 324p auch >bei meinem Compiler in den Headerdateien anders. >Eben mit der '0' am Ende. Warum das so ist? Der ATMega324P und der ATMega644P haben/hatten das gleich Datenblatt. Und da gab/gibt es nichts mit einer Null in den Registerbezeichnungen. MfG Spess
Holger, Du hast Recht, mit der Null geht's problemlos. Da soll mal einer drauf kommen, wenn das Datenblatt abweicht. Wo finde ich denn die Headerdateien?
Das Ganze klingt natürlich völlig hirnrissig. Ist aber tatsächlich so. Normalerweise wird die typspezifische iom.h eingebunden und von dieser die allgemeingültige iomxx4.h. Das ist aber nicht immer so. Bei mir wird von der iom324pa.h die iomxx4.h nicht eingebunden, sondern alles ist in der iom324pa.h definiert. Und zwar so, wie es vom TO beschrieben wird. Beim 644PA wird die iomxx4.h ebenfalls nicht eingebunden, dafür sind aber die Definitionen in der iom644pa.h richtig. Kompiliere ich für 324A oder 324P wird wieder die iomxx4.h eingebunden und alles ist gut. Da ist irgendwie der Wurm drin. Aber richtig. Um nicht ständig hin und her probieren zu müssen, könnte man eine Headerdatei als Würgaround mit einbinden:
1 | #ifndef SPCR
|
2 | #define SPCR SPCR0
|
3 | #endif
|
4 | |
5 | #ifndef SPDR
|
6 | #define SPDR SPDR0
|
7 | #endif
|
sowas geht mit Copy & Paste recht fix. mfg.
Das müsste man dann aber für alles machen, also auch MSTR, SPE etc. Eventuell ist das ja in einer neueren AtmelStudio Version behoben...
Stefan D. schrieb: > Das müsste man dann aber für alles machen, also auch MSTR, SPE > etc. Daran wirst du nicht sterben. > Eventuell ist das ja in einer neueren AtmelStudio Version behoben... Das machen dann andere Leute in ihrer Freizeit für dich. Das hat allerdings mit der Atmel Studio Version nichts zu tun. Die Headerdateien gehören zur Toolchain. mfg.
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.