Genau. Aber du weisst es.Zitat:
hallo, die den compiler bauen ,wissen es nicht immer
Warum gehst du nicht ins Heise-Forum zum rumtrollen?
Druckbare Version
Genau. Aber du weisst es.Zitat:
hallo, die den compiler bauen ,wissen es nicht immer
Warum gehst du nicht ins Heise-Forum zum rumtrollen?
ach ja:
ist das hier ein Forum für den Austausch von Leuten die sich damit befassen oder sind hier nur "Profis" wie du zugelassen? Es ist auch immer mal wieder nervig wenn die selben Anfängerfragen zum 100sten Mal auftauchen, aber genau dafür ist das Forum doch gut.Zitat:
auch gibt es einige "programmierdussel" im "avr-forum".
Warum solltest du also jemand namentlich nennen können? *kopfschüttel*
Jein. Das ist aber noch nicht alles. Volatile ist primär eine Kennzeichnung für den Optimiere im gcc, die angibt, dass eine Variable auch ausserhalb des regulären Programmflusses den Wert ändern kann, z.B. durch eine Interrupt-Routine oder weil die Variable auf ein Hardware-Register gemapt ist.Zitat:
Zitat von pebisoft
Volatile heisst für der Optimierer "don't touch".
Wenn eine Volatile Variable gesetzt bzw. abgefragt wird, wird diese Operation auch immer ausgeführt.
Beispiel:
-KlausCode:int t;
t = 0;
if (t) {
// Wird vom Compiler idR wegoptimiert, da er erkennt, dass t=0 ist.
}
volatile int t;
t = 0;
if (t) {
// Wird nicht wegoptimiert
}
jein, das stimmt nicht alles, die variable wird nicht wegoptimiert, sie ist immer noch existens, bloss sie wird mi einer beliebigen zahl belegt, die einem bei der fehlersuche ganz schön zu schaffen machen kann.
mfg pebisoft
Argl! Ist das denn so schwer? KlausR hat doch ein gutes Beispiel gebracht.
Die Variable wird in seinem Beispiel an der Stelle "if(t)" wegoptimiert, weil t=0 und damit genauso "if(0)" stehen könnte.
Die Variable wurde ja deklariert und kann damit nicht einfach gelöscht werden (sio wie dein Beitrag impliziert). Aber an der angegebenen Stelle verschwindet die weil unnötig (aus Sicht des Optimierers).
er schreibt "in der regel", das heisst, es machen nicht alle winavr-versionen.
mfg pebisoft
Pepisoft die hamm schon recht.
Es wird auch nicht die Variable wegoptimiert sondern nur die if Anweisung oder for() Schleife etc.
Das die Variable ohne volatile unsinnige Wert bekommt ist auch nicht automatisch so. Das war nur in unserem Fall (srf04 Messung) so da wir der Variable Werte von Hardwareregistern zugewiesen haben
Und WinAVR programmiert niemand, das ist nur der GNU gcc Compiler von dem das abhängt.
Gruß Muraad