aboutsummaryrefslogtreecommitdiff
path: root/embassy-boot/stm32/src
diff options
context:
space:
mode:
authorUlf Lilleengen <[email protected]>2022-04-26 18:33:09 +0200
committerUlf Lilleengen <[email protected]>2022-04-27 15:17:18 +0200
commitda61611f8f57410a87106961efd24d80e6a8f63e (patch)
tree81bf5f96a052be8cc74fa4f513592adf1f4bb1db /embassy-boot/stm32/src
parent484e0acc638c27366e19275c32db9c8487ea8fba (diff)
Add bootloader to CI
Diffstat (limited to 'embassy-boot/stm32/src')
-rw-r--r--embassy-boot/stm32/src/lib.rs8
-rw-r--r--embassy-boot/stm32/src/main.rs18
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 @@
5mod fmt; 5mod fmt;
6 6
7pub use embassy_boot::{FirmwareUpdater, FlashProvider, Partition, SingleFlashProvider, State}; 7pub use embassy_boot::{FirmwareUpdater, FlashProvider, Partition, SingleFlashProvider, State};
8use embassy_stm32::flash::{ERASE_SIZE, ERASE_VALUE, WRITE_SIZE};
8 9
9pub struct BootLoader<const PAGE_SIZE: usize> { 10pub struct BootLoader {
10 boot: embassy_boot::BootLoader<PAGE_SIZE>, 11 boot: embassy_boot::BootLoader<ERASE_SIZE, WRITE_SIZE, ERASE_VALUE>,
11} 12}
12 13
13impl<const PAGE_SIZE: usize> BootLoader<PAGE_SIZE> { 14impl 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 _;
9use embassy_boot_stm32::*; 9use embassy_boot_stm32::*;
10use embassy_stm32::flash::Flash; 10use embassy_stm32::flash::Flash;
11 11
12#[cfg(not(any(feature = "flash-2k", feature = "flash-256", feature = "flash-128")))]
13compile_error!("No flash size specified. Must specify exactly one of the following features: flash-2k, flash-256, flash-128");
14
15#[entry] 12#[entry]
16fn main() -> ! { 13fn 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]
57fn panic(_info: &core::panic::PanicInfo) -> ! { 46fn 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}