mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-25 08:12:30 +00:00
Take into account size of revert index
Fixes a bug in the partition assertions that ensures that the state page(s) have enough space for 2x active partition range. Add unit test to verify that panic is observed.
This commit is contained in:
parent
11da25800b
commit
b418c0e4d6
@ -222,10 +222,7 @@ impl BootLoader {
|
|||||||
page: &mut [u8],
|
page: &mut [u8],
|
||||||
) -> Result<State, BootError> {
|
) -> Result<State, BootError> {
|
||||||
// Ensure we have enough progress pages to store copy progress
|
// Ensure we have enough progress pages to store copy progress
|
||||||
assert_eq!(self.active.len() % page.len(), 0);
|
assert_partitions(self.active, self.dfu, self.state, page.len(), P::STATE::WRITE_SIZE);
|
||||||
assert_eq!(self.dfu.len() % page.len(), 0);
|
|
||||||
assert!(self.dfu.len() - self.active.len() >= page.len());
|
|
||||||
assert!(self.active.len() / page.len() <= (self.state.len() - P::STATE::WRITE_SIZE) / P::STATE::WRITE_SIZE);
|
|
||||||
assert_eq!(magic.len(), P::STATE::WRITE_SIZE);
|
assert_eq!(magic.len(), P::STATE::WRITE_SIZE);
|
||||||
|
|
||||||
// Copy contents from partition N to active
|
// Copy contents from partition N to active
|
||||||
@ -409,6 +406,13 @@ impl BootLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn assert_partitions(active: Partition, dfu: Partition, state: Partition, page_size: usize, write_size: usize) {
|
||||||
|
assert_eq!(active.len() % page_size, 0);
|
||||||
|
assert_eq!(dfu.len() % page_size, 0);
|
||||||
|
assert!(dfu.len() - active.len() >= page_size);
|
||||||
|
assert!(2 * (active.len() / page_size) <= (state.len() - write_size) / write_size);
|
||||||
|
}
|
||||||
|
|
||||||
/// Convenience provider that uses a single flash for all partitions.
|
/// Convenience provider that uses a single flash for all partitions.
|
||||||
pub struct SingleFlashConfig<'a, F>
|
pub struct SingleFlashConfig<'a, F>
|
||||||
where
|
where
|
||||||
@ -919,6 +923,15 @@ mod tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
|
fn test_range_asserts() {
|
||||||
|
const ACTIVE: Partition = Partition::new(4096, 4194304);
|
||||||
|
const DFU: Partition = Partition::new(4194304, 2 * 4194304);
|
||||||
|
const STATE: Partition = Partition::new(0, 4096);
|
||||||
|
assert_partitions(ACTIVE, DFU, STATE, 4096, 4);
|
||||||
|
}
|
||||||
|
|
||||||
struct MemFlash<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize>([u8; SIZE]);
|
struct MemFlash<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize>([u8; SIZE]);
|
||||||
|
|
||||||
impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> NorFlash
|
impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> NorFlash
|
||||||
|
Loading…
Reference in New Issue
Block a user