Du musst die Typ-Definition deines Structs in ein Header-File auslagern.
in das kann dann auch die "extern"-Zeile.
in main.c dann die Variable anlegen und initialisieren, aus xx.c kannst
du dann darauf zugreifen.
(in xx.c muss auch bekannt sein, wie die struct intern aussieht, also
z.B. dass es darin ein Member "mac" gibt)
Simon schrieb:> //main.c> static const struct _module_config
static heißt, dass der Namne von außen nicht sichtbar ist. Warum hast du
das da hingeschrieben?
> {> uint16_t passkey[8];> uint8_t mac[6]; // 6b Mac Address of Module> } module_config = { {0} , {0xAA,0xBB,0xCC,0x11,0x22,0x33} };>> //xx.c> extern _module_config module_config;
Hier versuchst du, von außen den Namen zu benutzen, den du oben explizit
gegen die Nutzung von außen gesperrt hast.
Das ist aber nicht der Grund für die Fehlermeldung. Wie nicht"Gast" oben
schon geschrieben hat, heißt der Typ nicht _module_config, sondern
struct _module_config, und der Typ muss natürlich in xx.c auch bekannt
sein.
Ja, sollte so passen, sofern du mit "alle_anderen.c" eine einzelne Datei
und nicht alle anderen C-Files meinst. Die unterste Zeile darf nur in
genau einer Datei stehen.
Zwei kleine Hinweise...
Simon schrieb:>...
Wenn man das "ausführlich" schreibt, ist das also:
1
struct_module_config
2
{
3
uint16_tpasskey[8];
4
uint8_tmac[6];
5
};
6
7
externconststruct_module_configmodule_config;
Bezeichner "sollten" in C allerdings nicht mit einem Unterstrich
beginnen. (Um potentielle Konflikte mit vom Compiler definierten Namen
zu vermeiden.)
nicht"Gast" schrieb:> und wieder...>> das static muss natürlich auch weg, wenn du das struct in anderen> Dateien benutzen willst.
Manchmal kann es sinnvoll sein (static const) Variablen im Header zu
instantiieren. Man erhält in jedem Object File eine (identische)
Instanz. Durch das "static" gibt es keine Namenskonflikte. Man könnte
also durchaus in den Header schreiben: