Hallo Männer, ich habe bis jetzt immer in Assembler unter unter AVR Studio programmiert. Wenn ich das Programm übersetze und online teste (Build und Run CTRL+F7), dann war hinterher das Programm auch gleich im ATMEGA im Flash gespeichert (bei Spannung aus/an startet das Programm). Nun habe ich ein C Programm geschrieben. Das ist aber flüchtig und wird nicht automatisch ins Flash geschrieben. Die Menüs beim AVR Studio sind zwischen Assembler und C unterschiedlich. Da gibt es nun beim C Programm Configuration Options. Darin die Memory Settings. Aus der Hilfe bin ich nicht schlau geworden und Beitrag über dieses Thema konnte ich hier auch nicht finden. Frage: Muss ich hier nun explizit die Speicherbereich angeben? Handelt der C Compiler dann automatisch den Programm Speicher? Oder muss ich wie beim Assembler File .code Sections etc. angeben? Bin mit der vorhandenen Literatur nicht weiter gekommen. Würde mich über Hinweise und Links zur Antwort freuen :-)
Der ATmega kann Code NUR aus dem Flash heraus laufen lassen. Das AVR-Studio kann garnicht anders, als Dein Programm vor dem Start ins Flash zu brennen. Viele Grüße, Stefan
Hallo Stefan, vielen lieben Dank für Dein Antwort. Aber wenn AVR-Studio ins Flash schreibt, warum startet das Programm nicht am Controller nach ein Reset? (So wie es das Assembler Programm auch macht) Es liegt demnach an den Einstellungen vom C-Compiler? Lieben Gruß Michael ;-)
Der C-Compiler hat mit der Programmierung des AVR nichts zu tun! Der Compiler spuckt am Ende ein Hex-File aus und hat damit seine Schuldigkeit getan. Das Hex-File muss dann über einen Programmieradapter auf den µC übertragen werden, und das fällt in den Zuständigkeitsbereich der Programmiersoftware (in Deinem Fall also vermutlich AVRStudio).
Hallo Johannes, ok, dann trennen wir Compiler vom Programmieradapter und betrachten nur die zwei erzeugten HEX Files. Es gibt einen Unterschied gleich in der ersten Zeile zwischen dem C und Assembler Code: C-CODE: :100000000C9446000C9465000C9465000C946500FB :100010000C9465000C9465000C9465000C946500CC :100020000C9465000C9465000C9465000C946500BC Assembler-CODE: :020000020000FC :100000000C9446000C94B4020C9446000C944600E8 :100010000C9446000C9446000C9446000C94460048 :100020000C9446000C9446000C9446000C94460038 Das bedeutet, das HEX File vom C-Compiler schreibt nur in das Flash (ab 0x1000), der Assembler aber schreibt ebenfalls noch was auf 0x200. Eine Bottsequenz?
>Das bedeutet, das HEX File vom C-Compiler schreibt nur in das Flash (ab >0x1000), der Assembler aber schreibt ebenfalls noch was auf 0x200. Eine >Bottsequenz? Bevor du dir die HEX Dateien anschaust solltest du dich erst mal über das Datenformat informieren. Die erste Zeile der zweiten Datei setzt nur eine Offsetadresse von 0x0000. Und das Programm startet in beiden Fällen bei 0x0000.
> Bevor du dir die HEX Dateien anschaust solltest du dich erst > mal über das Datenformat informieren. Du hast vollkommen recht - Kopf senk... Wenn ich jetzt das Fazit auf Euren Antworten ziehe: - AVR Studio überträgt beim Compilieren und Starten immer ins Flash des Controllers. - Assembler und auch das C Programm starten bei 0x0000. somit stellt sich mir folgende Frage: Warum startet das C Programm nach dem Compilieren fehlerfrei unter AVR Studio und nach dem Reset des Controllers nicht mehr, das Assembler Programm macht es aber?
> - AVR Studio überträgt beim Compilieren und Starten immer ins Flash des > Controllers. Nein, das hängt davon ab, was du als Debug-Plattform ausgewählt hast. Das "Run" bedeutet nämlich "im Debugger starten".
Da hat aber Stefan, siehe oben, was anderes gemeint. > Das AVR-Studio kann garnicht anders, als Dein Programm vor dem Start ins > Flash zu brennen. Spielt "compile und run" nun das Compilat ins Flash vom Controller oder nicht? Ich konnte dazu keine Einstellung finden, wo man dies wählen könnte.
Chris Berger wrote: > Spielt "compile und run" nun das Compilat ins Flash vom Controller oder > nicht? Wenn du den Simulator als Debug-Plattform ausgewählt hast, dann nicht.
Nein, ich hab natürlich nicht den Simulator angewählt. So wie ich am Anfang geschrieben habe. Das Programm wird ja in den Controller geladen, ich kann den Download sehen und schließlich muss das Programm im Controller ausgeführt werden, sonst könnte ich keine Tasten und LEDs ansteuern. Hat noch niemand hier so ein Problem gehabt? Es ist nicht mein erstes Projekt mit AVR Studio. Ich kann mir nicht erklären, warum das Programm nach einem Reset nicht von selbst startet.
Compile und Run spielt das Programm nicht in den Kontroller. Es sein denn du arbeitest mit einen JTAG. Es wird ansonst der Simulator gestartet. Der gelbe Pfeil sollte am Anfang von main stehen.
Hallo Hubert, nein, es läuft nicht im Simulator. Ich habe die JTAG Schnittstelle eingestellt und kann mit Single Step das Programm in der Hardware ablaufen lassen. Lieben Gruß Michael
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.