1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-18 03:52:11 +01:00

OP-1212 Fix priority queue handling and use it for setting processing

This commit is contained in:
Alessio Morale 2014-02-04 20:49:36 +01:00
parent 0e163b7d97
commit 01822d7a0c

View File

@ -45,7 +45,6 @@
#define TASK_PRIORITY_RX (tskIDLE_PRIORITY + 2) #define TASK_PRIORITY_RX (tskIDLE_PRIORITY + 2)
#define TASK_PRIORITY_TX (tskIDLE_PRIORITY + 2) #define TASK_PRIORITY_TX (tskIDLE_PRIORITY + 2)
#define TASK_PRIORITY_RADRX (tskIDLE_PRIORITY + 2) #define TASK_PRIORITY_RADRX (tskIDLE_PRIORITY + 2)
#define TASK_PRIORITY_TXPRI (tskIDLE_PRIORITY + 2)
#define REQ_TIMEOUT_MS 250 #define REQ_TIMEOUT_MS 250
#define MAX_RETRIES 2 #define MAX_RETRIES 2
#define STATS_UPDATE_PERIOD_MS 4000 #define STATS_UPDATE_PERIOD_MS 4000
@ -59,8 +58,6 @@ static xQueueHandle queue;
#if defined(PIOS_TELEM_PRIORITY_QUEUE) #if defined(PIOS_TELEM_PRIORITY_QUEUE)
static xQueueHandle priorityQueue; static xQueueHandle priorityQueue;
static xTaskHandle telemetryTxPriTaskHandle;
static void telemetryTxPriTask(void *parameters);
#else #else
#define priorityQueue queue #define priorityQueue queue
#endif #endif
@ -119,11 +116,6 @@ int32_t TelemetryStart(void)
PIOS_TASK_MONITOR_RegisterTask(TASKINFO_RUNNING_RADIORX, radioRxTaskHandle); PIOS_TASK_MONITOR_RegisterTask(TASKINFO_RUNNING_RADIORX, radioRxTaskHandle);
#endif #endif
#if defined(PIOS_TELEM_PRIORITY_QUEUE)
xTaskCreate(telemetryTxPriTask, (signed char *)"TelPriTx", STACK_SIZE_BYTES / 4, NULL, TASK_PRIORITY_TXPRI, &telemetryTxPriTaskHandle);
PIOS_TASK_MONITOR_RegisterTask(TASKINFO_RUNNING_TELEMETRYTXPRI, telemetryTxPriTaskHandle);
#endif
return 0; return 0;
} }
@ -276,7 +268,12 @@ static void updateObject(UAVObjHandle obj, int32_t eventType)
eventMask |= EV_LOGGING_MANUAL; eventMask |= EV_LOGGING_MANUAL;
break; break;
} }
UAVObjConnectQueue(obj, priorityQueue, eventMask); if(UAVObjIsSettings(obj)){
UAVObjConnectQueue(obj, priorityQueue, eventMask);
} else {
UAVObjConnectQueue(obj, queue, eventMask);
}
} }
/** /**
@ -374,32 +371,24 @@ static void telemetryTxTask(__attribute__((unused)) void *parameters)
// Loop forever // Loop forever
while (1) { while (1) {
// Wait for queue message /**
if (xQueueReceive(queue, &ev, portMAX_DELAY) == pdTRUE) { * Tries to empty the high priority queue before handling any standard priority item
// Process event */
processObjEvent(&ev);
}
}
}
/**
* Telemetry transmit task, high priority
*/
#if defined(PIOS_TELEM_PRIORITY_QUEUE) #if defined(PIOS_TELEM_PRIORITY_QUEUE)
static void telemetryTxPriTask(__attribute__((unused)) void *parameters) // Loop forever
{ while (xQueueReceive(priorityQueue, &ev, 1) == pdTRUE) {
UAVObjEvent ev; // Process event
processObjEvent(&ev);
// Loop forever }
while (1) { #endif
// Wait for queue message // Wait for queue message
if (xQueueReceive(priorityQueue, &ev, portMAX_DELAY) == pdTRUE) { if (xQueueReceive(queue, &ev, 1) == pdTRUE) {
// Process event // Process event
processObjEvent(&ev); processObjEvent(&ev);
} }
} }
} }
#endif
/** /**
* Telemetry receive task. Processes queue events and periodic updates. * Telemetry receive task. Processes queue events and periodic updates.