loboris/MicroPython_ESP32_psRAM_LoBo

sleep_us is not accurate

Opened this issue · 1 comments

I did the following test code:

import time

init_time = time.time()
time.sleep_us(1000000)
print('exec time: ', str(time.time() - init_time))

It gaves me the following output:

exec time: 0.102143

I think it comes from mphalport.c:

void mp_hal_delay_us(uint32_t us) {
	if (us == 0) return;
	if (us > 10000) {
		// Delay greater then 10 ms, use ms delay function
		uint32_t dus = us % 10000;	// remaining micro seconds
		mp_hal_delay_ms(us/10000);
	    if (dus) ets_delay_us(dus);
		return;
	}
    ets_delay_us(us);
}

In this following line:

mp_hal_delay_ms(us/10000)

Here, the delay is smaller than it should by a factor of 10, since a millisecond is 1000 microseconds.

Good catch. But you might have to just fix it in your own codebase, there haven't been any commits here since September of last year.