MONO crosscompile mit Freetz

Die MIPS-Architektur (ich sage es mal so) ist sehr sehr vielfältig. Im Disassembly habe ich die falschen Befehle schon identifiziert. Ich muss mal bei Gelegenheit suchen wo diese generiert werden.
Das wird aber heute nicht mehr.
 
Ich kann das schwer abschätzen, denkst Du ein funktionierender Patch ist möglich. Oder sind es einfach zu viele Stellen im Code wo geändert werden muss?

Scheinbar bist Du zur Zeit der Einzige mit dem nötigen KnowHow der es versucht und ich denke Du wirst sicher auch nicht unbegrenzt Zeit investieren wollen?
 
Ist schon irgendwie deprimierend, es findet sich immer wieder etwas neues :( (den letzten Punkt hatte ich schon im Bauch). Und es ist schon ziemlich viel Zeit rein geflossen. Nun hab ich aber langsam den Überblick und hab einiges gelernt :). Zum Beispiel warum Makros böse sind , und davon wird im mono-jit massiv Gebrauch gemacht. Interessant ist z.B. das der Mono-Jit meiner bescheidenen Meinung nach, effektiveren Maschinencode generiert, wie der GCC. Also sollte sogar die Laufzeit (wie unter Windows, hab ich mal getestet) leicht besser sein (hab noch keine Perfomancetests gemacht, da ich vermute, dass der mono-GC das plus wieder relativiert ;) ).
Es gibt noch ein Paar Sachen, die das ganze ziemlich in Arbeit ausarten lassen.

Aber ich werde trotzdem dran bleiben, nur etwas langsamer. Ich werde mal schauen, ob man dem Entwicklungsablauf etwas einfacher gestalten kann (zuletzt ab ich schon VS bemühen müssen um den Überblick zuhalten).

Bei mir läuft es schon ziemlich gut, aber ich verwende in meinen Programm kaum float's,TimeSpan's,DateTime's.
 
Freut mich zu hören, dass Du noch nicht die Lust verloren hast. Ich denke Mono auf der Box zum Fliegen zu bekommen ist der Aufwand wert.

Die Technologie ist zwar (noch) nicht so sehr populär unter Linux, hat aber in meinen Augen riesiges Potential. Mittlerweile sind ja ziemlich viele .NET Komponenten Open Source, so das man auf ein riesiges Repertoire zurückgreifen kann.

Zudem kann ich aus Erfahrung mit ARM CPUs sagen, dass die MONO-Performance ziemlich gut ist und sicher auf der Box auch gut laufen wird!
 
Zum Beispiel warum Makros böse sind
Und warum sind Makros böse?
Interessant ist z.B. das der Mono-Jit meiner bescheidenen Meinung nach, effektiveren Maschinencode generiert, wie der GCC.
Hast Du Beispiele dafür? Ich hatte eher den Eindruck, dass einige der Beispiele hier etwas umständlich waren. Oder hattest Du bei denen die Optimierung ausgeschaltet?
 
Makros:
- Es werden teilweise Makros Bildschirmseitenweise benutzt. Da weiß man manchmal nicht mehr woran man ist. Btw. bei mir überschreiten Funktionen selten eine Bildschirmhöhe, wegen der Lesbarkeit. #if's haben bei mir nur die Berechtigung für ein paar wenige Zeilen. Such mal nach #if 0, bzw. o32. Meiner Meinung nach entscheiden Compiler meist eh besser was z.B. eingebettet werden soll.
- Die Schachtlung der Macros und die Änderungen der Macros mit #if's sind fürchterlich. Man weiß mitunter nicht was er da rein generiert. Mach ich persönlich kaum, da ich mehrmals in meinen Leben schon richtig schön in die **** gegriffen habe (Stichwort Wartbarkeit nach Jahren).
- Nicht zum Thema Macros. Aber schau dir mal die switch-Anweisungen an. Dort hängen manchmal größere Codeabschnitte drin.

Ich hatte meist die Optimierung auf Os, bei beiden (GCC und Mono). Es ist insgesamt aber nur der erste Eindruck. Bei irgendeinen Bsp hat Mono eine Funktion eingebettet, wo der GCC es nicht getan hat. Dadurch konnte der Optimizer eine wichtige Variable wesentlich länger im Register halten und hat einen Stackframe gespart.
Was du wahrscheinlich ansprichst, ist das er manchmal sinnlos den Speicher schreibt, bzw. Variablen nicht weg optimiert.
Wenn ich noch studieren würde, hätte ich das bestimmt mal untersucht, aber leider muss man ja ab und zu arbeiten ;).

Unter Windows hab ich das mal ein bisschen beobachtet, da ist es oft so, dass Stackframes und Sprünge durch ausrollen oder einbetten eingespart werden. Man muss nur mit sealed, private und static umgehen können. Manchmal schafft er es Variablen komplett zu eliminieren.

Was ich mich frage, wie man so einen Code wartet bzw. entwickelt? vi und make? Oder bin ich schon zu Weich gespült?
 
Zuletzt bearbeitet:
vielleicht kann man mit jemanden aus dem MONO Team Kontakt aufnehmen? Vom Gefühl her sind wir ja schon einige Schritte weiter gekommen. Selbst ein Hello World klappt schon!
 
Es gibt einige Stellen mit #if 0, wobei das vermutlich alte Code-Stücke sind, wo sich jemand nicht sicher war, ob sie vielleicht doch einen Sinn haben.
Makros, auch längere, sind nicht von sich aus schlimm. Was wäre denn die Alternative? Auch die Länge von Funktionen ist kein Kriterium. Wenn in einem Switch viele Fälle vorkommen, wird die Funktion nun mal lang. Klar kann man auch jeden Switch Fall in eine eigene Funktion verfrachten, aber wird davon das Ganze übersichtlicher?

Die Optimierung -Os bedeutet zumindest beim GCC, dass auf Größe optimiert werden soll. Da ist das Einbetten von Funktionen eher kontraproduktiv, da kann man dem GCC nicht vorwerfen, dass er es nicht tut. Wenn man statt dessen auf Geschwindigkeit optimiert, wird einiges verschoben, eingebettet, ausgerollt usw. Das Programm wird dann eben auch größer. Und ich kann mich nicht erinnern, dass GCC bei eingeschalteter Optimierung, ob für Größe oder Geschwindigkeit, Werte von einem temporären Platz zu einem anderen kopiert hat.

Ich würde emacs statt vi nehmen, und make hat nur mit der Übersetzung und nicht mit der Entwicklung zu tun. Sinnvollerweise sollte man vorher einen Überblick haben, wie das Programm arbeiten soll.

@clay
Im Momo Team kümmert sich anscheinend derzeit niemand um MIPS, aber vermutlich werden sie die Änderungen übernehmen, wenn es damit nicht an anderer Stelle Probleme gibt.
 
Es gibt einige Stellen mit #if 0, wobei das vermutlich alte Code-Stücke sind, wo sich jemand nicht sicher war, ob sie vielleicht doch einen Sinn haben.
Makros, auch längere, sind nicht von sich aus schlimm. Was wäre denn die Alternative? Auch die Länge von Funktionen ist kein Kriterium. Wenn in einem Switch viele Fälle vorkommen, wird die Funktion nun mal lang. Klar kann man auch jeden Switch Fall in eine eigene Funktion verfrachten, aber wird davon das Ganze übersichtlicher?

Ich weiß, man kann sich über so was streiten, es handelt sich immer um meine Meinung/Erfahrung. Achtung, manchmal bin ich etwas extrem in meinen Aussagen ;).

Meiner Meinung nach verwirren solche Abschnitte und gehören gelöscht. Zu was gibt es Revisionssystem. Wie es aussieht hat jemand mal die ARM-Datei kopiert und dann angepasst. Meine Vermutung.

Nein, Makros sind nicht schlimm, ich finde sie erschweren nur eine späteres Review. Ich würde für die verschiedenen Fälle Funktionen schreiben und passend benennen (mono_mips_addint32_n32, mono_mips_addint32_o32, ...). Das verkürzt das #if, und der Compiler löscht die tote Funktion.

Lange Switch-Anweisungen lassen sich manchmal nicht vermeiden, doch sollte man in solchen Anweisung Codeblöcke/Fälle die viele Zeilen haben vermeiden, damit man es nicht noch mehr in die Länge zieht. Gibt es im vi codefolding? Das nutze ich dann meist, um es kürzer zu halten (bsp.: NextToken).

Die Optimierung -Os bedeutet zumindest beim GCC, dass auf Größe optimiert werden soll. Da ist das Einbetten von Funktionen eher kontraproduktiv, da kann man dem GCC nicht vorwerfen, dass er es nicht tut. Wenn man statt dessen auf Geschwindigkeit optimiert, wird einiges verschoben, eingebettet, ausgerollt usw. Das Programm wird dann eben auch größer. Und ich kann mich nicht erinnern, dass GCC bei eingeschalteter Optimierung, ob für Größe oder Geschwindigkeit, Werte von einem temporären Platz zu einem anderen kopiert hat.

Kann ich schon ;). Die Funktion wird genau einmal gerufen, ein einbetten würde den Code verkleinern, da der Stackframe gespart werden kann. Ach, Optimierung ist ein schönes Thema ... wird aber ein bisschen zu OffTopic. Für die Diskussion brauch ich ein Bier :).

Ich würde emacs statt vi nehmen, und make hat nur mit der Übersetzung und nicht mit der Entwicklung zu tun. Sinnvollerweise sollte man vorher einen Überblick haben, wie das Programm arbeiten soll.

Ich bin enttäuscht, vi hab ich wenigstens vor 10 Jahren viel mit gemacht. emacs hab ich irgendwie keinen Zugang zu. Wie schafft man sich den Überblick, ohne Code zu markieren, Definitionslisten, Calltree's ... . Gibt es nichts komfortableres? Bin leider über die Jahre durch Borland Pascal/Cpp, Delphi, VS etwas verweichlicht ;) *. Gerade wenn man fremden Code bearbeitet finde ich solche Werkzeuge extrem praktisch und zeitsparend. Denn man muss sich ja erstmal den Überblick verschaffen, und da ist schön wenn man ein wenig mit den Code spielen kann?

Btw. keine Sorge ich hab schon einiges zusammengebaut, auch auf exotischer Hardware, make hab ich früher auch oft eingesetzt. Verwende ich aber auch seit langem nicht mehr.

vielleicht kann man mit jemanden aus dem MONO Team Kontakt aufnehmen? Vom Gefühl her sind wir ja schon einige Schritte weiter gekommen. Selbst ein Hello World klappt schon.
Wie ich bei meinen vorherigen Recherchen gesehen habe, gibt es keinen Maintainer bzw. keinen den es Interessiert und die Aufnahme ist meiner Meinung nach erst möglich wenn man Seiteneffekte ausschließen kann. Das werde ich nicht leisten können. Fehlt mir einfach die Hardware und Zeit.
So, wie ich das Überblicke ist die Mips-Architektur ein ziemliches Sammelwerk an verschiedensten Konfiguration und es wird schwer sein jemals alle zu unterstützen.

Es wäre schon schön, wenn man mit dem Urheber reden könnte, aber ich denke das bleibt ein Wunsch. Da sind wir wohl auf uns gestellt.

Zum Thema:
Ich werde so wie es die Zeit zulässt daran weiter arbeiten, dass es hoffentlich irgendwann sauber funktioniert. Das wird aber wohl in den nächsten Monat nicht werden. Erstens ist Sommer, zweitens muss ich noch beruflich ein Projekt durchbringen.
Es ist furchtbar spannend für mich, da ich etwas von der low-level Entwicklung abgekommen bin und zur Zeit immer komplexe Systeme verwalten muss, und eigentlich hab ich vor vielen Monden so mal angefangen.


* Ich bin kein Maus-Schuppser, es gibt ja Kurztasten. Aber gerade für Codereviews finde ich es angenehmer, via Maus und vielen Fenster sich durch zu wühlen. Auf dem Wischschirmen müssen Sie aber noch ein bisschen fein tunen.
 
Danke für die ausführliche Antwort!
Ich hab immer noch die Hoffnung, dass es doch nicht soooo viele Stellen sind, wo geändert werden muss. Eventuell findet sich dann jemand aus dem Mono Team der den hoffentlich baldigen Patch begutachtet und aufnimmt. Die Fritzbox ist ja doch sehr verbreitet. Leider kann ich nicht so viel dazu beitragen und hoffe Du bleibst dran an dem Thema. Ich bin hauptsächlich in Hochsprachen unterwegs und wage mich eher selten an C oder gar tiefer heran....
 
irgendwelche weiteren Erkenntnisse???
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,709
Beiträge
2,256,329
Mitglieder
374,727
Neuestes Mitglied
Linda Lees
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.