Forum: Mikrocontroller und Digitale Elektronik Geschwindigkeit avr-gcc bei 1 oder 0 setzen


von Hermann Mikroc (Gast)


Lesenswert?

Hallo,

gibt es einen Geschwindigkeitsunterschied zwischen diesen 2 Anweisungen?
1
uint8_t data;
2
void func0(uint8_t pos, uint8_t val)
3
{
4
data &= ~(1<<pos);
5
data |= (val<<pos);
6
}
1
uint8_t data;
2
void func0(uint8_t pos, uint8_t val)
3
{
4
if(val) data |= (1<<pos);
5
else data &= ~(1<<pos);
6
}

von Falk B. (falk)


Lesenswert?

Schau dir das .lss File an.

von Peter II (Gast)


Lesenswert?

Hermann Mikroc schrieb:
> gibt es einen Geschwindigkeitsunterschied zwischen diesen 2 Anweisungen?

beide machen etwas anders, damit ist es wenig sinnvoll es zu 
vergleichen.

Beide sind eh "sehr" langsam, weil "1<<pos" in einer schleife bearbeitet 
werden muss.

von Noch einer (Gast)


Lesenswert?

> weil "1<<pos" in einer schleife bearbeitet werden muss

Wenn der gcc den Inhalt der Funktion nicht kennt. Die geben sich einige 
Mühe, so etwas als Inline-Funktion zu optimieren.

von Peter II (Gast)


Lesenswert?

Noch einer schrieb:
> Wenn der gcc den Inhalt der Funktion nicht kennt. Die geben sich einige
> Mühe, so etwas als Inline-Funktion zu optimieren.

dann sollte man es aber als Makro schreiben, wenn man Geschwindigkeit 
braucht.

von Planlos (Gast)


Lesenswert?

Peter II schrieb:
> weil "1<<pos" in einer schleife bearbeitet
> werden muss.

Nur wenn die Hardware keinen Maschinen-Befehl zum variablen Shift hat.
GCC kann mehr als nur AVR.

von Jim M. (turboj)


Lesenswert?

Planlos schrieb:
> GCC kann mehr als nur AVR.

Überschrift beachten.

Und ja, man sollte sich lieber die .lss Datei anschauen, denn so eine 
simple Funktion wird gerne mal inline verwendet.

Übrigens sind die beiden Varianten nicht im Ergebnis identisch, wenn val 
andere Werte als 0 oder 1 annehmen kann.

von (prx) A. K. (prx)


Lesenswert?

Peter II schrieb:
> dann sollte man es aber als Makro schreiben, wenn man Geschwindigkeit
> braucht.

Oder eleganter als Inline-Fcn.

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.