diff --git a/main/main.c b/main/main.c index 6257e55..b25c9a3 100644 --- a/main/main.c +++ b/main/main.c @@ -61,6 +61,11 @@ bool flag_IRQ = false; uint8_t data_read_ADC[4] = {0}; +uint64_t deltate = 0; + +// parámetros RTOS +TaskHandle_t tarea_actual; + // Declaración de la cola de semáforo SemaphoreHandle_t xSemaphore; @@ -308,10 +313,16 @@ esp_err_t mcp3561_config(void){ // Interrupciones void IRAM_ATTR isr_IRQ_handler(void *arg) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; + deltate = esp_cpu_get_cycle_count(); xSemaphoreGiveFromISR(xSemaphore, &xHigherPriorityTaskWoken); - // if (xHigherPriorityTaskWoken == pdTRUE) { - // portYIELD_FROM_ISR(); - // } + // vTaskSuspend(tarea_actual); + // portYIELD_FROM_ISR(); + // portEndS + // if(xHigherPriorityTaskWoken == ) + if (xHigherPriorityTaskWoken == pdTRUE) { + portYIELD_FROM_ISR(); + } + // taskYIELD(); } // Tarea de base (bare-metal) @@ -321,7 +332,10 @@ void base_task(void *pvParameters) { if (xSemaphoreTake(xSemaphore, portMAX_DELAY) == pdTRUE) { // La tarea responde al semáforo aquí // Realiza el trabajo necesario - printf("| "); + deltate = esp_cpu_get_cycle_count(); + deltate = esp_cpu_get_cycle_count() - deltate; + printf("deltate = %llu\n", deltate); + // vTaskResume(tarea_actual); } } } @@ -374,9 +388,13 @@ void app_main() { // Inicia el sistema operativo en tiempo real - // vTaskStartScheduler(); + if (xTaskGetSchedulerState() != taskSCHEDULER_RUNNING){ + vTaskStartScheduler(); + } + while(1){ + tarea_actual = xTaskGetCurrentTaskHandle(); vTaskDelay(1000); // Espera al semáforo // if (xSemaphoreTake(xSemaphore, portMAX_DELAY) == pdTRUE) {