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

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.