@@ -5,8 +5,7 @@ use std::time::{Duration as StdDuration, Instant as StdInstant};
55use std:: { mem, ptr, thread} ;
66
77use atomic_polyfill:: { AtomicU8 , Ordering } ;
8- use embassy_sync:: blocking_mutex:: raw:: CriticalSectionRawMutex ;
9- use embassy_sync:: blocking_mutex:: Mutex as EmbassyMutex ;
8+ use critical_section:: Mutex as CsMutex ;
109
1110use crate :: driver:: { AlarmHandle , Driver } ;
1211
@@ -40,7 +39,7 @@ struct TimeDriver {
4039 // The STD Driver implementation requires the alarms' mutex to be reentrant, which the STD Mutex isn't
4140 // Fortunately, mutexes based on the `critical-section` crate are reentrant, because the critical sections
4241 // themselves are reentrant
43- alarms : UninitCell < EmbassyMutex < CriticalSectionRawMutex , RefCell < [ AlarmState ; ALARM_COUNT ] > > > ,
42+ alarms : UninitCell < CsMutex < RefCell < [ AlarmState ; ALARM_COUNT ] > > > ,
4443 zero_instant : UninitCell < StdInstant > ,
4544 signaler : UninitCell < Signaler > ,
4645}
@@ -58,8 +57,7 @@ crate::time_driver_impl!(static DRIVER: TimeDriver = TimeDriver {
5857impl TimeDriver {
5958 fn init ( & self ) {
6059 self . once . call_once ( || unsafe {
61- self . alarms
62- . write ( EmbassyMutex :: new ( RefCell :: new ( [ ALARM_NEW ; ALARM_COUNT ] ) ) ) ;
60+ self . alarms . write ( CsMutex :: new ( RefCell :: new ( [ ALARM_NEW ; ALARM_COUNT ] ) ) ) ;
6361 self . zero_instant . write ( StdInstant :: now ( ) ) ;
6462 self . signaler . write ( Signaler :: new ( ) ) ;
6563
@@ -72,7 +70,8 @@ impl TimeDriver {
7270 loop {
7371 let now = DRIVER . now ( ) ;
7472
75- let next_alarm = unsafe { DRIVER . alarms . as_ref ( ) } . lock ( |alarms| {
73+ let next_alarm = critical_section:: with ( |cs| {
74+ let alarms = unsafe { DRIVER . alarms . as_ref ( ) } . borrow ( cs) ;
7675 loop {
7776 let pending = alarms
7877 . borrow_mut ( )
@@ -139,8 +138,8 @@ impl Driver for TimeDriver {
139138
140139 fn set_alarm_callback ( & self , alarm : AlarmHandle , callback : fn ( * mut ( ) ) , ctx : * mut ( ) ) {
141140 self . init ( ) ;
142- unsafe { self . alarms . as_ref ( ) } . lock ( |alarms | {
143- let mut alarms = alarms. borrow_mut ( ) ;
141+ critical_section :: with ( |cs | {
142+ let mut alarms = unsafe { self . alarms . as_ref ( ) } . borrow_ref_mut ( cs ) ;
144143 let alarm = & mut alarms[ alarm. id ( ) as usize ] ;
145144 alarm. callback = callback as * const ( ) ;
146145 alarm. ctx = ctx;
@@ -149,9 +148,8 @@ impl Driver for TimeDriver {
149148
150149 fn set_alarm ( & self , alarm : AlarmHandle , timestamp : u64 ) -> bool {
151150 self . init ( ) ;
152- unsafe { self . alarms . as_ref ( ) } . lock ( |alarms| {
153- let mut alarms = alarms. borrow_mut ( ) ;
154-
151+ critical_section:: with ( |cs| {
152+ let mut alarms = unsafe { self . alarms . as_ref ( ) } . borrow_ref_mut ( cs) ;
155153 let alarm = & mut alarms[ alarm. id ( ) as usize ] ;
156154 alarm. timestamp = timestamp;
157155 unsafe { self . signaler . as_ref ( ) } . signal ( ) ;
0 commit comments