Das Hemd ausziehen


Sie ziehen sich aus. Gleich hab ich dich! Er wild mich an und stampft auf wie ein Stier!

Site Pages


Die gesetzlichen Rahmenbedingungen für die Wirtschaft sind im Kanton Thurgau nämlich gut. Dieser Punkt hat für mich sogar noch einen höheren Stellenwert als die vieldiskutierte Frage der Verkehrsanbindung. Ich bin gerne hier und habe nicht die Absicht, mit meiner Firma den Thurgau zu verlassen. Das ändert jedoch nichts daran, dass eine Schnellstrasse auch in meinen Augen dringend nötig wäre. Was bestimmt nicht angestrebt wird, ist ein Wachstum um jeden Preis. Grundsätzlich möchte ich an unseren drei bisherigen Geschäftsbereichen — dem Innenausbau, den Communication Desks und der Klimatechnik — festhalten, wobei vorgesehen ist, letztgenannte Sparte noch auszubauen.

Am hohen Qualitätsstandard, der unseren guten Ruf im In- und Ausland begründet hat, darf es sicher keine Abstriche geben. Mein Tagblatt Bibliothek Merkliste Kürzlich gelesen.

Vielen Dank für Ihre Anmeldung. Ihr Konto ist aktiviert. Wir wünschen Ihnen viel Lesevergnügen. Vielen Dank für Ihre Bestellung. Hier speichern Sie interessante Artikel, um sie später zu lesen. Legen Sie Ihr persönliches Archiv an. Finden Sie gespeicherte Artikel schnell und einfach. Der Verein kann mit seinen Veranstaltungen in Räume der Schule ausweichen, wenn der Vereinsraum in der Mühlgasse nicht zur Verfügung steht. Höhepunkte der Mineralien-AG sind die Exkursionen.

Bisher wurden folgende Exkursionsziele z. Halde der ehemaligen Grube Wildermann in Müsen im Siegerland. Hier wurde auch das Stahlbergmuseum besucht und der Stahlberger Erbstollen befahren. Steinbruch Bellerberg bei Ettringen in der Osteifel.

Diese Exkursion wurde an einem Samstag in Zusammenarbeit mit den Herborner Mineralienfreunden durchgeführt. Halde der ehemaligen Grube Alte Mahlscheid bei Herdorf, z. Mit dem Bus des TV Herborn Im Basaltpark Bad Marienberg. Exkursion ins Bergbaumuseum in Sassenroth und auf die Halde der ehem. Grube Alte Mahlscheid bei Herdorf Gruppe auf der Halde. Dokumentiert werden die Exkursionen in einem Schaukasten der AG, die mit jeder Exkursion neu gestaltet wird.

Hier werden neben Informationen zu den Exkursionszielen auch Bilder der Teilnehmer und Mikrofotos ihrer Funde gezeigt. Schauvitrine der Mineralien-AG in der Schule. Also bezogen genau auf diesen letzten Schritt. Der Compiler ist viel zu kleinkariert, selbst innerhalb einer C-Datei betrachtet er jede Funktion mehr oder weniger unabhängig. Glaube mir, zehn Minuten kommen da schnell zusammen. Hätte ich kein Problem mit. Das wird wohl genau das Problem sein. Ich brauche Code für die Praxis. Es gibt - für andere Prozessorarchitekturen - sehr gute Compiler!

Also stimmst du mir zu, dass der erzeugte Code besser geworden ist Ich habe nicht geschrieben, dass der Code mit 4. Aber er ist mit 4. Der Code war zwar besser, aber wirklich stabil war das Teil auch nicht. Ich würde nicht mehr tauschen wollen, anfangs hielt ich mich auch etwas zurück, aber seit 4. Das werde ich später mal versuchen. In den Code lese ich mich ja schon ein. Meine Freizeit ist leider auch begrenzt.

Ich werde die anderen Infos auch entsprechend versuchen zu verstehen. Das meiste erledige ich dabei aber auch mit C. Ich nutze den C51 dafür. Es gibt einen Freeware-Assembler für die Der C51 erzeugt wunderbaren Code aus den C-Dateien. Das Teil ist glaube ich schon steinalt und funktioniert einwandfrei.

Der Code ist dabei so dicht, dass man meistens noch nicht einmal mehr eine Möglichkeit fände um nur ein einzelnes Byte einsparen zu können! Die vorhandenen Optimierungsstufen sind auch weit weniger ausführlich und kompliziert wie die des GCC. Hauptsächlich findet die Arbeit durch einen simplen Peephole-Optimizer statt. Du magst nun zwar vielleicht schon schmunzeln, aber unterschätze nicht, wie viel Zeit die schon investiert haben!

Der "Trick", den dieser Compiler nutzt, ist es, zu wissen, was er produziert hat! Und dieses Wissens wird für die weitere Codeerzeugung ausgenutzt. Es gibt beispielsweise die Option "Global Register Coloring". Dabei wählt der Compiler die Register so aus, dass möglichst wenig Kollisionen zu den vorherigen Registerbelegungen entstehen. Die Registerbelegungen werden in weiteren Durchläufen soweit verbessert, bis sie okay sind.

Der Compiler muss dazu halt manchmal sechs, sieben Male den Code nachbearbeiten bis es passt. Der avr-gcc betrachtet jede Funktion für sich, die Parameter werden immer angefangen mit r24 übergeben usw. Daran "krankt" das Teil. Angenommen ich rufe in der Funktion "a" in der Datei a. Nun braucht "a" ein temporäres Register "r12" zum Beispiel, also kommt zu Beginn push und zum Ende pop. Aber vielleicht braucht ja "b" gar nicht "r12". Dann hätte man sich das sparen können.

Der einzige Nachteil durch dieses Verfahren ist, dass man Assemblercode und C nicht nach belieben mischen kann, da es keine immer gültige Registerbelegung gibt. Bedenke jetzt, dass ein nur acht Register und einen Pointer hat. Es sollte also hier noch leichter sein, so etwas zu implementieren. Sicher, der GCC ist dafür nicht ausgelegt. Und die Kunden sind zufrieden. Jedenfalls ist es der Industriestandard für -C-Compiler!

Wenn du das umsetzen könntest, wäre es eine Bereicherung. Mit den Bit-Zahlen tut er sich ja auch etwas schwer. Ich verwende auch 2. Vielleicht liegt es daran? Den GCC kannst du aber immer noch mit --disable-lto daran hindern dies auch umzusetzen. Die Kompilierung dauert dreimal solange, wenn man dies nicht abschaltet. Da ich diese Funktionalität nicht brauche, habe nicht lange geforscht sondern einfach abgeschaltet.

Ich erzeuge mir den Windows-avr-gcc direkt mit MinGW. Dauert zwar auch ewig, ich habe dann aber die Gewissheit das es auch funktioniert. Ich nutze LTO so gerne, weil dies gerade die oben beschriebenen Nachteile ausgleicht. Gerade durch dieses Feature kam ich dazu avr-gcc 4. Und die Aussicht, dass die Freitags gestartete Kompilierung vom Linux-Kernel bereits nach dem Wochenende fertig sein wird, wird endlich für den längst erforderlichen Innovationsschub in der PC-Branche sorgen, denn bisher weiss ja niemand so richtig, wozu man Prozessoren in non-Gamer PCs brauchen kann.

Optimierungsstufen auswählen sollte man schon noch können Wie die Leute ihre Makefiles schreiben, hat ja nix direkt mit Sprachstandards zu tun, sondern sie wollen einfach Zeit sparem beim mehrfachen Compilieren. Was gespart wird, ist Lexen und Parsen, viel mehr nicht. Nimm folgenden Einzeiler auf einer Architektur, die nicht auf den gesamten Speicher direkt zugreifen kann: Das würde ich mich auch fragen. Da bestehen einige Abhängigkeiten. Wäre es umsetzbar im Falle von LTO den Vorgang an der Stelle bereits abzubrechen, wo die für die eigentliche Kompilierung erforderlichen Daten gesammelt sind?

Der direkt erzeugte Code in den Objekt-Dateien wird ja sowieso verworfen. Ich schrieb ja, dass mit LTO versucht wird, diese Punkte zu verbessern. Der Idealzustand sähe natürlich anders aus.

Aber dennoch ist eine kleine Verbesserung immer noch besser als keine Verbesserung, oder wie siehst du das? Sonst wäre wohl kaum so viel Zeit in die Entwicklung investiert worden. Ja, genau die habe ich auch. Ist mir nicht gelungen, vermutlich sind die Abhängigkeiten schon zu modern für das alte Teil, ob ein eigenes Kompilat daher besser oder schlechter wäre, kann ich nicht beurteilen. Das dieses Kind einen Namen hat, war ja klar. Ja, so einfach geht das natürlich auch wieder nicht. Freies verwenden der Funktionen kreuz und quer durch die Module geht damit nicht mehr.

Der C51 schaut im ersten Schritt nach den Abhängigkeiten, also welche Funktion ruft welche andere Funktion auf usw.

Das merkt er sich dann in einer Datei. Nun beginnt die eigentliche Kompilierung in der er zunächst, wie in der normalen Kompilierung ohne diese Optimierung auch, die Register verteilt. Ist auch nicht dokumentiert, vermutlich Betriebsgeheimnis. Wenn man jetzt relativ kleinere Änderungen an einer Funktion vornimmt kann es sein, dass diese Änderung durch Neukompilierung des betreffenden Moduls erledigt ist. Der Compiler erkennt dies ja daran, ob sich die Abhängigkeiten durch die Änderung ebenfalls geändert haben oder nicht.

Der C51 gehört heute zu ARM. Denen wäre es wohl eher gelegen, wenn Atmel mehr Chips mit deren Core verkauft anstelle eines besseren Compilers für die Konkurrenz zu entwickeln. Und dann schätze ich, dass deren Teil alles andere als portabel ist. Habe ich noch nie in einem Quellcode gesehen und gelesen habe ich davon, glaube ich, auch noch nichts. Wie werden die an Funktionen übergeben? Wie ein Bitter nur mit einem Byte Verschwendung?

Das quält sich ewig lange herum. Zwischendrin kommen massenhaft Warnungen und andere Hinweise. Ja, "unable to find a register to spill", aber auch "Segmentation Fault". Wenn man versucht diesen Sachen etwas auf den Grund zu gehen, verläuft es sich meistens in reload1. Für die Bugreports kenne ich mich zu wenig mit diesen Sachen aus. Man müsste ja auch einen reproduzierbaren Codeschnippsel beifügen usw. Mir ist noch etwas eingefallen: Bisher hat -mcall-prologues immer gute Dienste geleistet.

Ist dir dies auch bereits aufgefallen? Es ist mehr als die Makefiles der Nutzer, Johann. Bibliotheken können ja auch noch mit dazu kommen. Wenn jeder in seine Code noch den kompletten Sourcecode der libc mit ablegen sollte, wären die Leute auch kaum glücklich.

Einfach mal in gcc-help oder so nachfragen. Wenn man zwischen den Zeilen liest: Den imingwgcc, den ich für Canadian Cross verwende, zeigt als Version 3. Und mit Überstzen von 4. Nach aussen hin sind diese Funktionen weder verwend- nocht sichtbar. Allerdings hab ich mich auch schon gefragt, warum diese Optimierung nicht gemacht wird. Die Schwierigkeiten und Schweinereien, denen man sich dabei gegenübersieht, sind allerdings nicht zu unterschätzen.

Auch hier könnte ein Nachfragen in gee-help oder gcc interessante neue Gesichtspuunkte bringen — auch in die Semantik von C und den Linkprozess als solchen. Schlecht, denn er macht Fehler und verflucht die Tools. Wie stellst du das sicher? Intern werden 3-Byte Werte mit geraden Registern beginnend abgelegt.

Vielleicht sollte das noch geändert werden? Gewinnen tut man dadurch ja nix, es macht nur die Registerallokierung schwerer Wenn dir sowas um die Ohren fliegt, hast du doch direkt die Zeile auf der Console stehen, die crasht.

Dann macht man -save-temps -v zum Aufruf hinzu ist ist i. Ok, mit IA64 können sich die trotzdem nicht messen. Wenn es so etwas schon gäbe, dann höchstens genauso undokumentiert wie die 24 Bit-Integer. Ich werde also nochmals recherchieren und falls ich nichts finde, an den Support schreiben.

Schaden kann es keinen anrichten. Dann hoffen wir mal, dass nichts dem Mainstream in die Quere kommt Da gab es, glaube ich, auch anfangs erst Probleme.

Das Register Coloring findet ja nicht auf einer hochsprachlichen Ebene statt, sondern erst auf maschinensprachlichem Niveau. Freut mich, dass du diese Art der Optimierung nicht verteufelst und mich überhaupt schon so lange mit meinen kritischen Beiträgen erträgst.

Aber ich ginge ja noch weiter! Würde man einen modernen C-Compiler so aufbauen wie beispielsweise einen Java- oder C -Compiler, so bräuchte man noch nicht einmal mehr Headerfiles. Java wird ja auch "irgendwie" im GCC unterstützt - ausprobiert habe ich dies aber noch nicht selbst. Wobei Java eher wieder ein schlechtes Beispiel ist, weil hier aus jeder ". Wenn ein C-Compiler ebenfalls alle Module auf einmal verarbeiten würde, wüsste er, was in welchen Modul definiert ist und bräuchte daher keine externen Deklarationen mehr.

Das wäre doch mal was, oder? Wenn der Compiler die Definition schon kennt, kann er ja über eine redundante externe Deklaration hinwegsehen. Libraries müssten dann natürlich auch sich selbstbeschreibende Metadaten mitbringen. Steht aber doch sowieso in den Debuginfos, oder? Ansonsten bräuchte es hier halt weiterhin das Headerfile. Würde ich das direkt an GCC vorschlagen, würden die mich für vermutlich verrückt halten, oder was meinst du?

Die Meldung, dass die Definition nicht mehr zur Deklaration passt, erhalte ich zumindest fast täglich. Gerne übersieht man so etwas. Eigentlich jedes Handy hat heute einen ARM. Die haben Register - mit denen arbeite ich auch. Aber so ist das halt, wenn alles aus einem Guss ist. Nein, natürlich ist der Anwender dafür nicht verantwortlich. Ich habe mich zu unpräzise ausgedrückt. Der C51 macht das alles automatisch, du kannst natürlich jeden beliebigen, korrekten, Code schreiben.

Mit "geht nicht mehr" meinte ich vielmehr, dass nachdem bereits Module kompiliert wurden, nicht mehr alles möglich ist, ohne diese Module erneut kompilieren zu müssen, da durch die Optimierung Abhängigkeiten entstehen. Auch dies geschieht automatisch. Wie bereits geschrieben, hat der Compiler eine Tabelle erzeugt, was von was abhängig ist. Anhand dieser Daten wird entschieden, was erneut, im Falle einer Änderung, zu kompilieren ist.

Ändert du in einem Projekt mit zehn Modulen also in einem Modul eine Kleinigkeit, kann es sein, dass fünf andere Module ebenfalls neukompiliert werden müssen. Ist dir jetzt klarer, wie ich es meinte? Nun ja, ein 8 Bit-Integer würde da noch reinpassen.

Das dürfte auf dem AVR der häufigste Datentyp sein! Bedenke auch, dass es Funktionen gibt, die mehr als zwei, drei Parameter haben können.





Links:
Wie man die liquidität am aktienmarkt misst | Was ist internationale Handelsökonomie? | Msci acwi-gewichteter Index | Anfängerleitfaden für den Devisenhandel | Kontinuierliche diskontierungssatzformel | Hauptzweck des Freihandelsabkommens | Siehe Hop Trading |