Hi again
I finally wrote a quick and dirty code to test micros() versus HighPrecTimer.
It performs 10000 calls to micros() and same thing to HPrecTimer.
Here is the result 
micros() has a 50ns overhead compared to High Precision Timer call. It is only a delay not a jitter or a lack of precision.
This occurs in a systematic way and on both cores.
The measure of delay is the same between the two functions. (which is the most important)
So apart from this 50ns overhead per call micros() function works well (and the bug I noticed is not a bug) sorry for the trouble 
here is the result !
microseconds HighPrecTimer: 10335 â 10000 calls on core1
microseconds HighPrecTimer core0: 10439 â 10000 calls on core0
microseconds micros : 10814 HPtimer = 10814 â 10000 calls of micros() on core 1 (500”s longer) but value measured by the two functions give the same result
microseconds micros core0 : 10835
microseconds HighPrecTimer: 10216
microseconds HighPrecTimer core0: 10504
microseconds micros : 10795 HPtimer = 10795
microseconds micros core0 : 10783
microseconds HighPrecTimer: 9941
micro âŠ
and the code used that I donât know how to properly format on this forum 
//multitasking
TaskHandle_t Task1;
void core0Task1( void * parameter ) //this task will run for ever on core 0
{
for (;
{
delay(1); //to avoid crashing
unsigned long startUs2;
unsigned long long startMs2;
unsigned long long test2;
unsigned long elapsed2;
startMs2 = esp_timer_get_time();
for (int i = 0; i < 10000; i++)
{
test2 = esp_timer_get_time();
}
elapsed2 = test2 - startMs2;
Serial.printf(âmicroseconds HighPrecTimer core0: %ld\nâ, elapsed2);
startUs2 = micros();
for (int i = 0; i < 10000; i++)
{
elapsed2 = micros();
}
elapsed2 = elapsed2 - startUs2;
Serial.printf(âmicroseconds micros core0 : %ld\nâ, elapsed2);
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
//multitask
xTaskCreatePinnedToCore(
core0Task1, /* Task function. /
âTask_1â, / name of task. /
5000, / Stack size of task /
NULL, / parameter of the task /
1, / priority of the task /
&Task1, / Task handle to keep track of created task /
0); / Core */
}
void loop() {
// put your main code here, to run repeatedly:
unsigned long startUs;
unsigned long long startMs;
unsigned long long stopMs;
unsigned long long test;
unsigned long elapsed;
startMs = esp_timer_get_time();
for (int i = 0; i < 10000; i++)
{
test = esp_timer_get_time();
}
elapsed = test - startMs;
Serial.printf(âmicroseconds HighPrecTimer: %ld\nâ, elapsed);
startUs = micros();
startMs = esp_timer_get_time();
for (int i = 0; i < 10000; i++)
{
elapsed = micros();
}
elapsed = elapsed - startUs;
stopMs = esp_timer_get_time();
Serial.printf("microseconds micros : %ld ", elapsed);
Serial.printf("HPtimer = %ld\n ", stopMs-startMs);
// delay(5000);
}