Es geht um die "j" schleife in main. Wenn ich diese so stehen lasse,
führt dies zu mehreren kurzen Blinkpulsen an den LED, die leider nichts
mit einem dem gewünschten hochdimmen der LED zu tun hat.
Wenn ich nun die äußere Schleife weglasse und stattdessen 32 mal den
inneren Teil hinschreibe und manuell das "j" in DimValue =
pwmtable_8D[j] durch die Werte 0..31 ersetze, funktioniert mein Code
einwandfrei.
Hat jemand eine Idee, woran das liegen könnte? Aus meiner Sicht sollten
beide Codedarstellungen zum gleichen Resultat führen (mal die paar Takte
differenz in der Verarbeitungszeit außenvor gelassen).
Was könnte der Compiler da komisches mit meinem Code machen? Oder was
gibt es für Seiteneffekte, die mir da reinspucken können?
Ein Compilieren mit -O0 hat leider auch keinen erfolg gebracht...
Viele Grüße,
Martin
Und noch als Ergänzung: mit "ausgerollter" Schleife funktioniert es,
weil der Optimierer die Ausdrücke mit konstantem Index direkt durch die
Werte ersetzt (z.B. "pwmtable_8D[30]" wird direkt durch "215" ersetzt),
es also zur Laufzeit gar keine Array-Zugriffe mehr gibt.
Vielen Dank, das wars! Ärgerlich, dass das ausschreiben geklappt hat,
sonst hätte ich vielleicht eher einen Anhaltspunkt gefunden, woran es
liegt :-)
Eine kleine Frage habe ich noch:
Wird der Code langsamer, wenn ich Tabellen in den Programmspace
auslager? wenn das so ist, dann würde ich das erst dann manchen, wenn
ich an sehe, dass ich mit meinem Platz nicht hinkomme.
Da ich in diesem Fall z.Zt. nur diese eine Tabelle habe, macht das
wahrscheinlich nicht den riesen Unterschied, was den Speicher angeht,
aber ggf einen Unterschied bezüglich der Laufzeit.
Vielen Dank noch einmal für die schnelle Hilfe!