Also mein Vorschlag war eigentlich der hier:
void Power_Init(void) {
#if (POWER >= 0 && POWER <= MAX_GPIO)
Port_Write(POWER, POWER_ON, false);
pinMode(POWER, OUTPUT); // Only necessary for GPIO. For port-expander it's done (previously) via Port_init()
#endif
}
Das ist aber nicht im Sinne des Erfinders der Power_Init(), weil damit ja schon frühzeitig die externe Spannung eingeschaltet wird. (Allerdings immer noch später als bei Verwendung des PE, wo es schon in Port_Init() passiert…)
Den Defaultwert einfach konfigurierbar zu machen, hilft auch nicht, denn ein Default POWER_OFF würde bei einem Neustart während des Startens die Spannung abschalten.
Eigentlich müsste man Power_Init() und Port_Init() als Parameter mitgeben, ob es ein Neustart oder ein Power-On war. Und dann kann in den Funktionen entschieden werden, ob und an welchen Pins herumgestellt wird.
Für @compactflash könnte das reichen:
void Power_Init(void) {
#if (POWER >= 0 && POWER <= MAX_GPIO)
#ifdef POWER_DEFAULT
Port_Write(POWER, POWER_DEFAULT, false);
#endif
pinMode(POWER, OUTPUT); // Only necessary for GPIO. For port-expander it's done (previously) via Port_init()
#endif
}
Dann kann er
#define POWER_DEFAULT POWER_ON
in seine settings.h schreiben und für alle anderen bleibt es wie es ist. Und es ist vielleicht etwas verständlicher, was der Code machen soll.