diff --git a/cores/esp32/esp32-hal-misc.c b/cores/esp32/esp32-hal-misc.c index 7c87310eac2..519fbe234a0 100644 --- a/cores/esp32/esp32-hal-misc.c +++ b/cores/esp32/esp32-hal-misc.c @@ -21,7 +21,7 @@ #include "nvs.h" #include "esp_partition.h" #include "esp_log.h" -#include "pthread.h" +#include "esp_timer.h" #include //Undocumented!!! Get chip temperature in Farenheit @@ -38,51 +38,14 @@ void yield() vPortYield(); } -portMUX_TYPE microsMux = portMUX_INITIALIZER_UNLOCKED; -static pthread_key_t microsStore=NULL; // Thread Local Storage Handle - -void microsStoreDelete(void * storage) { // release thread local data when task is delete. - if(storage) free(storage); -} - unsigned long IRAM_ATTR micros() { - if (!microsStore) { // first Time Ever thread local not init'd - portENTER_CRITICAL_ISR(µsMux); - pthread_key_create(µsStore,microsStoreDelete); // create initial holder - portEXIT_CRITICAL_ISR(µsMux); - } - - uint32_t *ptr;// [0] is lastCount, [1] is overFlow - - ptr = pthread_getspecific(microsStore); // get address of storage - - if(ptr == NULL) { // first time in this thread, allocate mem, init it. - portENTER_CRITICAL_ISR(µsMux); - ptr = (uint32_t*)malloc(sizeof(uint32_t)*2); - pthread_setspecific(microsStore,ptr); // store the pointer to this thread's values - ptr[0] = 0; // lastCount value - ptr[1] = 0; // overFlow - portEXIT_CRITICAL_ISR(µsMux); - } - - unsigned long ccount; - - portENTER_CRITICAL_ISR(µsMux); - __asm__ __volatile__ ( "rsr %0, ccount" : "=a" (ccount) ); //get cycle count - if(ccount < ptr[0]) { // overflow occurred - ptr[1] += UINT32_MAX / CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ; - } - - ptr[0] = ccount; - portEXIT_CRITICAL_ISR(µsMux); - - return ptr[1] + (ccount / CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ); + return (unsigned long) esp_timer_get_time(); } unsigned long IRAM_ATTR millis() { - return xTaskGetTickCount() * portTICK_PERIOD_MS; + return (unsigned long) (esp_timer_get_time() / 1000); } void delay(uint32_t ms) diff --git a/cores/esp32/main.cpp b/cores/esp32/main.cpp index 0cba93ee0ec..771da0452fa 100644 --- a/cores/esp32/main.cpp +++ b/cores/esp32/main.cpp @@ -14,7 +14,6 @@ void loopTask(void *pvParameters) { setup(); for(;;) { - micros(); //update overflow loop(); } }