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
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>
Entschuldigung, muß heißen : Da steht daß einige Headerfiles zu tauschen sind.
> 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.
>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
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 ?
>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
SIGNAL wurde in ISR umbenannt, daher vermutlich auch die Warnung. Lies mal die aktuelle Doku, wie Du das portieren kannst.
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 :-))
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.