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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.