Forum: Compiler & IDEs GCC als C-CrossCompiler


von Nick (Gast)


Lesenswert?

hi leutz....

ich hab folgendes probl., ich habe jetzt bestimmt schon 2 tage (das
heisst sehr viele stunden) verbracht, um einen freeware /openSource
c-cross_compiler zu finden!!!!!

jetzt habe ich mir den sdcc besorgt (der einzige der wirklich
zugaenglich ist).....nnur ich komme zur teilweise mit ihm zurecht. ich
habe mich jetzt bestimmt schon stunden mit im beschaeftigt undm ich bin
immern och nciht viel schlauer....kann jetzt zwar compilieren, die
locale startadresse festlegen und die im externen ram...und es wird mir
mehrere dateien erstellt, wie asm, lnk, map, mem, rel, sym und
lst.....der source ist zudem auch, in der *.asm, ziemlich umfangreich,
ich wuerde swogar sagen zugemuellt, obwohl ich in meinem test c-prog
nur einen wert, einer variable zugewiesen hab.

es ist alles irgendwie nicht das ware, ambesten waere ja c51, nur der
kostet und nciht gerade wenig, hinzu kommt dann auch ncoh die grafische
oberflaeche, die die sache nochmal erheblich neinfacher machen wuerde
und das dieser compiler auch fuer die linux plattform geschrieben ist
(ist fuer mich sehr wichtig, da ich an linux (arbeitstechnisch)
gebunden bin).

hat jemand eine ahnung, welcher compiler schoen in der handhabung ist,
unter linux laeuft und die noetigen aufgaben erfuellt (also ein asm-
und hex-file erzeugt)?
ich waer euch schon umheimlich dankbar, wenn mir jemand eine tutorial
seite empfehlen kann (also von sdcc), obwohl ich nicht glaube, das es
eine vernuenftige gibt, denn ich war auf fast allen unverstaendlichen
und leihenfeindlichen seiten.

bitte helf mir!

schonmal danke im vorraus...!!

mfg

nick

von Jörg Wunsch (Gast)


Lesenswert?

GCC taugt als Crosscompiler, aber vielleicht verrätst du uns ja
erstmal deine Host- und Zielplattform?  Hostsystem ist offenbar Linux,
vermutlich dann auf i386.  Was ist das Ziel?

von Jürgen Schuhmacher (Gast)


Lesenswert?

Ich schätze mal der 8051, oder?

von Nick (Gast)


Lesenswert?

ja der 8051...ich habe wie gesagt linux drauf (knopixx) und moechte c
programme in assembler-code umwandeln!wie was wo :)

danke für eure mühe!

mfg

nick

von AndreasH (Gast)


Lesenswert?

Der sdcc war der Grund weshalb ich zu den avr gewechselt bin.
Ich wollte ein bestehendes und funktionierendes Keil-Programm
umschreiben für den sdcc. Habe nur die main genommen, dort eine led
blinken gelassen und alles andere aus der main rausgeschmissen.
Sämtliche Unterprogramme aber dringelassen. Wurden alle nicht
aufgerufen, waren eben nur im Code vorhanden.
Programm lief nicht.
Wenn ich jetzt in einem der Unterprogramme etwas auskommentiert hatte,
blinkte meine led. Das war für mich dermaßen undurchsichtig. Auch im
erzeugten Assembler-File war nichts zu sehen.
Habe das hier: http://www.progforum.com/showthread.php?t=4760 auch
schon mal geschildert und von Peter einen Rüffel erhalten, müßte wohl
an meinem Programm liegen :)

Nachdem ich, weil ich erst den Fehler bei mir vermutet hatte, dann 2
Tage in meinem Programm gesucht hatte und zufällig was auskommentiert
habe, was auch nicht aufgerufen wurde, hatte ich die Schn... voll und
bin zu den AVR gewechselt.
Habe vorher nicht viel mit denen gemacht weil der 8051 aus früheren
Tagen besser bekannt war.
Die Keil-Compiler sind mir einfach für privat zu teuer.
Grund für den Wechsel war einfach der WinAvr. Was die (Eric, Jörg,
u.a.) da auf die Beine gestellt haben finde ich einfach klasse.

Auch der Assembler mit seiner Makrofähigkeit ist besser als beim sdcc.
Das kann der beim sdcc nicht.

Grüße
Andreas

von Nick (Gast)


Lesenswert?

ja.....

mich habe mir schon viele cross compiler angeguckt, sind auch gnute
dabei gewesen, nur lle fuer windoof und ich schaetze der winAVR
auch.....das schilderte ich ja oben, ich bin gebunden, darf mir das
nicht aussuchen, muss linux bzw. knoppix taugliche Freeware nutzen
g..
bitte helft mir!das ist ein projekt und gehoert zu meiner
ausbildung....
habe sdcc auch schon installiert, alles ist funktionstechtig, kann
sogar die manpage nutzen, aber irgendwie ist das compilen, auf gut
deutsch gesagt, fuern arsch :)
viel zu langer text, noch ncih mal  ein end statement, keiner steigt
durch den source durch und scheinbar funktionieren tut er auch
nicht.....knn man vielleich parameter uebergeben, die den source kurz
und uebersichlich halten g ?
ich weiss einfach nicht mehr weiter, mom. hab ich das gefuehl das ich
auf dieser wel allein c und assembler programmiere lach, es ist
irgendwie verhext....bitte helf mir doch!

von Jörg Wunsch (Gast)


Lesenswert?

Es gibt wohl aber nichts anderes als SDCC dafür.

von AndreasH (Gast)


Lesenswert?

Sieh doch mal bei www.progforum.com oder www.wickenhäuser.de nach.
Da gibt es einen Compiler der ist auf 8K beschränkt aber ansonsten
Freeware.
Habe mir den mal kurz angesehen und es dann doch gelassen.
Der ist allerdings für Windows.

Ich würde mir aber auch nicht den asm-source ansehen. Da brauchst du
nicht durchzusteiegen. Der sdcc macht aus jeder Datei einen
Assembler-Quellcode, den er dann noch durch den Assembler bzw. Linker
schickt.
Der sdcc bzw. der Linker erzeugt zum Schluss doch eine Datei, die du
direkt flashen kannst. Weiss nicht mehr genau bin oder hex.

Grüße
Andreas

von Malte (Gast)


Lesenswert?

>nur lle fuer windoof und ich schaetze der winAVR auch
winAVR ist eigentlich 'nur' eine Sammlung von Programmen mit nem
konfortablem Installer. Alle wichtigen Programme gibt es auch für
Linux, um nicht zu sagen sie stammen meist von dort.
http://packages.debian.org/cgi-bin/search_packages.pl?version=all&subword=1&exact=&arch=any&releases=all&case=insensitive&keywords=avr&searchon=all

von Matthias (Gast)


Lesenswert?

Hi

so schlecht ist der SDCC garnicht. Zumindest als Cross-Compiler für den
8051. Ich hab damit mal (>3Jahre) einen Datenlogger auf CF Karte mit
einem P89C51RD2 gemacht. Läuft bis heute problemlos.

Matthias

von Andreas (Gast)


Lesenswert?

Also ich kann Matthias nur zustimmen.
Mein HD-MP3-Player jedenfalls läuft noch immer sehr zufriedenstellend.
Natürlich ist der "Support" für den sdcc nicht so gut wie beim GCC
für den AVR, wenn man sich aber ein bisschen damit beschäftigt, kann
man auch mit dem sdcc prima programmieren.
Wenn man allerdings den aktuellen Snapshot benutzt, sollte man ein
wenig Assembler können, da durchaus der ein oder andere Fehler nich
drin sein könnte. Beim GCC ist das ja auch nicht anders, nur dass halt
so viele den benutzen, dass das in kürzester Zeit auffällt.

von Nick (Gast)


Lesenswert?

danke erstml fuer eure anteilnahme....

also ich habe auch gcc installiert, compilier damit auch meine c
progs., nur hat jemand ne ahnung, welche funktion ich nutzen muss um
den gcc als cross compiler zu nutzen?ich habe mal irgendwie was gelesen
das es etwa so aussehen muss: gcc -s *.c , aber mehr hab ich aucvh nciht
dazu gefunden, muss ja dann noch die org adresse (also startadresse
festlegen) und das dann noch linken, das ich dann zum schluss ein
lauffaehiges hex file hab.

zu den leuten die meinen sdcc ist garnicht so schlecht (kann ja sein),
nur koennt ihr mir mal sagen, wie ich genau mit dem arbeite, das ich
wirklich emin lauffaegmis programm am ende hab.
als beispiel ein port auff einen anderen ausgeben oder so (also etwas
einfaches)???


danke schonmal

mfg

nick

von Jörg Wunsch (Gast)


Lesenswert?

Du musst den GCC als Cross-Compiler entsprechend konfigurieren und
compilieren.  Das ist keine zur Laufzeit auswählbare Option.

Aber glaub doch bitte endlich mal allen, die es dir nun hier schon
geschrieben haben: einen GCC mit target=8051 gibt es nicht.

von Andreas (Gast)


Lesenswert?

Du weisst aber, dass der GCC keinen 8051-Code erzeugen kann?
Du müsstest also den Prozessor wechseln.

von Andreas (Gast)


Lesenswert?

Hehe, gleichzeitig ;)

Der sdcc erzeugt eigentlich standardmässig beim Aufruf über "sdcc
main.c" ein (Intel)Hex-File. Das heisst dann main.ihx.
Bist Du sicher, dass da nicht vorher ein Fehler aufgetreten ist?

von Chris (Gast)


Lesenswert?

Ich schreib dazu lieber nichts nicky!

von Nick (Gast)


Lesenswert?

ich habe doch ganz oben geschrieben, was fuer files ich erzeugt hab, dar
unter auch ihx.....nur meine frage ist, wie kann ich den code
optimieren, denn er erst einmal zu lang und dann laeuft er noch nicht
einmal....onbwohl ich in eminem beispiel prog., nur einer variablen
ein wert zugewiesen habe!

von Andreas (Gast)


Lesenswert?

Naja, von ihx habe ich nichts gelesen.
Du weiss, dass ein Intel-Hex-File kein nackter
Binär-Flashspeicherauszug ist?
Der Programmer wandelt das noch um und flasht es erst dann.
Das bedeutet, das Binärfile ist deutlich kleiner.

Ausserdem erzeugt der sdcc natürlich immer einen Standard-Startup-Code,
in dem diverses schon initialisiert wird (macht jeder Compiler).
Du kannst natürlich ein Overlay machen, Du musst dich dann aber um ein
paar Sachen selber kümmern.

Wie ist denn Dein Code und wie lang ist das Binary?

von Nick (Gast)


Lesenswert?

ihr schreibt immer das alles so einfach ist und so.....nur wenn mich
kein problem haette, wuerde ich hier ja nicht um hilfe schreiben g...
also geht mal von eurem standart runter und schreibt, warscheinlich
fuer euch auf dem level eines grundschuelers, genau was man tun muss!

danke

also ich habe ein tolle funktion unter linux gefunden, namens
makebin...man kann damit ihx files in binary code wandeln....da ich so
verzweifelt bin, hab mich mir gedacht, dieses ihx file erst in binary
und dann in ein hex zu wandeln....hat jemand ne idee, wie ich auf mein
hex file komme, denn soweit ich weiss, kann ich das hex file nur nin
mein mikrocontroller jagen und letztendlich damit arbeiten.

danke

von Nick (Gast)


Lesenswert?

ich habe gerade ein befehl gefunden:

mv main.ihx main.hex //wandelt das ihx in hex um....


werde ich jetzt gleich mal ausprobieren....aber schreibt mir mal
trotzdem eure meinungen und vorschlaege!

danke

mfg

nick

von Thomas X. (Gast)


Lesenswert?

das ist aber ein scherz, oder ?
(wenn nicht, gib mal "man mv" in einem terminal ein...)

von Rufus T. Firefly (Gast)


Lesenswert?

Das ist kein Scherz.
*.ihx ist bereits ein Hexdateiformat, nämlich Intel-Hex.

Einfach mal mit Notepad so eine Datei ansehen. Und vielleicht in der
Dokumentation des Programmiergerätes/der Programmiersoftware nachsehen,
welches Dateiformat gewünscht ist.

von Sepp (Gast)


Lesenswert?

Naja, offensichtlich hat er noch ein Verständnisproblem.

Als ich damals mit MCs angefangen habe, habe ich mir auch aus
Kostengründen für den 8048 einen Eprom-Emulator gestrickt und die
Bin-Dateien per copy über die serielle Schnittstelle verschickt.
Dazu musste ich das auch wandeln. Und mein Wandlerprogramm hat die
Extension .hex automatisch an den Dateinamen angehängt (gute alte
Dos-Zeit).

@Nick:
Schau zuerstmal nach, ob Deine Software Intel-Hex kann. Dann kannst Du
auch die ihx-Dateien direkt verwenden.

Das beste ist, Du schreibst mal, welche Umgebung Du verwendest:
Hardware, Software, Kabel, etc. Auch Dein Testprogramm.

Dann ist Dein Ziel schnell erreicht.

von Nick (Gast)


Lesenswert?

also meine software kann kein ihx...aber ich habe einen tollen befehl
gefunden, naemlich mv main.ihx main.hex, womit ich ihx in hex
wandle...naja ich habe mich jetzt schon soweit eingearbeitet und es
laufen auch schon die ersten programme....

ich habe mir eine library geschrieben und dort meine ports als
variablen deklariert und denen adressen zugewiesen.
also ich kann jetzt einfach so alles nutzen, muss mir jetzt nur noch
ein paar feinheiten angucken, wie ich z.b. ein db erstelle unter c und
wie ich mit dem dptr arbeite...


achja und nochwas, wenn man mit dem mv befehl arbeitet ist der source
ziemlich lang, den kann man mit packihx main.ihx > main.hex kuerzen!

danke trotzdem, obwohl mir die meisten beitraege nur geringuegig
geholfen haben g,  nicht boese gemeint, aber es war wirlich so!

dankeschoen

mfg

nick

von OldBug (Gast)


Lesenswert?

Das ist ja nicht mehr auszuhalten!

mv [m]o[v]e move => verschieben!

Das ist das GNU/MinGW/BSD/*nix Pendant zu nem DOS rename...

von Nick (Gast)


Lesenswert?

was willst du denn du spinner, wenn du so ein profi bist, was machst du
denn bitte in diesem forum :)

ich aendere einfach nur die endung, ist mir schon klar, genauso wie das
mv von move abstammt!
ich denke das ich mehr sprachen kann und in jeder weiter bin als du,
also muss ich mir von dir nichts erklaeren oder bloed kommen lassen du
newbe...soweit kommts noch, das mann noch dumm angemacht wird, weil man
in einem hilfe-forum fragen stellt und nur dumme antworten
bekommt....ich sollte meine page erweitern, das mann zumindest einen
platz, im netz, mit konreten infos uebers programmieren hat.
denn wenn man mal so im netz guckt, findet man vielleicht ein bisschen
ueber c, aber nichts richtiges ueber assembler, java (obwohl man dort
eigentlich nicht so hilfe braucht) oder xml, etc.

naja ist jedem selber ueberlassen!

von Jörg Wunsch (Gast)


Lesenswert?

plonk

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.