Hallo zusammen, nach längerer Pause möchte ich mal wieder ein wenig programmieren. Ich habe noch ein altes ATMEGA128-Projekt, welches ich nun erweitern möchte. Mittlerweile habe ich allerdings einen neuen Rechner (WIN7). Den letzten Stand meines Projektes habe ich selbstverständlich noch (c-files, kompilierte hex-files usw.). WINAVR musste ich auf den neuen Rechner selbstverständlich neu installieren. Jetzt hat sich folgendes Problem ergeben: Spiele ich das alte hex-file in die Zielschaltung funktioniert es noch. Kompiliere ich das ungeänderte c-file neu läuft nichts mehr. Mir ist bis jetzt nichts aufgefallen, woran das liegen könnte. Einziger Anhaltspunkt: Winavr gibt beim kompilieren folgende Warnung aus: c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>." Hatte schon jemand mal dieses Problem? Kann mir jemand helfen? Bernd
Bernd schrieb: > Winavr gibt beim kompilieren folgende Warnung aus: > c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: > #warning "This header file is obsolete. Use <avr/interrupt.h>." > > Hatte schon jemand mal dieses Problem? Kann mir jemand helfen? Und? Was passiert wenn du in deinem Projekt statt der früheren signal.h die interrupt.h einbindest. Zeig mal, wie z.Z. die Prozedurköpfe deiner ISR aussehen.
interrupt.h ist ohnehin schon eingebunden. Hier mal der Kopf des main-files: #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> /***************************************************** Project : DMX-Adapter Version : Date : 23.02.2006 Author : Bernd Company : Comments: Chip type : ATmega128 Program type : Application Clock frequency : 16,000000 MHz *****************************************************/ //Variablendeklaration .....
Bernd schrieb: > interrupt.h ist ohnehin schon eingebunden. Das ist dann doppelt gemoppelt, weil die neue signal.h das ohnehin schon macht. Die Warnung kommt aus der signal.h .\WinAVR\avr\include\avr\signal.h
1 | #warning "This header file is obsolete. Use <avr/interrupt.h>." |
2 | #include <avr/interrupt.h> |
Kann z.B. an einer "aggressiveren" Optimierung im neueren WINAVR liegen. Wenn du im Code z.B. Einfachst-Warteschleifen mit Variablenhochzählen hast statt der _delay_Xs() Funktionen, wäre das eine Problemstelle. Auch in der Gegend gemeinsam genutzter Variablen in ISR und Usermodeprogramm waren frühere Versionen "gutmütiger" (Stichwort fehlendes volatile). Auf die harte Tour kannst du so was rausfinden, wenn du die Versionsnummern des GCC und des WINAVR heraussuchst und in den Changelogs und Bugtrackern nach siehst, was sich bei der Entwicklung der Toolchain getan hat. Wenn dein Code nicht top-secret ist, wäre das Zeigen des Sourcecodes und Fragen nach KOmmentaren möglicherweise einfacher (Stichwort "Hose-Runter-Approach").
Das wäre eine Möglichkeit - daran könnte es liegen. Hab zum Initialisieren meines Displays damals ein paar Warteschleifen (einfache for-Schleife zum Hochzählen) eingefügt. Ich werd mir das mal anschauen. Danke erstmal.
Die Funktionen _delay_us() und _delay_ms() findest du in <util/delay.h>. Damit die richtig funktionieren, muß als Argument eine Konstante übergeben und die Compileroptimierung eingeschaltet sein.
FUNKTIONIERT!!! Nochmal vielen Dank für die schnelle Info. Hab einfach die Warteschleifen durch die Delayfunktion ersetzt und das Headerfile eingefügt - und schon geht's wieder. Was ich allerdings von WINAVR schwach finde, dass meine alten Warteschleifen ohne Fehlermeldung beim kompilieren anscheinend ignoriert werden... Bernd
Bernd schrieb: > Was ich allerdings von WINAVR schwach finde, dass meine alten > Warteschleifen ohne Fehlermeldung beim kompilieren anscheinend ignoriert > werden... Wenn du in der Konfiguration die Compileroptimierung abschaltest (AVR Studio 4: Optimization -O0), wird auch deine alte Schleife funktionieren.
Die Funktion ist ja eigentlich nicht schlecht. Ich hab sie gerade mal ausprobiert. Es kommen aber bei mir nicht die Werte in us bzw. ms raus (die Zeiten sind kürzer) Weiß jemand, wo mein am Compiler die Clockfrequenz festlegt?
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.