Forum: Compiler & IDEs AVR Pointer auf char array


von Trillian (Gast)


Lesenswert?

Folgender C-Code fuehrt zu dieser Warnung:

warning: assignment from incompatible pointer type
1
  unsigned char a[4] = { 0x00, 0x00, 0x00, 0x00 };
2
  unsigned long *ptr;
3
  ptr = a;
4
  *ptr = 1000000UL;

Der Hintergrund dabei ist, das ich sowohl Byteweise als auch als long 
auf des Array zugreifen moechte.
Eine union waere eine Moeglichkeit, jedoch muesste das doch auch mit 
einem typecast gehen, oder?

Herzlichen Dank fuer jede Hilfe :)

von Sven P. (Gast)


Lesenswert?

Entweder casten oder ein C-Buch lesen, wo was über union erklärt wird 
:-)
1
unsigned long *ptr = (unsigned long *) a;

Am Rande: Weißt du, wie viele Bits ein 'long' hat...?

von Klaus W. (mfgkw)


Lesenswert?

Trillian schrieb:
> Folgender C-Code fuehrt zu dieser Warnung:
>
> warning: assignment from incompatible pointer type
>
>
1
>   unsigned char a[4] = { 0x00, 0x00, 0x00, 0x00 };
2
>   unsigned long *ptr;
3
>   ptr = a;
4
5
ptr = (unsigned long*)a;
6
7
>   *ptr = 1000000UL;
8
>
> ...

von Trillian (Gast)


Lesenswert?

@Sven

das mit der union finde ich einfach, jedoch umstaendlich im Zugriff.

Soweit ich weiss, hat ein long auf dem AVR 32 Bit, oder?

@Sven & Klaus

Danke! Pointer sind noch immer nicht so richtig mein Fall:)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Trillian schrieb:

> Soweit ich weiss, hat ein long auf dem AVR 32 Bit, oder?

Ein long ist keine Eigenschaft der Architektur, sondern des C-Compilers, 
mit dem du Code dafür erzeugst.

Für avr-gcc hat ein long 16 oder 32 Bits, je nachdem ob -mint8 gegeben 
ist oder nicht.

Johann

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.