/* * This file is part of Cleanflight. * * Cleanflight is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Cleanflight is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Cleanflight. If not, see . */ #pragma once typedef enum { TASK_PRIORITY_IDLE = 0, // Disables dynamic scheduling, task is executed only if no other task is active this cycle TASK_PRIORITY_LOW = 1, TASK_PRIORITY_MEDIUM = 3, TASK_PRIORITY_HIGH = 5, TASK_PRIORITY_REALTIME = 6, TASK_PRIORITY_MAX = 255 } cfTaskPriority_e; typedef struct { const char * taskName; bool isEnabled; uint32_t desiredPeriod; uint8_t staticPriority; uint32_t maxExecutionTime; uint32_t totalExecutionTime; uint32_t lastExecutionTime; uint32_t averageExecutionTime; } cfTaskInfo_t; typedef enum { /* Actual tasks */ TASK_SYSTEM = 0, TASK_GYROPID, TASK_ACCEL, TASK_SERIAL, TASK_BEEPER, TASK_BATTERY, TASK_RX, #ifdef GPS TASK_GPS, #endif #ifdef MAG TASK_COMPASS, #endif #ifdef BARO TASK_BARO, #endif #ifdef SONAR TASK_SONAR, #endif #if defined(BARO) || defined(SONAR) TASK_ALTITUDE, #endif #ifdef DISPLAY TASK_DISPLAY, #endif #ifdef TELEMETRY TASK_TELEMETRY, #endif #ifdef LED_STRIP TASK_LEDSTRIP, #endif #ifdef USE_BST TASK_BST_READ_WRITE, TASK_BST_MASTER_PROCESS, #endif /* Count of real tasks */ TASK_COUNT, /* Service task IDs */ TASK_NONE = TASK_COUNT, TASK_SELF } cfTaskId_e; extern uint16_t cpuLoad; extern uint16_t averageWaitingTasks100; void getTaskInfo(cfTaskId_e taskId, cfTaskInfo_t * taskInfo); void rescheduleTask(cfTaskId_e taskId, uint32_t newPeriodMicros); void setTaskEnabled(cfTaskId_e taskId, bool newEnabledState); uint32_t getTaskDeltaTime(cfTaskId_e taskId); void scheduler(void);