Absender: Timo Sandmann
Datum: Do, 17.03.2011 14:03:44
In-reply-to:
<1300354622.1889.13.camel@wbam-laptop>
References:
<1300113254.2830.20.camel@wbam-laptop> <ED53C8B8-A510-4333-B1FC-EF04BAEB2FB6@xxxxxxxxxxxxxxx> <AANLkTinDzHyAGV5e_mcyuTYyOmkh-CfkVJ8jqRyDQhpY@xxxxxxxxxxxxxx> <BABA8C2D-442E-4E5E-AF85-9F2FABFAE50A@xxxxxxxxxxxxxxx> <1300279238.1554.38.camel@wbam-desktop> <C80EDE0C-9375-4A1F-8F54-7ECB2EF3F797@xxxxxxxxxxxxxxx> <1300354622.1889.13.camel@wbam-laptop>
Am 17.03.2011 um 10:37 schrieb Simon Siemens: > Hi Timo, > > ich habe mit Matthias Hopf, dem openSUSE-Paketbauer, über den Patch > gesprochen. Er findet die FreeBSD-Patches sehr interessant und kann sich > gut vorstellen, dass ein ähnliches Paket in openSUSE aufgenommen würde. > Gleichzeitig warf er aber auch die Frage auf, warum wir denn nicht die > Bibliotheksfunktion cli (und andere, z.B. in avr/interrupt.h) benutzten. > Diese seien schließlich für Anwendungsprogrammierer gedacht. Da habe ich > nun keine Ahnung. Warum? Das Problem ist bei cli, dass dieser Befehl, wenn er im Code steht, in der Regel auch sofort ausgeführt werden sollte, also genau dort, wo er im Programm vorkommt. Der Compiler erkennt dort aber keine Abhängigkeiten, weshalb er den cli-Befehl unter Umständen verschiebt (falls der Code optimiert werden soll). Das ist z.B. dann kritisch, wenn man erreichen möchte, dass ein 16 Bit oder 32 Bit Speicherzugriff atomar erfolgt. Oder bei der Implementierung eines Locking-Mechanismus oder wenn das Programm den Stackpointer verändern möchte (was zwei Speicherzugriffe erfordert). Darum gibt es die Builtin-Funktion dafür, dann weiß der Compiler, dass er dort nichts umordnen sollte. Ich weiß nicht mehr genau wo, aber ich hatte das Problem, dass cli vom Compiler verschoben wurde an einer Stelle und habe deshalb seitdem die Builtin-Funktion dafür verwendet, um dem Problem aus dem Weg zu gehen und außerdem den Sachverhalt nicht bei jeder neuen Compiler-Version erneut überprüfen zu müssen. Entsprechende Fehler sind extrem schwer zu finden. Das Delay-Builtin ist mehr eine Optimierung, die das Delay exakter macht und Code spart, wenn man aus o.a. Gründen aber sowieso die Builtins braucht, kann man davon auch gleich profitieren. Grüße, Timo