mikrocontroller.net

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


Autor: Chris Berger (chrisberger)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chris Berger (chrisberger)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Chris Berger (chrisberger)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris Berger (chrisberger)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Chris Berger (chrisberger)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris Berger (chrisberger)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris Berger (chrisberger)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.