mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Funktion Compiler?


Autor: Marco Blum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
kann mir jemand erklären wie das mit dem Compiler eigentlich abläuft?
Sagen wir ich schreibe ein Programm in C und kompiliere es, dann macht 
der Compiler doch daraus Assembler code und dann Hex-Code/Binär-Code? 
Wenn ich das Programm hochlade schreibe ich es ja in den Flash des uC's, 
ausgeführt werden doch Programme im Ram? Wird dann im Controller das 
ganze nochmal in den Ram geladen, und woher weis der controller an 
welche stelle er es im Ram ablegen muss?


Gruß
Marco

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Sagen wir ich schreibe ein Programm in C und kompiliere es, dann macht
> der Compiler doch daraus Assembler code und dann Hex-Code/Binär-Code?

Ja. Wobei es KEINEN UNTERSCHIED zwischen "Hex-Code" und "Binär-Code" 
gibt.

> Wenn ich das Programm hochlade schreibe ich es ja in
> den Flash des uC's,

Üblicherweise ja, wobei es auch Ausnahmen gibt. Bei einigen 
Controllerfamilien kann das Programm über das JTAG-Interface auch ins 
RAM geladen werden, um dort ausgeführt zu werden - sofern das die 
betreffende Controllerfamilie überhaupt kann.

> ausgeführt werden doch Programme im Ram?

Durchaus nicht unbedingt, bei einigen Controllerarchitekturen sogar ganz 
und gar nicht, wie den hier recht verbreiteten AVRs von Atmel. Die 
können Programme nur aus dem Flash heraus ausführen.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja. Wobei es KEINEN UNTERSCHIED zwischen "Hex-Code" und "Binär-Code"
>gibt.

Das sehe ich anders !
Es gibt sogar Unterschiede bei HEX-Codes.

Duck und wech ;)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann verdrück Dich nicht und elaboriere ein wenig ...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dann verdrück Dich nicht und elaboriere ein wenig ...

Na gut, ich bin noch da.

>Ja. Wobei es KEINEN UNTERSCHIED zwischen "Hex-Code" und "Binär-Code"
>gibt.

Das ist eine sehr gefährliche Aussage für die etwas
unerfahrenen Mitleser. In erster Linie geht es beim Unterschied
um das Dateiformat. Bei Binär werden alle Bytes so wie sie sind
eins nach dem anderen in einer Datei gespeichert. Bei HEX werden
die Binärwerte als 2 Byte HEX ASCII Zeichen abgelegt. Dabei werden noch
Adressangaben und Checksummen hinzugefügt. Auch in ASCII.

Es gibt einige HEX Formate:

Intel8Hex
Intel32Hex
Motorola Srecord S1,S2,S3
Tektronik HEX
Atmel hat sein eigenes ROM Format
und noch viele andere.

Nicht jeder Prommer kann jedes HEX Format lesen.
Binär können die meisten.

Reicht das ?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nicht den Eindruck, dass der Fragesteller solche Haare spalten 
lassen wollte. ;-)

Marco Blum wrote:

> Wenn ich das Programm hochlade schreibe ich es ja in den Flash des uC's,
> ausgeführt werden doch Programme im Ram?

Es gibt einzelne Controller im unteren und mittleren Bereich, die 
externes serielles EEPROM oder Flash-Speicher für den Programmcode 
verwenden. Solche Controller sind jedoch die Ausnahme. In diesem Fall 
ist die Vereinbarung, an welcher Stelle der Code im RAM landet, Teil der 
jeweiligen Spezifikation dieses Controllerstyps.

Controller mit intergriertem Flash-Speicher arbeiten üblicherweise nicht 
im RAM. Da wird der Code direkt aus dem Flash-Speicher ausgeführt. Es 
kann jedoch vorkommen, dass Teile des Codes vom Programm selbst ins RAM 
kopiert werden, um dort beschleunigt ausgeführt werden zu können, da 
jenseits von 20-30MHz Zykluszeit RAM schneller ist als Flash-Speicher.

Nur bei grossen Controller-Systemen mit entsprechenden RAM-Kapazitäten 
im Megabyte-Bereich, deren Speicher daher ganz oder überwiegend extern 
liegt, kann es sein, dass Programme aus dem Flash-Speicher ins RAM 
geladen werden, nicht zuletzt weil RAM schneller ist. Das sind dann 
Controller-Systeme der µLinux/Linux-Kategorie.

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.