Forum: Mikrocontroller und Digitale Elektronik Projekt funktioniert nach Neuinstallation von WINAVR nicht mehr


von Bernd (Gast)


Lesenswert?

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

von Tom (Gast)


Lesenswert?

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.

von Bernd (Gast)


Lesenswert?

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
.....

von Tom (Gast)


Lesenswert?

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>

von Krapao (Gast)


Lesenswert?

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").

von Bernd (Gast)


Lesenswert?

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.

von Tom (Gast)


Lesenswert?

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.

von Bernd (Gast)


Lesenswert?

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

von Tom (Gast)


Lesenswert?

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.

von Bernd (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.