Mit
1 | wert = wert * 205 / 256U;
|
sparst du auch noch die Integerdivision, wobei trotz der scheinbaren
Ungenauigkeit des Ausdrucks die gleichen Ergebnisse geliefert werden
wie bei deiner oder Karl Heinzs Lösung. Wenn für die Variable wert
auch unsigned char geht (ich kenne den Wertebereich in deiner
Anwendung nicht), wird das Programm noch einmal 4 Bytes kürzer.
Noch ein Tip, falls du das nicht sowieso schon gemacht hast: Wenn du
irgendwo tatsäschlich Floatingpoint-Berechnungen brauchst, empfiehlt
es sich, die Mathebibliothek der avr-libc zu linken (-lm), auch wenn
keine trigonometrischen oder logarithmischen Funktionen benötigt
werden. Die avr-libc enthält für die Grundrechenarten handgemachte
Assemblerfunktionen anstelle der standardmäßig verwendeten
C-Funktionen der gcclib. Das spart in deinem Beispiel, wo drei der
Funktionen benötigt werden, ca. 1,5 KB Code.