www.mikrocontroller.net

Forum: Compiler & IDEs Win AVR funktioniert nicht richtig !! Hilfe.


Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich hoffe jemand kann mir Helfen. Ich habe ein Programm was 
definitiv funktioniert. Meine Nixi Uhr leuft schon 1 Jahr damit. Jetzt 
wolte ich das Programm verbessern und die Prüfbits auswerten. Habe das 
alte Programm neu abgespeichert, und die Makefile kopiert. Das Programm 
wird comperliert, jedoch funktioniert es nicht mehr. Am Programm kann es 
nicht ligen. Wenn ich die alte Datei erneut comperlire, geht es genauso 
wenig.

Hat jemand ne idee woran das ligen könnte?


> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.6
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is 
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.


Compiling C: Nixie_Uhr_4_1.c
avr-gcc -c -mmcu=at90s8515 -I. -gstabs -DF_CPU=4000000UL -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=./Nixie_Uhr_4_1.lst  -std=gnu99 -Wundef 
-MMD -MP -MF .dep/Nixie_Uhr_4_1.o.d Nixie_Uhr_4_1.c -o Nixie_Uhr_4_1.o
In file included from Nixie_Uhr_4_1.c:16:
C:/WinAVR/avr/include/avr/signal.h:36:2: warning: #warning "This header 
file is obsolete.  Use <avr/interrupt.h>."
In file included from Nixie_Uhr_4_1.c:17:
C:/WinAVR/avr/include/avr/delay.h:36:2: warning: #warning "This file has 
been moved to <util/delay.h>."

Linking: Nixie_Uhr_4_1.elf
avr-gcc -mmcu=at90s8515 -I. -gstabs -DF_CPU=4000000UL -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=Nixie_Uhr_4_1.o  -std=gnu99 -Wundef -MMD 
-MP -MF .dep/Nixie_Uhr_4_1.elf.d Nixie_Uhr_4_1.o --output 
Nixie_Uhr_4_1.elf -Wl,-Map=Nixie_Uhr_4_1.map,--cref     -lm

Creating load file for Flash: Nixie_Uhr_4_1.hex
avr-objcopy -O ihex -R .eeprom Nixie_Uhr_4_1.elf Nixie_Uhr_4_1.hex

Creating load file for EEPROM: Nixie_Uhr_4_1.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 --no-change-warnings -O ihex 
Nixie_Uhr_4_1.elf Nixie_Uhr_4_1.eep || exit 0

Creating Extended Listing: Nixie_Uhr_4_1.lss
avr-objdump -h -S Nixie_Uhr_4_1.elf > Nixie_Uhr_4_1.lss

Creating Symbol Table: Nixie_Uhr_4_1.sym
avr-nm -n Nixie_Uhr_4_1.elf > Nixie_Uhr_4_1.sym

Converting to AVR COFF: Nixie_Uhr_4_1.cof
avr-objcopy --debugging --change-section-address .data-0x800000 
--change-section-address .bss-0x800000 --change-section-address 
.noinit-0x800000 --change-section-address .eeprom-0x810000 -O coff-avr 
Nixie_Uhr_4_1.elf Nixie_Uhr_4_1.cof
Warning: file C:/DOCUME~1/EWEDDI~1/LOCALS~1/Temp/ccQNdaaa.s not found in 
symbol table, ignoring
Warning: ignoring function __vectors() outside any compilation unit
Warning: ignoring function __bad_interrupt() outside any compilation 
unit

Size after:
AVR Memory Usage
----------------
Device: at90s8515

Program:    6306 bytes (77.0% Full)
(.text + .data + .bootloader)

Data:         37 bytes (7.2% Full)
(.data + .bss + .noinit)



-------- end --------


> Process Exit Code: 0
> Time Taken: 00:02

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht solltest Du die Meldungen des Compilers lesen.
Da steht daß einige Headerfiles nicht zu tauschen sind.

<avr/signal.h>    auf    <avr/interrupt.h>
<avr/delay.>      auf    <util/delay.h>

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigung, muß heißen :
Da steht daß einige Headerfiles zu tauschen sind.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Am Programm kann es nicht ligen.

Jaja....

Hatte ich heute schon mal zitiert:

"Absence of evidence is no evidence of absence."

Die Tatsache, dass dein Programm mit einer x-beliebigen Version eines
y-beliebigen Compilers zum Zeitpunkt z mal einen funktionsfähigen Code
generiert hat, heißt doch noch lange nicht, dass es deshalb fehlerfrei
ist.  Es kann genauso gut sein, dass da irgendein Fehler drin steckt,
der just unter diesen Randbedingungen halt keine Auswirkungen hatte.

Je aggressiver den Compilern das Optimieren gelehrt wird (und das will
ja letztlich jeder, dass die Compiler möglichst gut optimieren), um so
mehr subtile Fehler (in den zu übersetzenden Programmen, nicht im
Compiler!) können sich letztlich auch in Nichtfunktionieren des
Ergebnisses niederschlagen.

Genug allgemeines Gefasel: wenn du Hilfe bekommen willst, musst du dir
schon die Mühe machen, dein Problem einzugrenzen und dann ggf.  hier
den Sourcecode posten, bei dem du nicht mehr verstehst, warum es jetzt
nicht mehr funktionieren will.

Nur so viel noch: die paar Warnungen, die du da bekommst, tun gar
nichts zur Sache.  Du kannst (und solltest) die geänderten Headerfiles
anpassen, aber all das ist nicht die Ursache deiner Probleme.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe ein Programm was definitiv funktioniert.

Das wäre eine Premiere für die Menschheit :-))

Ganz dumme Frage (aus eigener schlechter Erfahrung): Bist du dir 1000% 
sicher, den richtigen Source-Code archiviert und erneut compiliert zu 
haben?

Oliver

Autor: Micha (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also, erstmahl vielen dank für die Tips.
Die 2 Warnungen:
C:/WinAVR/avr/include/avr/signal.h:36:2: warning: #warning "This header
file is obsolete.  Use <avr/interrupt.h>."
In file included from Nixie_Uhr_4_1.c:17:
C:/WinAVR/avr/include/avr/delay.h:36:2: warning: #warning "This file has
been moved to <util/delay.h>."

sind schon mal weg. Das, das Programm geht bin ich mir in sofern sicher 
da die Hex Dadei die sich im selben Verzeichniss wie die .c Datei 
befunden hat,nach übertragung in die Uhr funktioniert hat. Jedoch nach 
erneuten Compelieren nicht mehr. Das ist zumindest sehr seltsam. Aber 
gut vieleicht liegt es ja trotzdem am Quellcode. Ich habe noch  nicht so 
viel Prorammiererfahrung und das Programm ist denke ich recht 
Zusammengeschustert.
Ich versuche trotztem mal den Fehler einzugrenzen:
Nach übertragen des neu compelierten Programms, liest die Uhr die Zeit 
richtig aus, jedoch Sie zeigt keine Sekunden mehr an.
Normalerweise lauft die Uhr beim Neustat bei 00:00:00 an und zshlt die 
Sekunden hoch !
Das ganze mache ich im Programm über den Timmer:
Dieses stück Code ist übrigens auch, von diesen Forum:

//Timer einstellen
TCCR1B = (1<<CS10) | (1<<CS11);       //setzt den Prescaler 64
OCR1A = 62500;                         //setzt den Vergleichswert
TCNT1 = 0;                             //startewert des Counters
TIMSK = 1<<OCIE1A;                     //Compare-Int aktivieren
sei();                                 //globale Ints aktivieren
TCCR0 = (1<<CS00) | (1<<CS02);      //prescaler 1024 Bei einen 
Zhlerdtand von 4 sind 1,024 ms vergangen
TCNT0 = 0;

Dieser Timmer ruft jetzt jede Sekunde diese Routine auf:
SIGNAL (SIG_OUTPUT_COMPARE1A)
{
 //wird ausgeführt wenn der Counterwert mit dem Vergleichswert 
übereinstimmt
  // Uhrenroutine
  s++;
  TCNT1 = 0; //timer 1 auf null
if (s == 60)
{
s = 0;
m++;
Anzeige(s,m,h);
}
if (m == 60)
{
m = 0;
h++;
if (h == 24)
h = 0;
Anzeige(s,m,h);
}
}
Welche dann die Sekunden Hochzahlt.
und mit Anzeige(s,m,h) anzeigt.

Ich glaube immernoch das WinAVR irgendwas falsch macht:
Was heisen diese Fehlermeldungen:
Warning: ignoring function __vectors() outside any compilation unit
Warning: ignoring function __bad_interrupt() outside any compilation
aus meinen ersten Post ?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich glaube immernoch das WinAVR irgendwas falsch macht:
Das glaube ich nicht. Er macht vielleicht etwas anders, als die alte 
Version, aber richtig "falsch" ist verdammt unwahrscheinlich.

Die Warnungen kommen vom coff-Konverter, und haben nichts zu bedeuten. 
Das coff-File benötigst du sowieso nicht.
(http://winavr.sourceforge.net/WinAVR-user-manual.html)

Zeigt die Uhr gar nichts mehr an, oder nur nach dem Start?
Kannts du auch dein makefile mal anhängen?

Oliver

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SIGNAL wurde in ISR umbenannt, daher vermutlich auch die Warnung.
Lies mal die aktuelle Doku, wie Du das portieren kannst.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Danke, Fehler gefunden !
SIGNAL (SIG_OUTPUT_COMPARE1A)
{
 //wird ausgeführt wenn der Counterwert mit dem Vergleichswert
übereinstimmt
  // Uhrenroutine
  s++;
  TCNT1 = 0; //timer 1 auf null
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Hier fehlt: Anzeige(s,m,h);
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

if (s == 60)
{
s = 0;
m++;
Anzeige(s,m,h);
}
if (m == 60)
{
m = 0;
h++;
if (h == 24)
h = 0;
Anzeige(s,m,h);
}
}
Werkwürdig aber war. Ich kam drauf wie ich meinen 2. Post geschrieben 
hab. Die funktioniert normal zeigte aber keine Sekunden an.
Keine Ahnung, wie sich diese Zeile gelöscht hat !
In der Orginaldatei ist Sie jedenfals vorhanden. Ist warscheinlich beim 
umkopieren was schief gegangen.

Jeden fals vielen Dank für eure Hilfe!

Manschmal sieht man den Wald vor lauter Bäumen nicht, aber es zeigt auch 
wenn man sich mit dem Problem logisch auseinandersetzt, kommt man meist 
auf die Lösung.

Autor: Oliver (Gast)
Datum: 29.03.2007 08:23

>Ich habe ein Programm was definitiv funktioniert.

Das wäre eine Premiere für die Menschheit :-))

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.