Browse Source

falta hacer que el tiempo entre que llega la interrupción y se lanza la tarea sea nulo

master
lucascukla 2 years ago
parent
commit
b995db1fb6
  1. 26
      main/main.c

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

Loading…
Cancel
Save