Forum: Mikrocontroller und Digitale Elektronik Probleme mit Funktionspointer


von Leon (Gast)


Lesenswert?

Guten Morgen,

ich verwende einen 16Bit Mikrocontroller. Das Speichermodell steht auf 
Huge. Bei der Verwendung dieses Funktionspointers bekomme ich nicht die 
Adresse 0xB42000, sondern die Adresse 0x002000. Was könnte ich tun, 
damit ich die Adresse 0xB42000 bekomme?
Ich habe auch huge verwendet bei der Deklaration, leider ohne erfolg.
1
#define ADRESSE 0xB42000
2
3
void (*Test)(ulong,uword); // Deklaration eines Funktionspointers
4
5
Test = (void (*)(ulong,uword))((ulong)(ADRESSE));

Für jede Hilfe bin ich sehr dankbar.

von Leon (Gast)


Angehängte Dateien:

Lesenswert?

Im Compilerhandbuch von TASKING habe ich entdeckt, dass man einen Huge 
Pointer erzeugen kann. Wie die Funktion bei mir nun angewendet werden 
soll, das weiß ich nicht.

von Oliver (Gast)


Lesenswert?

Leon schrieb:
> Im Compilerhandbuch von TASKING habe ich entdeckt,

Nutzt du denn den Tasking-Compiler? Wenn nicht, was sagt denn das 
Handbuch zu deinem Compiler zu dem Thema?

Wenn doch, solltest du dir das Konzept mit Segment und Offset der 
einzelnen Memorymodelle genauer anschauen.

Bleibt nur die übliche Frage. Warum willst du überhaupt eine Funktion an 
dieser "komischen" Adresse aufrufen?

Oliver

von Leon (Gast)


Lesenswert?

Ja ich nutze den Tasking-Compiler. Ich brauch den Funktionspointer, weil 
ich an einer bestimmten Adresse vom Flash eine Funktion ausführen möcht.

von Oliver (Gast)


Lesenswert?

Da wirst du wohl die Doku durchforsten müssen, wie das mit 
Funktionspointer, Segmenten, und Offsets funktioniert.

Oliver

von Leon (Gast)


Lesenswert?

Ich hab das Speichermodell auf Large abgeändert. Nun funktioniert alles.

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.