PIC18F97J60 Deklaration Array XC8

OP #6179694
Lesenswert?

Hallo Zusammen,

ich würde gerne die MAX Adresse aus einem 24AA02E48 (I2C) bzw. einem 
25AA02E48 (SPI) auslesen. Nun bin gerade dabei den Code zu optimieren. 
Um die Ansteuerung des Busses geht es nicht.

Leider stoße ich bei der Deklaration von einem einfachen Array auf ein 
Problem. Wenn die die einzelnen Teile in einzelne Variablen schreibe 
dann funktioniert alles. Allerdings wenn ich das ganze mit einem Array 
versehen will mekert der Compiler -> conflicting declarations for 
variable "MAC_Adr". Ich bin mir sicher dass dies nur eine Winzigkeit bei 
der Schreibweise ist. Weiß jemand waran das liegt?
1
//ursprüngliche Aufruf unverändert
2
//#define MAC_ADDRESS {0x00,0x04,0xa3,0x00,0x16,0x06}     // MAC-Adresse
3

4
// Variante 1 funktioniert
5
const unsigned int MAC_Adr_0 = 0x00;
6
const unsigned int MAC_Adr_1 = 0x00;
7
const unsigned int MAC_Adr_2 = 0x04;
8
const unsigned int MAC_Adr_3 = 0xa3;
9
const unsigned int MAC_Adr_4 = 0x00;
10
const unsigned int MAC_Adr_5 = 0x16;
11
const unsigned int MAC_Adr_6 = 0x06;
12

13
#define MAC_ADDRESS {MAC_Adr_0, MAC_Adr_1, MAC_Adr_2, MAC_Adr_3, MAC_Adr_4, MAC_Adr_5}     // MAC-Adresse
14

15

16
// Variante 2 mit Array geht nicht
17
const unsigned int MAC_Adr[] = {0x00,0x00,0x00,0x00,0x00,0x00};
18
MAC_Adr[0] = 0x00;
19
MAC_Adr[1] = 0x04;
20
MAC_Adr[2] = 0xa3;
21
MAC_Adr[3] = 0x00;
22
MAC_Adr[4] = 0x16;
23
MAC_Adr[5] = 0x06;
24

25
#define MAC_ADDRESS {MAC_Adr[0],MAC_Adr[1],MAC_Adr[2],MAC_Adr[3],MAC_Adr[4],MAC_Adr[5]}     // MAC-Adresse

Viele Grüße
Ingo
Gast #6179700
Lesenswert?

Ingo S. schrieb:
> // Variante 2 mit Array geht nicht
> const unsigned int MAC_Adr[] = {0x00,0x00,0x00,0x00,0x00,0x00};
> MAC_Adr[0] = 0x00;
> MAC_Adr[1] = 0x04;
> MAC_Adr[2] = 0xa3;
> MAC_Adr[3] = 0x00;
> MAC_Adr[4] = 0x16;
> MAC_Adr[5] = 0x06;

Ein als "const" definiertes Array sollte man auch nicht mehr ändern 
wollen. Dann wäre es ja nicht konstant.
Lass einfach das "const" weg!
Gast #6179736
Lesenswert?

> -> unsigned char ist für MAC Adressen der passende Typ
> -> Länge des Array bei der Deklaration explizit angeben.
> -> Initialisierung mit Nullen ist überflüssig.

+ Vielleicht mal einen K&R kaufen.
Gast #6179793
Lesenswert?

Teo D. schrieb:
> Ah der MCC... Ich glaube das Zeug, das Mikrochip so mitliefert, ist
> nicht C99 kompatibel. Stell das mal auf C90 um!?

Wenn man keine Ahnung hat, einfach mal die Fresse halten!
XC8 Kann C99!

Ingo S. schrieb:
> // Variante 2 mit Array geht nicht
> const unsigned int MAC_Adr[] = {0x00,0x00,0x00,0x00,0x00,0x00};
> MAC_Adr[0] = 0x00;
> MAC_Adr[1] = 0x04;
> MAC_Adr[2] = 0xa3;
> MAC_Adr[3] = 0x00;
> MAC_Adr[4] = 0x16;
> MAC_Adr[5] = 0x06;

Wie denn auch, ausserhalb einer Funktion kannst du nur initalisieren und 
nicht eine Zuweisung durchführen!

g457 schrieb:
> // Variante 2 mit Array geht
> const unsigned int MAC_Adr[] = { 0x00, 0x04, 0xa3, 0x00, 0x16, 0x06 };

Korrekt!
#6179809
Lesenswert?

AllesKönner schrieb:
> Wenn man keine Ahnung hat, einfach mal die Fresse halten!
> XC8 Kann C99!

Dito..... 8-O

Der CX8 ja, nicht aber die Programmierer bei Mikrochip.
Ich hatte ständig Ärger mit angeblichen doppelten Deklarationen in den 
MCC_Files, die ich nicht nachvollziehen konnte. Auf C90 umgestellt und 
alles funst wie gedacht und erwartet...
Angehängte Dateien:
Gast #6179815
Lesenswert?

Ingo S. schrieb:
> //#define MAC_ADDRESS {0x00,0x04,0xa3,0x00,0x16,0x06}     // MAC-Adresse

//oder auch so
const unsigned int MAC_Adr[] = MAC_ADDRESS;

//oder so
enum {MAC_ADDR0, MAC_ADDR1, MAC_ADDR2, MAC_ADDR3, MAC_ADDR4, MAC_ADDR5};

const unsigned int MAC_Adr[] = {
   [MAC_ADDR0] = {0x00},
   [MAC_ADDR1] = {0x04},
   //...
};
Gast #6179830
Lesenswert?

Teo D. schrieb:
> Ich hatte ständig Ärger mit angeblichen doppelten Deklarationen in den
> MCC_Files, die ich nicht nachvollziehen konnte. Auf C90 umgestellt und
> alles funst wie gedacht und erwartet...

Das ist wohl eher ein Problem der Hausfrau und deine Lösung via "Einfach 
mal den Stecker ziehen und wieder reinstecken" entspricht diesem Level.


Ich arbeite seit Jahren mit xc8 und kann sagen, dass es gibt kein 
Problem mit xc8 und c99 Konformität gibt.

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