initializer element is not constant

Gast #790594
Lesenswert?

Hallo zusammen.

Ich hab da ein kleines Problem.
Hier der Codeausschnitt:

1
//enc.h
2
unsigned char GetMac1();
3

4
//enc.c
5
unsigned char GetMac1()
6
{
7
  MAC_DDR = 0x00;
8
  return MAC1;
9
}
10

11
//uipopt.h
12
#define UIP_FIXEDETHADDR 1
13
//hier mein stümperhafter Eintrag
14
#define UIP_ETHADDR0    GetMac1()
15
//ENCJ28J60_MACx existieren
16
#define UIP_ETHADDR1  ENC28J60_MAC2
17
#define UIP_ETHADDR2  ENC28J60_MAC3
18
#define UIP_ETHADDR3  ENC28J60_MAC4
19
#define UIP_ETHADDR4  ENC28J60_MAC5
20
#define UIP_ETHADDR5  ENC28J60_MAC6
21

22
//uip.c
23
const struct uip_eth_addr uip_ethaddr = {{UIP_ETHADDR0,
24
            UIP_ETHADDR1,
25
            UIP_ETHADDR2,
26
            UIP_ETHADDR3,
27
            UIP_ETHADDR4,
28
            UIP_ETHADDR5}};

Die Fehlermeldung:
../Net/uip/uip.c:132: error: initializer element is not constant
../Net/uip/uip.c:132: error: (near initialization for 
'uip_ethaddr.addr[0]')

Wie kann ich mein Ausgabe dort einfügen?
#790629
Lesenswert?

Sepp wrote:
> Puhh. Was mach ich da, bzw wo mach ich das. Sowas hab ich ja noch nie
> gesehen.

Ne andere Frage:
Wer oder was ist eigentlich MAC1? Ich vermute mal, das
ist ein Makro

Hintergrund: Gibt es einen Grund, warum du das nicht
so schreiben willst:

#define UIP_ETHADDR0    MAC1
#790639
Lesenswert?

Sepp wrote:
> Puhh. Was mach ich da, bzw wo mach ich das. Sowas hab ich ja noch nie
> gesehen.


Ich hoffe Rolf stimmt mir zu wenn ich sage: Musst du auch
nicht verstehen. Der Komma-Operator ist, nun ja, eine Waffe.

Im Übrigen hätte dir das Makro auch bei deinem Problem nicht
geholfen, da eine Zuweisung (und eine solche ist ja im Makro
enthalten) nun mal in einer Funktion stehen muss.
Gast #790642
Lesenswert?

Hallo

also MAC1 sind Eingänge. Also hier soll MAC1 mit PINF gleichgesetzt 
sein. Ich will damit den Hexwert zweier Hexswitcher auslesen.
somit sollte #define UIP_ETHADDR0 MAC1 auch nicht funktionieren (,oder?)
#790648
Lesenswert?

Sepp wrote:
> Hallo
>
> also MAC1 sind Eingänge. Also hier soll MAC1 mit PINF gleichgesetzt
> sein. Ich will damit den Hexwert zweier Hexswitcher auslesen.
> somit sollte #define UIP_ETHADDR0 MAC1 auch nicht funktionieren (,oder?)

Wenn MAC1 etwas darstellt, was zur Compilezeit zu einer Konstanten
evaluiert, dann sollte das schon gehen.
Gast #790656
Lesenswert?

Also die Funktion ist raus. Die Zuweisung ist jetzt direkt, so wie von 
kbuchegg beschrieben. Leider wieder gleicher Fehler.
../Net/uip/uip.c:131: error: initializer element is not constant
../Net/uip/uip.c:131: error: (near initialization for 
'uip_ethaddr.addr[0]')


Das würde leider erklären warum jeder, der einen Webserver baut eine 
fest Mac vergibt.
#790669
Lesenswert?

Sepp wrote:

> Das würde leider erklären warum jeder, der einen Webserver baut eine
> fest Mac vergibt.

Ich würde sagen, das liegt eher daran, dass die Mac Adresse eigentlich 
fest sein sollte.

Mach einfach das const weg, und weise den Wert am Anfang von main zu. 
Dann sollte es gehen.
Gast #790684
Lesenswert?

Das war auch mein Gedanke. Leider wirft mir dann das Die uip tausende 
von Fehlermeldungen an verschiedensten stellen.
Die Lösung wird sein dem Makefile das generieren eines Defines zu 
überlassen und das änderen des Makefiles (also der MAC-Adressen) einem 
Script.

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