AVR Studio - C Programm fest in Flash schreiben

OP #991079
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 :-)
Gast #991110
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
OP #991207
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 ;-)
#991234
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).
OP #992249
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?
Gast #992257
>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.
OP #992587
> 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?
OP #992638
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.
OP #992651
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.