diff options
| author | Ulf Lilleengen <[email protected]> | 2022-04-26 18:33:09 +0200 |
|---|---|---|
| committer | Ulf Lilleengen <[email protected]> | 2022-04-27 15:17:18 +0200 |
| commit | da61611f8f57410a87106961efd24d80e6a8f63e (patch) | |
| tree | 81bf5f96a052be8cc74fa4f513592adf1f4bb1db /embassy-boot/stm32/src | |
| parent | 484e0acc638c27366e19275c32db9c8487ea8fba (diff) | |
Add bootloader to CI
Diffstat (limited to 'embassy-boot/stm32/src')
| -rw-r--r-- | embassy-boot/stm32/src/lib.rs | 8 | ||||
| -rw-r--r-- | embassy-boot/stm32/src/main.rs | 18 |
2 files changed, 7 insertions, 19 deletions
diff --git a/embassy-boot/stm32/src/lib.rs b/embassy-boot/stm32/src/lib.rs index d1754a310..68220780c 100644 --- a/embassy-boot/stm32/src/lib.rs +++ b/embassy-boot/stm32/src/lib.rs | |||
| @@ -5,12 +5,13 @@ | |||
| 5 | mod fmt; | 5 | mod fmt; |
| 6 | 6 | ||
| 7 | pub use embassy_boot::{FirmwareUpdater, FlashProvider, Partition, SingleFlashProvider, State}; | 7 | pub use embassy_boot::{FirmwareUpdater, FlashProvider, Partition, SingleFlashProvider, State}; |
| 8 | use embassy_stm32::flash::{ERASE_SIZE, ERASE_VALUE, WRITE_SIZE}; | ||
| 8 | 9 | ||
| 9 | pub struct BootLoader<const PAGE_SIZE: usize> { | 10 | pub struct BootLoader { |
| 10 | boot: embassy_boot::BootLoader<PAGE_SIZE>, | 11 | boot: embassy_boot::BootLoader<ERASE_SIZE, WRITE_SIZE, ERASE_VALUE>, |
| 11 | } | 12 | } |
| 12 | 13 | ||
| 13 | impl<const PAGE_SIZE: usize> BootLoader<PAGE_SIZE> { | 14 | impl BootLoader { |
| 14 | /// Create a new bootloader instance using parameters from linker script | 15 | /// Create a new bootloader instance using parameters from linker script |
| 15 | pub fn default() -> Self { | 16 | pub fn default() -> Self { |
| 16 | extern "C" { | 17 | extern "C" { |
| @@ -65,6 +66,7 @@ impl<const PAGE_SIZE: usize> BootLoader<PAGE_SIZE> { | |||
| 65 | 66 | ||
| 66 | pub unsafe fn load(&mut self, start: usize) -> ! { | 67 | pub unsafe fn load(&mut self, start: usize) -> ! { |
| 67 | trace!("Loading app at 0x{:x}", start); | 68 | trace!("Loading app at 0x{:x}", start); |
| 69 | #[allow(unused_mut)] | ||
| 68 | let mut p = cortex_m::Peripherals::steal(); | 70 | let mut p = cortex_m::Peripherals::steal(); |
| 69 | #[cfg(not(feature = "thumbv6"))] | 71 | #[cfg(not(feature = "thumbv6"))] |
| 70 | p.SCB.invalidate_icache(); | 72 | p.SCB.invalidate_icache(); |
diff --git a/embassy-boot/stm32/src/main.rs b/embassy-boot/stm32/src/main.rs index 6fe0fb66d..563bc55d3 100644 --- a/embassy-boot/stm32/src/main.rs +++ b/embassy-boot/stm32/src/main.rs | |||
| @@ -9,9 +9,6 @@ use defmt_rtt as _; | |||
| 9 | use embassy_boot_stm32::*; | 9 | use embassy_boot_stm32::*; |
| 10 | use embassy_stm32::flash::Flash; | 10 | use embassy_stm32::flash::Flash; |
| 11 | 11 | ||
| 12 | #[cfg(not(any(feature = "flash-2k", feature = "flash-256", feature = "flash-128")))] | ||
| 13 | compile_error!("No flash size specified. Must specify exactly one of the following features: flash-2k, flash-256, flash-128"); | ||
| 14 | |||
| 15 | #[entry] | 12 | #[entry] |
| 16 | fn main() -> ! { | 13 | fn main() -> ! { |
| 17 | let p = embassy_stm32::init(Default::default()); | 14 | let p = embassy_stm32::init(Default::default()); |
| @@ -24,15 +21,7 @@ fn main() -> ! { | |||
| 24 | } | 21 | } |
| 25 | */ | 22 | */ |
| 26 | 23 | ||
| 27 | #[cfg(feature = "flash-2k")] | 24 | let mut bl = BootLoader::default(); |
| 28 | let mut bl: BootLoader<2048> = BootLoader::default(); | ||
| 29 | |||
| 30 | #[cfg(feature = "flash-256")] | ||
| 31 | let mut bl: BootLoader<256> = BootLoader::default(); | ||
| 32 | |||
| 33 | #[cfg(feature = "flash-128")] | ||
| 34 | let mut bl: BootLoader<128> = BootLoader::default(); | ||
| 35 | |||
| 36 | let mut flash = Flash::unlock(p.FLASH); | 25 | let mut flash = Flash::unlock(p.FLASH); |
| 37 | let start = bl.prepare(&mut SingleFlashProvider::new(&mut flash)); | 26 | let start = bl.prepare(&mut SingleFlashProvider::new(&mut flash)); |
| 38 | core::mem::drop(flash); | 27 | core::mem::drop(flash); |
| @@ -55,8 +44,5 @@ unsafe fn DefaultHandler(_: i16) -> ! { | |||
| 55 | 44 | ||
| 56 | #[panic_handler] | 45 | #[panic_handler] |
| 57 | fn panic(_info: &core::panic::PanicInfo) -> ! { | 46 | fn panic(_info: &core::panic::PanicInfo) -> ! { |
| 58 | unsafe { | 47 | cortex_m::asm::udf(); |
| 59 | cortex_m::asm::udf(); | ||
| 60 | core::hint::unreachable_unchecked(); | ||
| 61 | } | ||
| 62 | } | 48 | } |
