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. ;-)
Also
temp = 1 + 1;
läuft mit und ohne BS.
>Ich hoffe ihr versteht was ich meine. ;-)
Nö.
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.
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
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!
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.