|
|
|
@ -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) {
|
|
|
|
// 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) {
|
|
|
|
|