AVR Studio - C Programm fest in Flash schreiben

OP #991079
Lesenswert?

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 :-)
#991234
Lesenswert?

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
Lesenswert?

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
Lesenswert?

>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
Lesenswert?

> 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 #992651
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren