mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-24 00:35:39 +03:00
Fixed special case for SPRACINGF3OSD, fixed tests.
This commit is contained in:
parent
afb6068400
commit
8107ad254c
6 changed files with 62 additions and 60 deletions
|
@ -67,7 +67,6 @@
|
||||||
|
|
||||||
#include "interface/cli.h"
|
#include "interface/cli.h"
|
||||||
|
|
||||||
#include "io/asyncfatfs/asyncfatfs.h"
|
|
||||||
#include "io/beeper.h"
|
#include "io/beeper.h"
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
#include "io/motors.h"
|
#include "io/motors.h"
|
||||||
|
@ -929,15 +928,6 @@ static FAST_CODE_NOINLINE void subTaskPidSubprocesses(timeUs_t currentTimeUs)
|
||||||
DEBUG_SET(DEBUG_PIDLOOP, 3, micros() - startTime);
|
DEBUG_SET(DEBUG_PIDLOOP, 3, micros() - startTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void taskMain(timeUs_t currentTimeUs)
|
|
||||||
{
|
|
||||||
UNUSED(currentTimeUs);
|
|
||||||
|
|
||||||
#ifdef USE_SDCARD
|
|
||||||
afatfs_poll();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef USE_TELEMETRY
|
#ifdef USE_TELEMETRY
|
||||||
void subTaskTelemetryPollSensors(timeUs_t currentTimeUs)
|
void subTaskTelemetryPollSensors(timeUs_t currentTimeUs)
|
||||||
{
|
{
|
||||||
|
@ -1059,4 +1049,3 @@ void resetTryingToArm()
|
||||||
{
|
{
|
||||||
tryingToArm = false;
|
tryingToArm = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,5 +57,4 @@ timeUs_t getLastDisarmTimeUs(void);
|
||||||
bool isTryingToArm();
|
bool isTryingToArm();
|
||||||
void resetTryingToArm();
|
void resetTryingToArm();
|
||||||
|
|
||||||
void taskMain(timeUs_t currentTimeUs);
|
|
||||||
void subTaskTelemetryPollSensors(timeUs_t currentTimeUs);
|
void subTaskTelemetryPollSensors(timeUs_t currentTimeUs);
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
#include "interface/cli.h"
|
#include "interface/cli.h"
|
||||||
#include "interface/msp.h"
|
#include "interface/msp.h"
|
||||||
|
|
||||||
|
#include "io/asyncfatfs/asyncfatfs.h"
|
||||||
#include "io/beeper.h"
|
#include "io/beeper.h"
|
||||||
#include "io/dashboard.h"
|
#include "io/dashboard.h"
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
|
@ -93,16 +94,27 @@
|
||||||
#include "telemetry/telemetry.h"
|
#include "telemetry/telemetry.h"
|
||||||
|
|
||||||
#ifdef USE_BST
|
#ifdef USE_BST
|
||||||
void taskBstMasterProcess(timeUs_t currentTimeUs);
|
static void taskBstMasterProcess(timeUs_t currentTimeUs);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool taskSerialCheck(timeUs_t currentTimeUs, timeDelta_t currentDeltaTimeUs)
|
static void taskMain(timeUs_t currentTimeUs)
|
||||||
|
{
|
||||||
|
UNUSED(currentTimeUs);
|
||||||
|
|
||||||
|
#ifdef USE_SDCARD
|
||||||
|
afatfs_poll();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_OSD_SLAVE
|
||||||
|
static bool taskSerialCheck(timeUs_t currentTimeUs, timeDelta_t currentDeltaTimeUs)
|
||||||
{
|
{
|
||||||
UNUSED(currentTimeUs);
|
UNUSED(currentTimeUs);
|
||||||
UNUSED(currentDeltaTimeUs);
|
UNUSED(currentDeltaTimeUs);
|
||||||
|
|
||||||
return mspSerialWaiting();
|
return mspSerialWaiting();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void taskHandleSerial(timeUs_t currentTimeUs)
|
static void taskHandleSerial(timeUs_t currentTimeUs)
|
||||||
{
|
{
|
||||||
|
@ -122,7 +134,7 @@ static void taskHandleSerial(timeUs_t currentTimeUs)
|
||||||
mspSerialProcess(evaluateMspData, mspFcProcessCommand, mspFcProcessReply);
|
mspSerialProcess(evaluateMspData, mspFcProcessCommand, mspFcProcessReply);
|
||||||
}
|
}
|
||||||
|
|
||||||
void taskBatteryAlerts(timeUs_t currentTimeUs)
|
static void taskBatteryAlerts(timeUs_t currentTimeUs)
|
||||||
{
|
{
|
||||||
if (!ARMING_FLAG(ARMED)) {
|
if (!ARMING_FLAG(ARMED)) {
|
||||||
// the battery *might* fall out in flight, but if that happens the FC will likely be off too unless the user has battery backup.
|
// the battery *might* fall out in flight, but if that happens the FC will likely be off too unless the user has battery backup.
|
||||||
|
@ -194,7 +206,7 @@ static void taskTelemetry(timeUs_t currentTimeUs)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_CAMERA_CONTROL
|
#ifdef USE_CAMERA_CONTROL
|
||||||
void taskCameraControl(uint32_t currentTime)
|
static void taskCameraControl(uint32_t currentTime)
|
||||||
{
|
{
|
||||||
if (ARMING_FLAG(ARMED)) {
|
if (ARMING_FLAG(ARMED)) {
|
||||||
return;
|
return;
|
||||||
|
@ -208,7 +220,7 @@ void fcTasksInit(void)
|
||||||
{
|
{
|
||||||
schedulerInit();
|
schedulerInit();
|
||||||
|
|
||||||
setTaskEnabled(TASK_SYSTEM, true);
|
setTaskEnabled(TASK_MAIN, true);
|
||||||
|
|
||||||
setTaskEnabled(TASK_SERIAL, true);
|
setTaskEnabled(TASK_SERIAL, true);
|
||||||
rescheduleTask(TASK_SERIAL, TASK_PERIOD_HZ(serialConfig()->serial_update_rate_hz));
|
rescheduleTask(TASK_SERIAL, TASK_PERIOD_HZ(serialConfig()->serial_update_rate_hz));
|
||||||
|
@ -323,7 +335,7 @@ void fcTasksInit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
cfTask_t cfTasks[TASK_COUNT] = {
|
cfTask_t cfTasks[TASK_COUNT] = {
|
||||||
[TASK_SYSTEM_LOAD] = {
|
[TASK_SYSTEM] = {
|
||||||
.taskName = "SYSTEM",
|
.taskName = "SYSTEM",
|
||||||
.subTaskName = "LOAD",
|
.subTaskName = "LOAD",
|
||||||
.taskFunc = taskSystemLoad,
|
.taskFunc = taskSystemLoad,
|
||||||
|
@ -331,7 +343,7 @@ cfTask_t cfTasks[TASK_COUNT] = {
|
||||||
.staticPriority = TASK_PRIORITY_MEDIUM_HIGH,
|
.staticPriority = TASK_PRIORITY_MEDIUM_HIGH,
|
||||||
},
|
},
|
||||||
|
|
||||||
[TASK_SYSTEM] = {
|
[TASK_MAIN] = {
|
||||||
.taskName = "SYSTEM",
|
.taskName = "SYSTEM",
|
||||||
.subTaskName = "UPDATE",
|
.subTaskName = "UPDATE",
|
||||||
.taskFunc = taskMain,
|
.taskFunc = taskMain,
|
||||||
|
|
|
@ -225,7 +225,7 @@ void schedulerInit(void)
|
||||||
{
|
{
|
||||||
calculateTaskStatistics = true;
|
calculateTaskStatistics = true;
|
||||||
queueClear();
|
queueClear();
|
||||||
queueAdd(&cfTasks[TASK_SYSTEM_LOAD]);
|
queueAdd(&cfTasks[TASK_SYSTEM]);
|
||||||
}
|
}
|
||||||
|
|
||||||
FAST_CODE void scheduler(void)
|
FAST_CODE void scheduler(void)
|
||||||
|
|
|
@ -58,7 +58,7 @@ typedef struct {
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* Actual tasks */
|
/* Actual tasks */
|
||||||
TASK_SYSTEM = 0,
|
TASK_SYSTEM = 0,
|
||||||
TASK_SYSTEM_LOAD,
|
TASK_MAIN,
|
||||||
TASK_GYROPID,
|
TASK_GYROPID,
|
||||||
TASK_ACCEL,
|
TASK_ACCEL,
|
||||||
TASK_ATTITUDE,
|
TASK_ATTITUDE,
|
||||||
|
|
|
@ -69,7 +69,7 @@ extern "C" {
|
||||||
cfTask_t cfTasks[TASK_COUNT] = {
|
cfTask_t cfTasks[TASK_COUNT] = {
|
||||||
[TASK_SYSTEM] = {
|
[TASK_SYSTEM] = {
|
||||||
.taskName = "SYSTEM",
|
.taskName = "SYSTEM",
|
||||||
.taskFunc = taskSystem,
|
.taskFunc = taskSystemLoad,
|
||||||
.desiredPeriod = TASK_PERIOD_HZ(10),
|
.desiredPeriod = TASK_PERIOD_HZ(10),
|
||||||
.staticPriority = TASK_PRIORITY_MEDIUM_HIGH,
|
.staticPriority = TASK_PRIORITY_MEDIUM_HIGH,
|
||||||
},
|
},
|
||||||
|
@ -122,8 +122,6 @@ extern "C" {
|
||||||
|
|
||||||
TEST(SchedulerUnittest, TestPriorites)
|
TEST(SchedulerUnittest, TestPriorites)
|
||||||
{
|
{
|
||||||
EXPECT_EQ(20, TASK_COUNT);
|
|
||||||
|
|
||||||
EXPECT_EQ(TASK_PRIORITY_MEDIUM_HIGH, cfTasks[TASK_SYSTEM].staticPriority);
|
EXPECT_EQ(TASK_PRIORITY_MEDIUM_HIGH, cfTasks[TASK_SYSTEM].staticPriority);
|
||||||
EXPECT_EQ(TASK_PRIORITY_REALTIME, cfTasks[TASK_GYROPID].staticPriority);
|
EXPECT_EQ(TASK_PRIORITY_REALTIME, cfTasks[TASK_GYROPID].staticPriority);
|
||||||
EXPECT_EQ(TASK_PRIORITY_MEDIUM, cfTasks[TASK_ACCEL].staticPriority);
|
EXPECT_EQ(TASK_PRIORITY_MEDIUM, cfTasks[TASK_ACCEL].staticPriority);
|
||||||
|
@ -238,64 +236,68 @@ TEST(SchedulerUnittest, TestQueueArray)
|
||||||
queueClear();
|
queueClear();
|
||||||
taskQueueArray[TASK_COUNT_UNITTEST + 1] = deadBeefPtr; // note, must set deadBeefPtr after queueClear
|
taskQueueArray[TASK_COUNT_UNITTEST + 1] = deadBeefPtr; // note, must set deadBeefPtr after queueClear
|
||||||
|
|
||||||
|
unsigned enqueuedTasks = 0;
|
||||||
|
EXPECT_EQ(enqueuedTasks, taskQueueSize);
|
||||||
|
|
||||||
for (int taskId = 0; taskId < TASK_COUNT_UNITTEST - 1; ++taskId) {
|
for (int taskId = 0; taskId < TASK_COUNT_UNITTEST - 1; ++taskId) {
|
||||||
setTaskEnabled(static_cast<cfTaskId_e>(taskId), true);
|
if (cfTasks[taskId].taskFunc) {
|
||||||
EXPECT_EQ(taskId + 1, taskQueueSize);
|
setTaskEnabled(static_cast<cfTaskId_e>(taskId), true);
|
||||||
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
enqueuedTasks++;
|
||||||
|
EXPECT_EQ(enqueuedTasks, taskQueueSize);
|
||||||
|
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(TASK_COUNT_UNITTEST - 1, taskQueueSize);
|
EXPECT_NE(static_cast<cfTask_t*>(0), taskQueueArray[enqueuedTasks - 1]);
|
||||||
EXPECT_NE(static_cast<cfTask_t*>(0), taskQueueArray[TASK_COUNT_UNITTEST - 2]);
|
const cfTask_t *lastTaskPrev = taskQueueArray[enqueuedTasks - 1];
|
||||||
const cfTask_t *lastTaskPrev = taskQueueArray[TASK_COUNT_UNITTEST - 2];
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 1]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks + 1]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST]);
|
|
||||||
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
||||||
|
|
||||||
setTaskEnabled(TASK_SYSTEM, false);
|
setTaskEnabled(TASK_SYSTEM, false);
|
||||||
EXPECT_EQ(TASK_COUNT_UNITTEST - 2, taskQueueSize);
|
EXPECT_EQ(enqueuedTasks - 1, taskQueueSize);
|
||||||
EXPECT_EQ(lastTaskPrev, taskQueueArray[TASK_COUNT_UNITTEST - 3]);
|
EXPECT_EQ(lastTaskPrev, taskQueueArray[enqueuedTasks - 2]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 2]); // NULL at end of queue
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks - 1]); // NULL at end of queue
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 1]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks - 1]);
|
||||||
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
||||||
|
|
||||||
taskQueueArray[TASK_COUNT_UNITTEST - 2] = 0;
|
taskQueueArray[enqueuedTasks - 1] = 0;
|
||||||
setTaskEnabled(TASK_SYSTEM, true);
|
setTaskEnabled(TASK_SYSTEM, true);
|
||||||
EXPECT_EQ(TASK_COUNT_UNITTEST - 1, taskQueueSize);
|
EXPECT_EQ(enqueuedTasks, taskQueueSize);
|
||||||
EXPECT_EQ(lastTaskPrev, taskQueueArray[TASK_COUNT_UNITTEST - 2]);
|
EXPECT_EQ(lastTaskPrev, taskQueueArray[enqueuedTasks - 1]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 1]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks + 1]);
|
||||||
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
||||||
|
|
||||||
cfTaskInfo_t taskInfo;
|
cfTaskInfo_t taskInfo;
|
||||||
getTaskInfo(static_cast<cfTaskId_e>(TASK_COUNT_UNITTEST - 1), &taskInfo);
|
getTaskInfo(static_cast<cfTaskId_e>(enqueuedTasks + 1), &taskInfo);
|
||||||
EXPECT_EQ(false, taskInfo.isEnabled);
|
EXPECT_EQ(false, taskInfo.isEnabled);
|
||||||
setTaskEnabled(static_cast<cfTaskId_e>(TASK_COUNT_UNITTEST - 1), true);
|
setTaskEnabled(static_cast<cfTaskId_e>(enqueuedTasks), true);
|
||||||
EXPECT_EQ(TASK_COUNT_UNITTEST, taskQueueSize);
|
EXPECT_EQ(enqueuedTasks, taskQueueSize);
|
||||||
EXPECT_EQ(lastTaskPrev, taskQueueArray[TASK_COUNT_UNITTEST - 1]);
|
EXPECT_EQ(lastTaskPrev, taskQueueArray[enqueuedTasks - 1]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST]); // check no buffer overrun
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks + 1]); // check no buffer overrun
|
||||||
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
||||||
|
|
||||||
setTaskEnabled(TASK_SYSTEM, false);
|
setTaskEnabled(TASK_SYSTEM, false);
|
||||||
EXPECT_EQ(TASK_COUNT_UNITTEST - 1, taskQueueSize);
|
EXPECT_EQ(enqueuedTasks - 1, taskQueueSize);
|
||||||
//EXPECT_EQ(lastTaskPrev, taskQueueArray[TASK_COUNT_UNITTEST - 3]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 1]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks + 1]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST]);
|
|
||||||
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
||||||
|
|
||||||
setTaskEnabled(TASK_ACCEL, false);
|
setTaskEnabled(TASK_ACCEL, false);
|
||||||
EXPECT_EQ(TASK_COUNT_UNITTEST - 2, taskQueueSize);
|
EXPECT_EQ(enqueuedTasks - 2, taskQueueSize);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 2]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks - 1]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 1]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks + 1]);
|
||||||
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
||||||
|
|
||||||
setTaskEnabled(TASK_BATTERY_VOLTAGE, false);
|
setTaskEnabled(TASK_BATTERY_VOLTAGE, false);
|
||||||
EXPECT_EQ(TASK_COUNT_UNITTEST - 3, taskQueueSize);
|
EXPECT_EQ(enqueuedTasks - 2, taskQueueSize);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 3]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks - 2]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 2]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks - 1]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST - 1]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks]);
|
||||||
EXPECT_EQ(NULL, taskQueueArray[TASK_COUNT_UNITTEST]);
|
EXPECT_EQ(NULL, taskQueueArray[enqueuedTasks + 1]);
|
||||||
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
EXPECT_EQ(deadBeefPtr, taskQueueArray[TASK_COUNT_UNITTEST + 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue