Hallo, Ich beschäftige mich gerade mit dem Thema Bootloader. mit Hilfe des Forum hier habe ich es bereits folgendes geschafft. Nach dem Reset springt der Controller in den Bootloader, dies wird mir angezeigt durch 2maliges blinken einer LED. Danach Springt er mit folgendem Befehl "void (*start)( void ) = 0x0000;"in das Anwenderprogramm. Dies wird mir wiederrum durch eine 2te LED angezeigt. Mein nächster Schritt wäre wieder vom Anwenderprogramm in den Bootloader zu springen. Hierfür würde ich folgenden Befehl verwenden. void (*bootloader)( void ) = 0x3800; Diese Befehle habe ich aus dem Beitrag: http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung Nun zu meinem Problem: Sobald ich eine andere Adresse als 0x0000 eingebe. (in meinem Fall die 0x3800) meldet der Compiler folgenden Fehler: Error: a value of type 'int' can't be used to initialize an entity of type 'void (*)()' Noch allgemeine Infos: Verwende einen ATmega32 und Programmiere mit CodeVisionAVR Recht herzlichen Dank für alle hilfreichen Hinweiße. Danke Mfg Mark
Mark schrieb: > Error: a value of type 'int' can't be used to initialize an entity of > type 'void (*)()' Du mußt deinem Compiler sagen, daß das ein Pointer ist. void (*pApplicationSection) (void) = (void*)0x3800; Ist bei AVR-Studio mit GCC jedenfalls so. Da gibt es zwar keine Fehlermeldung, sondern nur ein Warning, aber aus dem gleichen Grund. Und das sollte jeder andere C-Compiler auch anmeckern. Ist davon abhängig, wie "scharf" der Compiler eingestellt ist. Bei 0 ist ihm das egal. Weil 0 ist eben auch NULL. Aber andere Werte sind Integerzahlen und keine Pointer und müssen explizit gecastet werden. mfg.
Danke, das klang sehr verständlich. allerdings sagt mir mein CodeVision Compiler bei: void (*bootloader)(void) = (void*) 0x3800; Error: a value of type 'void *' can't be used to initialize an entity of type 'void (*)()' )-:
Mark schrieb: > Error: a value of type 'void *' can't be used to initialize an entity of > > type 'void (*)()' Nervensäge. Dann geb' ihm das als Type: void (*bootloader)(void) = (void (*)()) 0x3800; Beim AVR-GCC compiliert das fehlerfrei. Wahrscheinlich ist das mit (void*) noch ein bisschen schlampig. mfg.
darauf hätte ich nun aber auch selber kommen sollen. Danke Controller springt jetzt zwischen Bootloader und Anwendung hin und her. Wie schön (-: mfg Mark
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.