CodeVisionAVR Bootloader

Gast #2299257
Lesenswert?

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
#2299443
Lesenswert?

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.
Gast #2299652
Lesenswert?

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 (*)()'

)-:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren