Yalu X. schrieb:
> gls_setting = (Setting_t)settinginit;
Danke, Yalu, das war's, was mir gefehlt hat.
Damit ist die Frage für mich beantwortet und ich bin glücklich. Trotzdem
noch kurz zu den anderen Posts, deren Ansätze ja auch nicht verkehrt
sind:
g457 schrieb:
> int main(void)
> {
> resettodefault();
> // [..]
> }
Das ist der vorherige Stand, von dem ich weg will, weil mein Startup
ohnehin schon immer länger wird und dummerweise der Start ungefähr so
aussieht:
1 | int main(void)
|
2 | {
|
3 | uint_fast8_t status = 0;
|
4 |
|
5 | resettodefault(); // Ueberschreibt gls_setting
|
6 | // Nicht wegmachen! Wird gebraucht fuer
|
7 | // I2C-Initialisierung
|
8 |
|
9 | status |= i2c_init();
|
10 | if(status)
|
11 | goto settings_error;
|
12 |
|
13 | status |= loadconfigfromeeprom(); // Ueberschreibt gls_setting
|
14 | if (status)
|
15 | goto settings_error;
|
16 |
|
17 | [...]
|
18 |
|
19 | settings_error:
|
20 |
|
21 | if(status) {
|
22 | resettodefault(); // Ueberschreibt gls_setting
|
23 | }
|
24 |
|
25 | [...]
|
26 |
|
27 | }
|
Irgendwie ist es mir diese Funktion am Anfang, die eine Variable
beschreibt, die später auf jeden Fall überschrieben wird, schon lange
ein Dorn im Auge. Spätestens beim nächsten Aufräumen will ich sie mal
wieder wegmachen und suche dann nach dem Fehler im I2C-Teil.
Johann L. schrieb:
> Lege eine init-Objekt an, das nicht verändert wird. Bei Bedarf wird
> dieses per memcpy in die Zielstruktur kopiert.
Momentan habe ich massig Flash, aber wenig SRAM frei. Aber ich behalte
die Methode mal im Hinterkopf.
Vielen Dank und viele Grüße
W.T.