1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
//! Flash memory use stm32f103xx::{flash, FLASH}; /// Extension trait to constrain the FLASH peripheral pub trait FlashExt { /// Constrains the FLASH peripheral to play nicely with the other abstractions fn constrain(self) -> Parts; } impl FlashExt for FLASH { fn constrain(self) -> Parts { Parts { acr: ACR { _0: () }, } } } /// Constrained FLASH peripheral pub struct Parts { /// Opaque ACR register pub acr: ACR, } /// Opaque ACR register pub struct ACR { _0: (), } impl ACR { pub(crate) fn acr(&mut self) -> &flash::ACR { // NOTE(unsafe) this proxy grants exclusive access to this register unsafe { &(*FLASH::ptr()).acr } } }