Pointer auf Struktur

Gast #4944114
Lesenswert?

Hallo, ich möchte auf diese Struktur in einer anderen C Datei zugreifen 
können. Quasi soll die MAC-Adresse verändert werden. Mit einer extern 
Anweisung könnte ich dann auf diese Struktur zugreifen. Wie könnte man 
sowas realisieren?
1
struct netif xnetif = 
2
{
3
  /* set MAC hardware address length */
4
  .hwaddr_len = (u8_t)ETHARP_HWADDR_LEN,
5

6
  /* set MAC hardware address */
7
  .hwaddr =  {(u8_t)MAC_ADDR0, (u8_t)MAC_ADDR1,
8
              (u8_t)MAC_ADDR2, (u8_t)MAC_ADDR3,
9
              (u8_t)MAC_ADDR4, (u8_t)MAC_ADDR5},
10

11
  /* maximum transfer unit */
12
  .mtu = 1500U,
13

14
  .name = {IFNAME0, IFNAME1},
15
};
Gast #4944134
Lesenswert?

leo schrieb:
> Quasi soll die MAC-Adresse verändert werden. Mit einer extern
> Anweisung könnte ich dann auf diese Struktur zugreifen. Wie könnte man
> sowas realisieren?

Ich würde die Struktur mit nem typedef als Typ definieren (z.B. 
"T_NETIF")  und die Definition in ein gemeinsames Headerfile eintragen. 
Dann kannste in der anderen C-Datei mit "extern T_NETIF xnetif" darauf 
zugreifen.
Persönliche Seite #4944141
Lesenswert?

Nop schrieb:
> Ich würde die Struktur mit nem typedef als Typ definieren (z.B.
> "T_NETIF")  und die Definition in ein gemeinsames Headerfile eintragen.
> Dann kannste in der anderen C-Datei mit "extern T_NETIF xnetif" darauf
> zugreifen.

Es geht auch ohne typedef, ein
1
extern struct netif xnetif;

genügt, sofern die Deklaration der Struktur selbst auch zugänglich 
ist, d.h. welche Elemente sie hat und welche Typen diese haben.
Gast #4944195
Lesenswert?

Ok vielen Dank. Hab das mit extern gelöst.

Auf folgende Struktur müsste ich ebenfalls von außen zugreifen. Wie wird 
sowas dann realisiert?
1
static XMC_ETH_MAC_t eth_mac =
2
{
3
  .regs = ETH0,
4
  .address = MAC_ADDR,
5
  .rx_desc = ETH_LWIP_0_rx_desc,
6
  .tx_desc = ETH_LWIP_0_tx_desc,
7
  .rx_buf = &ETH_LWIP_0_rx_buf[0][0],
8
  .tx_buf = &ETH_LWIP_0_tx_buf[0][0],
9
  .num_rx_buf = ETH_LWIP_0_NUM_RX_BUF,
10
  .num_tx_buf = ETH_LWIP_0_NUM_TX_BUF
11
};
Gast #4944231
Lesenswert?

leo schrieb:
> extern static XMC_ETH_MAC_t eth_mac;
>
> --> error: multiple storage classes in declaration specifiers

Klar. Wenn Du etwas mit static im File-Scope deklarierst, kannst Du 
darauf in einem anderen File nicht mit extern zugreifen. Das ist der 
Sinn von file-static.
Persönliche Seite #4944343
Lesenswert?

Daniel A. schrieb:
> static = nur in diesem .c file zugreifbar

Wenn man die Adresse des Objekts hat, dann ist es auch von einem anderen 
Modul aus zugraifbar.

> extern static = von anderen .c dateien zugreifbar und nur in diesem .c

"extern static" ist in C nicht möglich.  Und
1
static int x;
2
extern int x;
Ist zwar möglich in C, bedeutet aber etwas anderes.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren