Neustart schlägt fehl, abhängig von SD-Karte

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.

1 „Gefällt mir“