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
Frank Z. schrieb: > 1. Warum muss ich die Adress durch zwei teilen? Weil bei AVR der Programmspeicher meist in Worten gezählt wird. Das geht leider etwas durcheinander.
Frank Z. schrieb: > 1. Warum muss ich die Adress durch zwei teilen? Damit der µC richig versteht, an welcher Stelle in seinem Flash der Programmeinsprungpunkt ist ;-)
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.