Forum: Mikrocontroller und Digitale Elektronik Funktion Compiler?


von Marco Blum (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von holger (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dann verdrück Dich nicht und elaboriere ein wenig ...

von holger (Gast)


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 ?

von Andreas K. (a-k)


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.

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.