X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fbootloader%2Fmain.rs;h=2ce598050464a12deedb8c32c94153ca319f653e;hb=727108edeb96e0b534c86d52ad3f7515b26c1798;hp=afd28dc994ca0794e33eb7f8d62d69dfda88d7db;hpb=2e15e18237f50ba61acc861a4bd23560d973e943;p=gps-watch.git diff --git a/src/bootloader/main.rs b/src/bootloader/main.rs index afd28dc..2ce5980 100644 --- a/src/bootloader/main.rs +++ b/src/bootloader/main.rs @@ -22,7 +22,7 @@ */ #![no_std] -#![crate_type="staticlib"] +#![no_main] #[link(name="libcommon.rlib")] extern crate common; @@ -35,6 +35,7 @@ use common::clock; use common::systick; use common::port; use common::gpio; +use common::watchdog; use common::usb_serial; type Reg32 = register::Register; @@ -43,7 +44,7 @@ extern { fn enable_interrupts(); fn disable_interrupts(); - fn jump_to_application(address: u32); + fn jump_to_application(address: u32) -> !; } #[cfg(bootloader_type = "intermediate")] @@ -64,6 +65,12 @@ unsafe fn application_missing() -> bool { first_app_word.read() == 0xffffffff } +#[cfg(bootloader_type = "intermediate")] +fn bootloader_requested() -> bool { + true +} + +#[cfg(bootloader_type = "final")] fn bootloader_requested() -> bool { let start_ticks = systick::now(); @@ -76,8 +83,16 @@ fn bootloader_requested() -> bool { false } +#[inline(never)] +#[panic_handler] +fn panic(_info: &core::panic::PanicInfo) -> ! { + loop { + } +} + #[no_mangle] -pub unsafe extern fn main() { +pub unsafe extern "C" fn _start() -> ! { + watchdog::disable(); clock::configure(); systick::init(); port::init(); @@ -102,5 +117,7 @@ pub unsafe extern fn main() { disable_interrupts(); + clock::reset(); + jump_to_application(APPLICATION_ADDR); }