habe mal wieder einen merkwürdigen Fehler. Mein Roboter-Programm habe ich zuvor in WinAVR per Programmer Notepad programmiert und es läuft ohne Probleme. Nun bin ich auf AVR-Studio umgestiegen und habe dort ein Projekt angelegt und den Code rein kopiert. Es lässt sicht compilieren und auf den Roboter übertragen. Aber mein Roboter macht gar nichts. Habe ie zwei Hex-Dateien von WinAVR und AVR-Studio verglichen und festgestellt, dass diese nicht gleich sind. Es scheint irgendwie an AVR-Sudio zu liegen.
Weiß jemand woran es liegen kann?
Ich behaupte jetzt einfach mal das es am makefile liegt.
Du kannst aber bei den Projektoptionen einstellen, dass das alte makefile verwendet werden soll. Dann sollte es einwandfrei funktionieren
Habe nun die Makefile vom WinAVR-Projekt benutzt. Wieder das gleiche, ich kann compilieren und programmieren aber das Programm läuft nicht. Kann das sein, dass er meine ausgelagerten Funktionen z.B. myusart.c und myusart.h nicht richtig einbindet?
Wenn du kompilieren kannst, dann werden deine Includes offensichtlich richtig eingebunden.
Es könnte sein das dein Quellcode fehlerhaft ist (gibt es beim kompilieren Warnungen?).
Nachdem dein Code auch mit dem Programmers-Notepad makefile nicht funktioniert vermute ich, dass es am Code liegt.
Es kommen keine Warnungen. Wenn ich den gleichen Code in WinAVR Programmer Notepad kompiliere dann läuft das Programm ohne Probleme. Deshalb kann man Fehler im Code eigentlich ausschließen.
Hast du deine WinAVR Installation auf eine neuere Version gebracht??
Denn dann kann es sehrwohl sein, dass Warnungen zu unterschiedlichen Compilaten führen.
Sonst fällt mir auch nichts mehr ein da beide Versuche das selbe makefile benutzen -> selber Compiler,Linker usw...
Und Avr-Studio macht ja nichts anderes als den Quellcode übers makefile an den Compiler zu geben.
Also die "Warnungen" die ich bekomme sind eigentlich recht eindeutig warum es nicht funktioniert wie es soll.
Du musst entweder Funktionsprototypen für jede Funktion vor die erste Funktion stellen, oder alle funktionen an den Anfang schreiben (nicht schön).
Des weiteren musst du die Optimierung deines Compilers aktivieren (laut einer Warnung).
und das hier:
myusart.h :
Code:
#include "myusart.c"
ist ja mal ein absolutes no-go.
sowas macht man indem man die "myusart.c" zum Projekt linkt und nicht über sowas.
Ich hoffe ich hab nichts vergessen. Falls ja kommen noch EDITs
EDIT: hier ist es auch schon
funktionen die nichts zurück geben deklariert man als void (sonst kommt eine Warnung)
Hatte vergessen zu sagen, dass Header-Files normalerweise für Funktionsprototypen verwendet werden
Meine Funktionen stehen doch alle am Anfang, oder? Wie meinst du das mit dem linken der "myusart.c"? Meinst du das ich das im Makefile angeben soll? Die Optimierung kann ich aber nicht aktivieren, wenn ich mein altes Makefile benutze.
Ich hab mir jetzt mal die Mühe gemacht und dein Projekt angepasst.
Sollte so funktionieren.
Du solltest globale Variablen wenn sie innerhalb von Interrups verwendet werden sollen als volatile deklarieren, da sie sonst unter umständen wegoptimiert werden.
Fragwürdig ist auch, ob es sich auszahlt extra eine *.c und *.h Datei für eine einzige Funktion anzulegen...
Lesezeichen