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
> 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.
>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 ;)
>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 ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.