Forum: Compiler & IDEs AVR Studio - C Programm fest in Flash schreiben


von Chris B. (chrisberger)


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 :-)

von Stefan (Gast)


Lesenswert?

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

von Chris B. (chrisberger)


Lesenswert?

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 ;-)

von Johannes M. (johnny-m)


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).

von Chris B. (chrisberger)


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?

von holger (Gast)


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.

von Chris B. (chrisberger)


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?

von Stefan E. (sternst)


Lesenswert?

> - 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".

von Chris B. (chrisberger)


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

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.

von Chris B. (chrisberger)


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.

von Hubert G. (hubertg)


Lesenswert?

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.

von Chris B. (chrisberger)


Lesenswert?

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
Noch kein Account? Hier anmelden.