Mal ne ganz blöde Compiler-/Programmcodefrage

OP #3126536
Lesenswert?
• ▲
▼
Ich habe gestern ein kleines C-Programm für einen SH4 Controller, auf 
dem ein Linux läuft, unter Ubuntu geschrieben und crosscompiliert. 
Soweit alles ok.
Jetzt frage ich mich ob ein Programm (zB nur eine einfache Berechnung), 
was jetzt keine Shared Objects vom Betriebssystem braucht auch ohne 
dieses laufen würde. Also genau der gleiche Programmcode vom selben 
Compiler.
Einmal mit und einmal ohne BS.
Ich hoffe ihr versteht was ich meine. ;-)
Gast #3126569
Lesenswert?
• ▲
▼
Thomas M. schrieb:
> Also genau der gleiche Programmcode vom selben
> Compiler.
> Einmal mit und einmal ohne BS.

Der Compiler ruft hunderte von Routinen des BS auf, schon allein um das 
Programm zu starten. Was soll rauskommen wenn die nicht da sind ausser 
entsprechend viele Fehlermeldungen?

Gruss Reinhard
Gast #3126592
Lesenswert?
• ▲
▼
Reinhard Kern schrieb:
> Der Compiler ruft hunderte von Routinen des BS auf, schon allein um das
> Programm zu starten. Was soll rauskommen wenn die nicht da sind ausser
> entsprechend viele Fehlermeldungen?

und warum kann man dann für einen µC mit dem GCC ein programm erzeugen? 
Auch der Linux Kernel wird mit dem GCC erzeugt.

Der Compiler macht das was man ihm sagt!
Gast #3126606
Lesenswert?
• ▲
▼
Hier wird mal wieder himmelschreiender Dünnschiss geschrieben.

Klar, der Compiler tut, was man ihm sagt. Man muß "nur" eine ganze Menge 
was anderes sagen, wenn man bare-metal möchte. Es ist immer noch ein 
riesiger Unterschied, ob man für ein Target mit OS oder bare-metal Code 
generiert. Das liegt weniger am Compiler selbst, sondern an den 
Libraries und dem Startup-Code.

Hier ein paar Details:
http://www.state-machine.com/arm/Building_bare-metal_ARM_with_GNU.pdf

Ist zwar für ARM, aber für x86 funktioniert das prinzipiell ähnlich.

Murkser
Gast #3126764
Lesenswert?
• ▲
▼
Peter II schrieb:
> und warum kann man dann für einen µC mit dem GCC ein programm erzeugen?

1. weil man das dem Compiler sagen muss, und der muss das auch können. 
Mit den meisten Windows-Compilern geht das nicht. Mal ganz abgesehen 
davon dürfte man auch mit dem GCC nicht für jeden existierenden µC Code 
übersetzen können, sondern nur für bestimmte verbreitete, so allgemein 
ist die Aussage also falsch.

2. weil man dann statt der BS-Routinen was anderes dazulinken muss, z.B. 
ein Startup-Modul. Das ist nur für einen µC ein anderes als für Windows 
oder Linux.

3. weil man dann ganz andere Software schreibt - nix mit COM-Device 
open, dann heisst es UART-Register setzen. Man kann also keineswegs nur 
so mit dem Finger schnipsen und schon läuft Linux-Software auf einem 
ATMega.

Ohne Anspruch auf Vollständigkeit.

Ist halt doch ein bisschen komplexer als sich das mancher so vorstellt.

Gruss Reinhard

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.