Skip to content
Snippets Groups Projects
Commit 73626dc7 authored by Christian Dietrich's avatar Christian Dietrich
Browse files

timing/new benchmark: I4Copter Benchmark

parent 3d7cd164
No related branches found
No related tags found
No related merge requests found
......@@ -48,3 +48,10 @@ DOSEK_BINARY(
LIBS libtest timing
SOURCES alarm.cc
)
DOSEK_BINARY(
NAME bench-timing-copter
SYSTEM_DESC copter.oil
LIBS libtest timing
SOURCES copter.cc
)
#include "os.h"
#include "test/test.h"
#include "timing.h"
#include "machine.h"
//extern "C" volatile uint32_t random_source =0 ;
DeclareTask(SignalGatherInitiateTask);
DeclareTask(SignalGatherFinishedTask);
DeclareTask(SignalGatherTimeoutTask);
DeclareTask(SignalProcessingActuateTask);
DeclareTask(SignalProcessingAttitudeTask);
DeclareTask(ActuateTask);
DeclareTask(FlightControlAttitudeTask);
DeclareTask(FlightControlActuateTask);
DeclareTask(MavlinkSendTask);
DeclareTask(CopterControlTask);
DeclareTask(MavlinkRecvHandler);
DeclareResource(SPIBus);
DeclareAlarm(CopterControlWatchdogAlarm);
TEST_MAKE_OS_MAIN( StartOS(0) )
GENERATE_TIME_CONSUMER(calculation, 100)
GENERATE_TIME_CONSUMER(calculation_short, 10)
int round;
TASK(SignalGatherInitiateTask) {
if (round == 9) {
calculation();
timing_dump();
ShutdownMachine();
}
calculation();
GetResource(SPIBus);
calculation();
if ((round % 2) == 0) {
ActivateTask(SignalGatherTimeoutTask);
calculation();
} else {
ActivateTask(SignalGatherFinishedTask);
calculation();
}
round ++;
calculation();
ReleaseResource(SPIBus);
calculation();
TerminateTask();
}
TASK(SignalGatherFinishedTask) {
timing_start(0);
calculation();
ActivateTask(SignalProcessingAttitudeTask);
calculation();
ActivateTask(SignalProcessingActuateTask);
calculation();
timing_end(0);
TerminateTask();
}
TASK(SignalGatherTimeoutTask) {
calculation();
GetResource(SPIBus);
calculation();
ReleaseResource(SPIBus);
calculation();
ChainTask(SignalGatherFinishedTask);
}
volatile int calculate;
TASK(SignalProcessingActuateTask) {
calculation();
TerminateTask();
}
TASK(SignalProcessingAttitudeTask) {
calculation();
TerminateTask();
}
TASK(FlightControlTask) {
calculation();
ActivateTask(FlightControlAttitudeTask);
calculation();
ActivateTask(FlightControlActuateTask);
calculation();
ActivateTask(MavlinkSendTask);
calculation();
TerminateTask();
}
TASK(FlightControlAttitudeTask) {
calculation();
TerminateTask();
}
TASK(FlightControlActuateTask) {
calculation();
TerminateTask();
}
TASK(MavlinkSendTask) {
calculation();
GetResource(SPIBus);
calculation();
Machine::trigger_interrupt_from_user(37);
ReleaseResource(SPIBus);
calculation();
TerminateTask();
}
TASK(CopterControlTask) {
calculation();
SuspendAllInterrupts();
calculation();
ResumeAllInterrupts();
calculation();
timing_end(1);
if (round < 5) {
CancelAlarm(CopterControlWatchdogAlarm);
calculation();
SetRelAlarm(CopterControlWatchdogAlarm, 100, 100);
}
calculation();
TerminateTask();
}
ISR2(MavlinkRecvHandler) {
timing_start(1);
calculation_short();
ActivateTask(CopterControlTask);
calculation_short();
}
TASK(CopterControlWatchdogTask) {
calculation();
TerminateTask();
}
void PreIdleHook() {
kout << "I" << round << endl;
}
CPU CopterMock {
OS Coptermock {
STATUS = STANDARD;
ERRORHOOK = FALSE;
STARTUPHOOK = FALSE;
SHUTDOWNHOOK = FALSE;
PRETASKHOOK = FALSE;
POSTTASKHOOK = FALSE;
};
TASKGROUP SignalGatherGroup {
PROMISE = SERIALIZED;
};
TASK SignalGatherInitiateTask {
SCHEDULE = FULL;
PRIORITY = 24;
ACTIVATION = 1;
AUTOSTART = FALSE;
RESOURCE = SPIBus;
TASKGROUP = SignalGatherGroup;
};
TASK SignalGatherFinishedTask {
SCHEDULE = FULL;
PRIORITY = 25;
ACTIVATION = 1;
AUTOSTART = FALSE;
RESOURCE = SPIBus;
TASKGROUP = SignalGatherGroup;
};
TASK SignalGatherTimeoutTask {
SCHEDULE = FULL;
PRIORITY = 23;
ACTIVATION = 1;
AUTOSTART = FALSE;
RESOURCE = SPIBus;
TASKGROUP = SignalGatherGroup;
};
TASK SignalProcessingActuateTask {
SCHEDULE = FULL;
PRIORITY = 22;
ACTIVATION = 1;
AUTOSTART = FALSE;
TASKGROUP = SignalGatherGroup;
};
TASK SignalProcessingAttitudeTask {
SCHEDULE = FULL;
PRIORITY = 21;
ACTIVATION = 1;
AUTOSTART = FALSE;
TASKGROUP = SignalGatherGroup;
};
/* Actuate Tasks */
TASKGROUP FlightControlGroup {
PROMISE = SERIALIZED;
};
TASK FlightControlTask {
SCHEDULE = NON;
PRIORITY = 11;
ACTIVATION = 1;
AUTOSTART = FALSE;
TASKGROUP = FlightControlGroup;
};
TASK FlightControlAttitudeTask {
SCHEDULE = FULL;
PRIORITY = 12;
ACTIVATION = 1;
AUTOSTART = FALSE;
TASKGROUP = FlightControlGroup;
};
TASK FlightControlActuateTask {
SCHEDULE = FULL;
PRIORITY = 13;
ACTIVATION = 1;
AUTOSTART = FALSE;
TASKGROUP = FlightControlGroup;
};
TASK MavlinkSendTask {
SCHEDULE = FULL;
PRIORITY = 10;
ACTIVATION = 1;
AUTOSTART = FALSE;
TASKGROUP = FlightControlGroup;
};
/* Watchdog Task */
TASKGROUP WatchdogGroup {
PROMISE = SERIALIZED;
};
TASK CopterControlWatchdogTask {
SCHEDULE = NON;
PRIORITY = 1;
ACTIVATION = 1;
AUTOSTART = FALSE;
TASKGROUP = WatchdogGroup;
};
/* Remote Control Task */
TASKGROUP MavlinkReceiveGroup {
PROMISE = SERIALIZED;
};
TASK CopterControlTask {
SCHEDULE = FULL;
PRIORITY = 5;
ACTIVATION = 1;
AUTOSTART = FALSE;
TASKGROUP = MavlinkReceiveGroup;
};
ISR MavlinkRecvHandler {
CATEGORY = 2;
PRIORITY = 100;
DEVICE = 37;
TASKGROUP = MavlinkReceiveGroup;
MINIAT = 200000;
};
RESOURCE SPIBus {
RESOURCEPROPERTY = STANDARD;
};
ALARM SignalGatherAlarm {
COUNTER = C1;
ACTION = ACTIVATETASK {
TASK = SignalGatherInitiateTask;
};
AUTOSTART = TRUE {
ALARMTIME = 10;
CYCLETIME = 30;
};
};
ALARM FlightControlAlarm {
COUNTER = C1;
ACTION = ACTIVATETASK {
TASK = FlightControlTask;
};
AUTOSTART = TRUE {
ALARMTIME = 10;
CYCLETIME = 90;
};
};
ALARM CopterControlWatchdogAlarm {
COUNTER = C1;
ACTION = ACTIVATETASK {
TASK = CopterControlWatchdogTask;
};
};
COUNTER C1 {
MAXALLOWEDVALUE = 50000;
TICKSPERBASE = 1;
MINCYCLE = 1;
};
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment