Geschwindigkeit avr-gcc bei 1 oder 0 setzen

Gast #4295735
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
}
Gast #4295761
> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.