Funktionsadresse

OP #4554176
Hallo zusammen,

ich bin immer noch an einem Bootloader für einen Attiny45 dran. Hierfür 
möchte ich auf eine Funktion aus dem Bootloader aus den geladenen 
Programm drauf zugreifen.

In der Bootloader.lss Datei sehe ich ja die Funktion inkl. der Adresse:

...
0xd9e <CheckUsiStart>
....

In dem zu ladenen Program deklariere ich die Funktion wie folg:
unsigned char (*CheckUsiStart) ( void );

Jetzt habe ich mal zwei Fragen:

1. Warum muss ich die Adress durch zwei teilen?
2. Wie bekommen ich das Warning weg? "warning: assignment makes pointer 
from integer without a cast"

Hier die Zuweisung der Adresse:
CheckUsiStart = 0xd9e/2;

Funktionieren tut das Ganze.

Vielen Dank vorab

Gruß

Frank
OP #4554372
Hi The Daz, hi Georg G.,

vielen Dank. Mit einer weiteren Klammer ist es tatsächlich weg.

CheckUsiStart = (void*)(0xd9e/2);

Ist auch logisch. Saß wohl gestern auf der Leitung.

Adresse: Ist tatsächlich so. Deim Aufruf der Adresse wird diese mit 2 
multipliziert. Habe mit der Info den folgenden Link gefunden:

https://www.mikrocontroller.net/articles/AVR-Tutorial:_Mehrfachverzweigung#Z-Pointer_leicht_verst.C3.A4ndlich


Gruß

Frank
#4554475
Nur so eine Bemerkung am Rande:
Der Aufruf einer Funktion im Bootloader oder auch jedem anderen 
Programmcode, der von der eigentlichen Applikation unabhängig compiliert 
wird, ist etwas problematisch. Wenn Du mal den Bootloader irgendwie 
modifizierst, stimmt die Adresse nicht mehr und die Applikation läuft 
nicht mehr oder muss auch angepasst werden.
Da solltest Du evtl. mal über einen anderen Aufruf-Mechanismus 
nachdenken, z.B. eine Sprungtabelle an einer bestimmten Adresse, 
Software Interrupt oder eine einzige, fest definierten Einsprungadresse 
mit der Übergabe einer Funktionsnummer.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.