Na, dann reicht doch ein Pointer auf ein Arrayelement. Den musst Du
nirgends speichern, sondern nur bei Aufruf von Funktionen, die was damit
anstellen sollen, bestimmen und übergeben.
Das zweite Modul greift dann nur und ausschließlich über diesen Pointer
auf die Struktur und ihre Elemente zu, und muss nichts davon wissen, daß
mehrere Strukturen in einem Array enthalten sind.
Dazu musst Du nur strukturiert vorgehen:
Der typedef, der die Struktur SLAVE_INFO definiert, gehört in eine
Headerdatei (*.h).
Diese ist von jedem Modul, das etwas mit diesen Strukturen anstellen
will, eingebunden werden.
Das Array selbst muss nicht global bekannt sein.
Also:
Headerdatei "defs.h"
1 | #ifndef INCLUDED_DEFS_H
|
2 | #define INCLUDED_DEFS_H
|
3 |
|
4 | #define MAX_SLAVE 32
|
5 |
|
6 | typedef struct
|
7 | {
|
8 | Uint8 Active;
|
9 | Uint8 Serial_1;
|
10 | // .. etc.
|
11 | } SLAVE_INFO;
|
12 | #endif
|
Headerdatei "modul1.h"
1 | #include "defs.h"
|
2 |
|
3 | int machirgendwas1(SLAVE_INFO* p);
|
Headerdatei "modul2.h"
1 | #include "defs.h"
|
2 |
|
3 | int machwasanderes2(SLAVE_INFO* p);
|
C-Source "modul1.c"
1 | #include "modul1.h"
|
2 |
|
3 | int machirgendwas1(SLAVE_INFO* p)
|
4 | {
|
5 | p->Active = 0;
|
6 |
|
7 | return (p->Status);
|
8 | }
|
C-Source "modul2.c" weggelassen.
C-Source "main.c"
1 | #include "modul1.h"
|
2 | #include "modul2.h"
|
3 |
|
4 | SLAVE_INFO slave_info[MAX_SLAVE];
|
5 |
|
6 | void main(void)
|
7 | {
|
8 | machirgendwas1(slave_info + 3);
|
9 |
|
10 | machwasanderes2(slave_info + 4);
|
11 | }
|
Ich habe allerdings einen Verdacht, könnte es sein, daß Deine Struktur
nicht ein Gerät, sondern eine fest definierte Anzahl von Geräten
beschreiben soll?
Warum enthält Deine Struktur mehrere Elemente gleichen Namens mit
angehängter Nummer?
Wenn das dazu dient, verschiedene Geräte auseinanderzuhalten, dann ist
das ein Designfehler, weil es das Konzept des Arrays komplett ad
absurdum führt.
Du solltest die Struktur so definieren, daß sie genau ein Gerät
beschreibt; daß es mehrere Geräte gibt, ist ja durch das Array geklärt.
Wenn ich das richtig interpretiert habe, sollte die Struktur also so
aussehen:
1 | typedef struct SLAVE_INFO
|
2 | {
|
3 | Uint8 Active;
|
4 | Uint8 Serial;
|
5 | Uint8 Status;
|
6 | Uint8 SlaveAddr;
|
7 | Uint8 Uist;
|
8 | Uint8 List;
|
9 | Uint8 PwrUpCnt;
|
10 | Uint8 Time;
|
11 | Uint8 Config;
|
12 | }
|
Oder habe ich Dich da missverstanden?