Forum: Mikrocontroller und Digitale Elektronik Mal ne ganz blöde Compiler-/Programmcodefrage


von Thomas M. (thomaswm)


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

von holger (Gast)


Lesenswert?

Also

temp = 1 + 1;

läuft mit und ohne BS.

>Ich hoffe ihr versteht was ich meine. ;-)

Nö.

von Vlad T. (vlad_tepesch)


Lesenswert?

das kommt auf die Toolchain an.
Du brauchst eine, die dir bare-metal code erzeugt. benutzt du eine für 
linux auf dem Zielsystem hast du immer os-abhängigen Code in der 
implizit dazugelinkten runtime, egal wie simple dein Programm ist.

von Reinhard Kern (Gast)


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

von Peter II (Gast)


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!

von Murkser (Gast)


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

von Reinhard Kern (Gast)


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

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.