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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren