Forum: Compiler & IDEs Funktionszeiger auf pgm_read_byte


von Sam .. (sam1994)


Lesenswert?

Hi

Ich möchte einen Funktionszeiger auf pgm_read_byte einer Funktion 
übergeben, jedoch sagt avrgcc, dass es diese Funktion nicht gäbe. Ich 
kann die Funktion aufrufen, sie aber nicht als Funktionspointer 
übergeben.

Der Funktionspointer:
1
typedef uint8_t (*ReadFunc) (uint8_t*);

Gehört pgm_read_byte zu einer besonderen Gattung von Funktionen? Ich 
schätze es stecken nur movw, lpm, ret dahinter.

von Karl H. (kbuchegg)


Lesenswert?

Samuel K. schrieb:

> Gehört pgm_read_byte zu einer besonderen Gattung von Funktionen?

Ein Blick in pgmspace.h zeigt
1
#define pgm_read_byte(address_short)    pgm_read_byte_near(address_short)

pgm_read_byte ist also überhaupt keine Funktion, sondern ein Makro.

von Stefan E. (sternst)


Lesenswert?

Samuel K. schrieb:
> Gehört pgm_read_byte zu einer besonderen Gattung von Funktionen?

Ja, zur Gattung Ich-bin-gar-keine-Funktion-sondern-ein-Makro.

Mach eine echte Funktion drumherum, davon kannst du dann einen Pointer 
bilden.

von Sam .. (sam1994)


Lesenswert?

Danke, das funktioniert.

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.