Skip to content

Commit df0ff9c

Browse files
committed
Call ets_delay_us on Xtensa.
1 parent b8a66e8 commit df0ff9c

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

src/libstd/sys/unix/freertos/thread.rs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,30 @@ impl Thread {
113113
pub fn sleep(dur: Duration) {
114114
let tick_rate = unsafe { xPortGetTickRateHz() };
115115

116+
let millis;
117+
118+
#[cfg(target_arch = "xtensa")]
119+
{
120+
extern "C" {
121+
fn ets_delay_us(us: u32);
122+
}
123+
124+
let mut micros = dur.subsec_micros();
125+
millis = micros / 1000;
126+
micros = micros % 1000;
127+
128+
if micros > 0 {
129+
unsafe { ets_delay_us(micros) };
130+
}
131+
}
132+
133+
#[cfg(not(target_arch = "xtensa"))]
134+
{
135+
millis = dur.subsec_millis();
136+
}
137+
116138
let mut ticks_to_delay = u128::from(dur.as_secs()) * u128::from(tick_rate)
117-
+ u128::from(((dur.subsec_millis() + 1) * tick_rate - 1)) / u128::from(tick_rate);
139+
+ u128::from(((millis + 1) * tick_rate - 1)) / u128::from(tick_rate);
118140

119141
while ticks_to_delay > u128::from(crate::u32::MAX) {
120142
ticks_to_delay -= u128::from(crate::u32::MAX);

0 commit comments

Comments
 (0)