Forum

Einloggen | Registrieren | RSS  

for-Schleife Timing ..... (Elektronik)

verfasst von bastelix(R), 07.03.2023, 22:19 Uhr

Klar, da kann man noch einiges machen:

» for (int g=7;g>=0;g--) {
» if(bitRead(COLOR[0][0], g)==0) {
for (uint8_t g = 7; g >= 0; --g) {
if ((COLOR[0][0] & ( 1 << g )) >> g) { /* ... */ } else { /* ... */ }
}

1. --g statt g-- spart Arbeitsspeicher und (wenn ich mich richtig erinnere) drei CPU Zyklen.
2. Shift-Operator verwenden statt Methoden Aufruf spart einen Methodenaufruf... Außer wenn der Compiler die readBit-Aurufe eh inline macht, dann gewinnst lediglich schwerer lesbaren Code.

So und wenn du wirklich schneller werden willst, dann schmeiß die Schleife weg und mach aus dem if je Bit einfach ein switch(CORLOR[0][0]) und für jede mögliche Konstellation die in der Variablen drin stehen kann einen case-Statement (die kann man auch zusammenfassen wenn für verschiedene Bitmuster das gleiche gemacht werden soll).

Das mit dem prefix-Operator kannst du dir angewöhnen, das schadet nicht. Den postfix-Operator wirst du dann nur noch verwenden wenn du ihn wirklich brauchst ;-)
Shift-Operatoren statt einer (inline) Methode würde ich Anfängern nicht empfehlen, das kann der Compiler mittlerweile besser.



Gesamter Thread:

for-Schleife Timing ..... - Zahnlos72(R), 07.03.2023, 19:35 (Elektronik)
for-Schleife Timing ..... - bastelix(R), 07.03.2023, 22:19
for-Schleife Timing ..... - Zahnlos72(R), 07.03.2023, 23:42
for-Schleife Timing ..... - bastelix(R), 08.03.2023, 22:37
for-Schleife Timing ..... - Zahnlos72(R), 09.03.2023, 10:12
for-Schleife Timing ..... - Zahnlos72(R), 09.03.2023, 12:52