Wird dann von Adresse "0" aus weiter gearbeitet?
// the pointer to bootloader void (*boot_start)(void) = 0x1F800; // word // Byte 0x258048 = 0x3F000 boot_start();
Ja.
(Wenn du vom Bootloader zu deiner Applikation springen möchtest (nach Adresse 0), wirkt das nicht, wie ein richtiger Reset)
Resetting the AVR
During reset, all I/O Registers are set to their initial values, and the program starts execution from the Reset Vector.
Bei einem echten Reset werden alle I/O-Register mit festgelegten Werten initialisiert. Ein Sprung auf den Resetvektor macht das nicht. Die Register sind also weiterhin wirksam.
Wenn es Hardwaretechnisch egal ist welche Pegel nach dem Sprung aus dem Bootloader herrschen, braucht man doch keinen Watchdog oder?
#include <avr/wdt.h> // ... wdt_enable(WDTO_30MS); for (;;);
12/* Funktionspointer auf 0x0000 */ void(*start)( void ) = 0x0000;
void test(uint8_t para);
void (*boot_start)(void) = 0x1F800;
void meine_routine (void)
void (*meine_routine)(void) = 0x1F800;
int *ptr = 0x1F800; // ptr zeigt auf die Adresse 0x1F800 oder auch int s; int *ptr = &s; // ptr Zeigt auf Adresse von s
C C++1void (*meine_routine)(void) = 0x1F800;
Die erste Klammer (*meine_funktion), muss die sein oder würde es auch ohne funktionieren?