Gast
#179273
Hallo,
als Anfänger (C, Assembler und MCU) spiele ich derzeit die einfachsten
Sachen im Atmel Studio (4.10.356 mit Mega16) durch, um zu lernen.
Folgendes kann ich nicht so ganz verstehen:
#define ALPHA 3
#define BETA 5
#define RK 2000
int RW, ADC;
int main (void)
{
RW=(ALPHA+BETA)*RK;
ADC=RW/10;
}
braucht in der .text-Sektion 266 und insgesamt 303 Prozessortakte zum
Endergebnis. Wenn ich statt RW die Formel zur Berechnung von RW
einsetze
#define ALPHA 3
#define BETA 5
#define RK 2000
int RW, ADC;
int main (void)
{
RW=(ALPHA+BETA)*RK;
ADC=(ALPHA+BETA)*RK/10;
}
braucht es in der .text-Sektion nur 184 und insgesamt nur 70
Prozessortakte. Das ist ja ein enormer Unterschied. Warum? In der
Assemblerausgabe kann ich es leider aus Unkenntnis nicht ergründen. Daß
obiges Beispiel mit Konstanten für ALPHA etc. schneller und
platzsparender ist als die Werte in Variablen zu verpacken ist
einleuchtend (auf die muß immer erst zugegriffen und der Wert geladen
werden).
Zusatzfrage: Überall habe ich gelesen, daß Kommazahlen vermieden werden
sollten, da sie irren Rechenaufwand erzeugen würden. Wenn ich aber für
ALPHA und BETA Kommazahlen nehme (z.B. 3.6 und 5.1) bleiben
Speicherverbrauch und Prozessortakte gleich ?!
Gruß
Manni