pointer auf daten im flash

Gast #4033484
Lesenswert?

hi ich habe daten im flash des avr:
1
const uint8_t daten1[128] PROGMEM = {....};
2
const uint8_t daten2[128] PROGMEM = {....};

in einer funktion möchte ich nun dynamisch darauf zugreifen können
1
void tuWas(const uint8_t * d)
2
{
3
    pgm_read_byte(d[0]);
4
}
5

6
...
7

8
tuWas(&daten1);

leider bekomme ih folgendes warning. werde daraus nicht schlau:
1
note: expected 'const uint8_t *' but argument is of type 'const uint8_t (*)[128]'|

wie macht man soetwas korrekt ?

danke
#4033490
Lesenswert?

ben schrieb:
> leider bekomme ih folgendes warning. werde daraus nicht schlau:
> note: expected 'const uint8_t *' but argument is of type 'const uint8_t
> (*)[128]'|

Die ist doch eigentlich recht klar:

> void tuWas(const uint8_t * d)

Deine Funktion erwartet also einen Zeiger auf einen uint8_t.

> tuWas(&daten1);

daten1 ist ein Array aus uint8_t, also ist &daten1 ein Zeiger auf ein 
Array.
Versuch's mal mit &daten1[0].
#4033520
Lesenswert?

@ A. K. (prx)

>Vielleicht wäre es an der Zeit, PROGMEM in der Vergangenheit ruhen zu
>lassen und auf __flash umzuschwenken? Also
>  const __flash uint8_t daten1[128] = {....};
>und
>  void tuWas(const __flash uint8_t * d)
>  {
>    ... d[0];
>  }

Dann müsste man dennoch die Funktion so aufrufen.

tuWas(&d[0]);

;-)
#4034423
Lesenswert?

@ Rolf Magnus (rmagnus)

>Weil die Art, wie der TE es übergibt, damit immer noch falsch ist. Siehe
>Beitrag "Re: pointer auf daten im flash"

Nein.

&daten1[0] == daten1

Der Name eines Arrays ist ein Pointer auf diesen selbst und damit das 
Element mit dem Index 0. Will man einen Pointer auf ein anderes Element, 
braucht man entweder den Adressoperator oder muss es als Pointer 
schreiben. Willkommen in der C-Welt.

&daten1[5] == daten1 +5;
#4034436
Lesenswert?

Falk Brunner schrieb:
> @ Rolf Magnus (rmagnus)
>
>>Weil die Art, wie der TE es übergibt, damit immer noch falsch ist. Siehe
>>Beitrag "Re: pointer auf daten im flash"
>
> Nein.
>
> &daten1[0] == daten1

Er hat aber nicht daten1, sondern &daten1 geschrieben.

> Der Name eines Arrays ist ein Pointer auf diesen selbst und damit das
> Element mit dem Index 0.

Ein Pointer auf das Array und einer auf dessen erstes Element enthalten 
zwar die gleiche Adresse, sind aber von verschiedenen Typen. Und genau 
deshalb kam die Warnung des Compilers.

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