"Je nach Prozessor ist eine Shift-Operation recht ineffizient."
hm, irgendwie klingt das für mich seltsam. Ich bin jetzt kein
E-Techniker, habe noch nie einen Prozessor gebaut, aber kann ich mir
leider nicht besonders gut vorstellen, was man an einer Shift-Operation
besonders ineffizient machen kann. Kannst du mir das mal erläutern?
Zu den beiden Code-Schnippseln:
int seg;
for (seg = SEG1; seg <= SEG4; seg++)
{
SEGPORT |= (1 << seg);
spi_out(seg[16]);
SEGPORT &= (1 << seg);
}
und
int seg;
int i;
seg = 1 << SEG1;
for (i = 0; i < 4; i++)
{
SEGPORT |= seg;
spi_out(seg[16]);
SEGPORT &= seg;
seg <<= 1;
}
also den Compiler, der aus dem obigen Fetzen nicht denselben Code
erzeugt, wie aus dem unteren (wenn man nicht gerade alle Optimierungen
ausschaltet), sollte man wirklich nicht verwenden.
zu guter letzt: hast du dir eigentlich mal angeschaut, was der Compiler
bei höchster Optimierungsstufe, aus dem originär abgebildeten Listing
macht. Ich kann mir vorstellen, dass es Laufzeittechnisch auf jeden
Fall schneller sein sollte und sich von der Codegröße her auch in
Grenzen halten sollte.
Ciao, Fabian