Fix bootloader jump use word address
- Call of function pointer is compiled into 'icall' instruction. It should use word address but it has used byte address :( It seems jump has worked luckily by chance until now. why it worked?
This commit is contained in:
parent
c7faa51ee8
commit
0ca415004a
1 changed files with 4 additions and 3 deletions
|
@ -71,7 +71,8 @@ void bootloader_jump_after_watchdog_reset(void)
|
||||||
MCUSR &= ~(1<<WDRF);
|
MCUSR &= ~(1<<WDRF);
|
||||||
wdt_disable();
|
wdt_disable();
|
||||||
|
|
||||||
((void (*)(void))BOOTLOADER_START)();
|
// This is compled into 'icall', address should be in word unit, not byte.
|
||||||
|
((void (*)(void))(BOOTLOADER_START/2))();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +142,7 @@ void bootloader_jump(void) {
|
||||||
ADCSRA = 0; TWCR = 0; UCSR0B = 0;
|
ADCSRA = 0; TWCR = 0; UCSR0B = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// start Bootloader
|
// This is compled into 'icall', address should be in word unit, not byte.
|
||||||
((void (*)(void))BOOTLOADER_START)();
|
((void (*)(void))(BOOTLOADER_START/2))();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue