Ich sehe mehrere Antworten.
1. Effizienz im Sinne von kurzer Arbeitszeit. Du hast funktionierenden
Code, jedes weitere Feilen daran wäre ineffizient (es sei denn, es
leichtere Wartung oder Wiederverwendung spielen eine Rolle).
2. Effizienz im Sinne von geringer Sourcecode-Länge (siehe Wartbarkeit):
Voraussetzung: IN_R1_Auf ... IN_R8_Auf, O_Roll_1_Auf ... O_Roll_8_Auf,
usw gehen jeweils in 1er-Schritten aufwärts, dann geht das so:
#define ROLLO_HIN_UND_HER(ROLLO) \
if( get_key_short( 1<<(IN_R1_Auf+ROLLO) ) ) \
{ \
Rollo_kommpletAuf(O_Roll_1_Auf+ROLLO) \
...
RolloPort &=~(1<<O_Roll_1_Zu+ROLLO) \
}
ROLLO_HIN_UND_HER(0)
ROLLO_HIN_UND_HER(1)
...
ROLLO_HIN_UND_HER(8)
3. Effizienz im Sinne von geringer Objectcode-Länge (Flash sparen)
(wobei ich mir nicht ganz sicher bin, dass der Overhead von der Loop und
der Parametrisierung nicht die Ersparnis kaputtmacht)
void rollo_hin_und_her_1(int rollo)
if( get_key_short( 1<<(IN_R1_Auf+rollo) ) )
{
Rollo_kommpletAuf(O_Roll_1_Auf+rollo)
...
RolloPort &=~(1<<O_Roll_1_Zu+rollo)
}
void rollo_hin_und_her_alle(void)
{
for (int i=0; i<8; i++)
rollo_hin_und_her_1(i);
}
4. Effizienz im Sinne von geringem Ram/Registerverbrauch
void rollo_hin_und_her_1(int rollo)
if( get_key_short( 1<<(IN_R1_Auf+rollo) ) )
{
Rollo_kommpletAuf(O_Roll_1_Auf+rollo)
...
RolloPort &=~(1<<O_Roll_1_Zu+rollo)
}
rollo_hin_und_her_1(1);
rollo_hin_und_her_1(2);
...
rollo_hin_und_her_1(8);
Die Effizienzkriterien können, müssen aber nicht, einander
widersprechen.
/***
Rein typographische Anmerkung: Viele Techniker machen das und Du wurdest
offenbar infiziert, aber Rufzeichen! braucht man nur, wenn es wirklich
um Ausrufe oder Schreie geht, nicht für normale Aussagen oder
Fehlermeldungen.
"Kein Artikel mit der Nummer 3829 in der Datenbank."
"Domain mikkrokkontroller.net exisitiert nicht."
aber:
"Du Trottel hast schon wieder das Passwort flasch eingegeben!"
mit mehr Schmackes:
"Du hast den Mistkübel schon wieder nicht hinuntergetragen!!11!"
***/