Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.99 KB | None | 0 0
  1. use std::cell::Cell;
  2.  
  3. /*
  4. #[derive(Debug,Copy,Clone)]
  5. struct Locker (u32);
  6.  
  7. impl Locker {
  8. fn lock(self) -> u32 {
  9. self.0
  10. }
  11. }
  12. */
  13.  
  14. #[derive(Debug)]
  15. struct Peripherals {
  16. serial1: Cell<u32>,
  17. serial2: Cell<u32>
  18. }
  19.  
  20. impl Peripherals {
  21. fn take_serial(&self, idx: usize) -> u32 {
  22. match idx {
  23. 0 => self.serial1.replace(0),
  24. _ => self.serial2.replace(0)
  25. }
  26. }
  27. }
  28.  
  29. //static mut SERIAL1: Locker = Locker(1);
  30. //static mut SERIAL2: Locker = Locker(2);
  31. fn main() {
  32. /*static*/ let PERIPHERALS: Peripherals = Peripherals {
  33. serial1: Cell::new(1),
  34. serial2: Cell::new(2)
  35. };
  36.  
  37. //fn main() {
  38. println!("PERIPHERALS:{:?}", unsafe { &PERIPHERALS });
  39. let s1 = PERIPHERALS.take_serial(0);
  40. let s2 = PERIPHERALS.take_serial(1);
  41. println!("s1:{}, s2:{}", s1, s2);
  42. println!("PERIPHERALS:{:?}", unsafe { &PERIPHERALS });
  43. }
  44.  
  45. /*
  46. fn foo() -> u32 {
  47. unsafe { PERIPHERALS.take_serial(0) }
  48. }
  49.  
  50. fn bar() -> u32 {
  51. unsafe { PERIPHERALS.take_serial(0) }
  52. }
  53. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement