I am new to ErikaEnterprise and OSEK language and trying to use EE on an Infineon AURIX TC 297. Infineon provided an example for Erika Enterprise which was working fine. I was also able to use my own oil-file to add tasks etc. I used oscfg as a make target and everything was fine. RTDruid created the EE files exactly the way I expected them.
This is the working oil-file for single-core-implementation:
Code: Select all
CPU TC27X {
OS IFX_TRICORE {
MCU_DATA = TRICORE {
MODEL = TC27x;
};
CPU_DATA = TRICORE {
CPU_CLOCK = 200.0;
COMPILER_TYPE = GNU;
MULTI_STACK = TRUE {
IRQ_STACK = TRUE {
SYS_SIZE = 256;
};
};
};
STATUS = EXTENDED;
PRETASKHOOK = FALSE;
POSTTASKHOOK = FALSE;
USERESSCHEDULER = FALSE;
KERNEL_TYPE = ECC2;
};
APPMODE TRICORE_CPU {
EVENT = IFX_OSCFG_EVENT1;
EVENT = IFX_OSCFG_EVENT2;
EVENT = IFX_OSCFG_EVENT3;
TASK = IFX_OSTASK_EVENT1;
TASK = IFX_OSTASK_EVENT2;
TASK = IFX_OSTASK_EVENT3;
TASK = IFX_OSTASK_1MS;
TASK = IFX_OSTASK_5MS;
TASK = IFX_OSTASK_10MS;
TASK = IFX_OSTASK_20MS;
TASK = IFX_OSTASK_50MS;
TASK = IFX_OSTASK_100MS;
TASK = IFX_OSTASK_200MS;
TASK = IFX_OSTASK_BACKGROUND;
TASK = IFX_OSTASK_INIT;
COUNTER = HW_COUNTER;
ALARM = IFX_OSTASK_ALARM_1MS;
ALARM = IFX_OSTASK_ALARM_5MS;
ALARM = IFX_OSTASK_ALARM_10MS;
ALARM = IFX_OSTASK_ALARM_20MS;
ALARM = IFX_OSTASK_ALARM_50MS;
ALARM = IFX_OSTASK_ALARM_100MS;
};
EVENT IFX_OSCFG_EVENT1 {
MASK = 0x01;
};
EVENT IFX_OSCFG_EVENT2 {
MASK = 0x02;
};
EVENT IFX_OSCFG_EVENT3 {
MASK = 0x04;
};
TASK IFX_OSTASK_EVENT1{
PRIORITY = 64;
ACTIVATION = 1;
AUTOSTART = FALSE;
EVENT = IFX_OSCFG_EVENT1;
SCHEDULE = FULL;
STACK = PRIVATE {
SYS_SIZE = 256;
};
};
TASK IFX_OSTASK_EVENT2{
PRIORITY = 64;
ACTIVATION = 1;
AUTOSTART = FALSE;
EVENT = IFX_OSCFG_EVENT2;
SCHEDULE = FULL;
STACK = PRIVATE {
SYS_SIZE = 256;
};
};
TASK IFX_OSTASK_EVENT3{
PRIORITY = 64;
ACTIVATION = 1;
AUTOSTART = FALSE;
EVENT = IFX_OSCFG_EVENT3;
SCHEDULE = FULL;
STACK = PRIVATE {
SYS_SIZE = 256;
};
};
TASK IFX_OSTASK_1MS{
PRIORITY = 64;
ACTIVATION = 1;
AUTOSTART = FALSE;
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_5MS{
PRIORITY = 32;
ACTIVATION = 1;
AUTOSTART = FALSE;
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_10MS{
PRIORITY = 16;
ACTIVATION = 1;
AUTOSTART = FALSE;
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_20MS{
PRIORITY = 8;
ACTIVATION = 1;
AUTOSTART = FALSE;
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_50MS{
PRIORITY = 4;
ACTIVATION = 1;
AUTOSTART = FALSE;
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_100MS{
PRIORITY = 2;
ACTIVATION = 1;
AUTOSTART = FALSE;
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_200MS{
PRIORITY = 2;
ACTIVATION = 1;
AUTOSTART = FALSE;
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_BACKGROUND{
PRIORITY = 1;
ACTIVATION = 1;
AUTOSTART = FALSE;
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_INIT{
PRIORITY = 2;
ACTIVATION = 1;
AUTOSTART = TRUE { APPMODE = TRICORE_CPU; };
SCHEDULE = FULL;
STACK = SHARED;
};
COUNTER IFX_OSTASK_COUNTER
{
MINCYCLE = 5;
MAXALLOWEDVALUE = 10000;
TICKSPERBASE = 1;
};
ALARM IFX_OSTASK_ALARM_1MS
{
ACTION = ACTIVATETASK
{
TASK = IFX_OSTASK_1MS;
};
COUNTER = IFX_OSTASK_COUNTER;
/* AUTOSTART = TRUE { APPMODE = TRICORE_CPU; CYCLETIME = 10;}; */
};
ALARM IFX_OSTASK_ALARM_5MS
{
ACTION = ACTIVATETASK
{
TASK = IFX_OSTASK_5MS;
};
COUNTER = IFX_OSTASK_COUNTER;
/* AUTOSTART = TRUE { APPMODE = TRICORE_CPU; CYCLETIME = 10;}; */
};
ALARM IFX_OSTASK_ALARM_10MS
{
ACTION = ACTIVATETASK
{
TASK = IFX_OSTASK_10MS;
};
COUNTER = IFX_OSTASK_COUNTER;
/* AUTOSTART = TRUE { APPMODE = TRICORE_CPU; CYCLETIME = 10;}; */
};
ALARM IFX_OSTASK_ALARM_20MS
{
ACTION = ACTIVATETASK
{
TASK = IFX_OSTASK_20MS;
};
COUNTER = IFX_OSTASK_COUNTER;
/* AUTOSTART = TRUE { APPMODE = TRICORE_CPU; CYCLETIME = 10;}; */
};
ALARM IFX_OSTASK_ALARM_50MS
{
ACTION = ACTIVATETASK
{
TASK = IFX_OSTASK_50MS;
};
COUNTER = IFX_OSTASK_COUNTER;
/* AUTOSTART = TRUE { APPMODE = TRICORE_CPU; CYCLETIME = 10;}; */
};
ALARM IFX_OSTASK_ALARM_100MS
{
ACTION = ACTIVATETASK
{
TASK = IFX_OSTASK_100MS;
};
COUNTER = IFX_OSTASK_COUNTER;
/* AUTOSTART = TRUE { APPMODE = TRICORE_CPU; CYCLETIME = 10;}; */
};
ALARM IFX_OSTASK_ALARM_200MS
{
ACTION = ACTIVATETASK
{
TASK = IFX_OSTASK_200MS;
};
COUNTER = IFX_OSTASK_COUNTER;
/* AUTOSTART = TRUE { APPMODE = TRICORE_CPU; CYCLETIME = 10;}; */
};
};
Then, I modified my oil file to use two of the three cores. The APPSrc is currently not in use as I suspected a problem there, but the build does not finish.
Code: Select all
CPU TC27X {
OS IFX_TRICORE {
MASTER_CPU = "master";
CPU_DATA = TRICORE {
ID = "master";
//APP_SRC = "OSTASK.c";
CPU_CLOCK = 200.0;
COMPILER_TYPE = GNU;
MULTI_STACK = TRUE {
IRQ_STACK = TRUE {
SYS_SIZE = 256;
};
};
};
CPU_DATA = TRICORE {
CPU_CLOCK = 200.0;
ID = "slave";
//APP_SRC = "OSTASKS.c";
COMPILER_TYPE = GNU;
MULTI_STACK = TRUE {
IRQ_STACK = TRUE {
SYS_SIZE = 256;
};
};
};
MCU_DATA = TRICORE {
MODEL = TC27x;
};
STATUS = EXTENDED;
PRETASKHOOK = FALSE;
POSTTASKHOOK = FALSE;
USERESSCHEDULER = FALSE;
KERNEL_TYPE = ECC2;
};
APPMODE TRICORE_CPU {
TASK = IFX_OSTASK_1MS;
TASK = IFX_OSTASK_100MS;
TASK = IFX_OSTASK_BACKGROUND;
TASK = IFX_OSTASK_INIT;
COUNTER = HW_COUNTER;
ALARM = IFX_OSTASK_ALARM_1MS;
ALARM = IFX_OSTASK_ALARM_100MS;
};
TASK IFX_OSTASK_1MS{
PRIORITY = 64;
ACTIVATION = 1;
CPU_ID = "master";
AUTOSTART = FALSE;
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_100MS{
PRIORITY = 2;
ACTIVATION = 1;
AUTOSTART = FALSE;
CPU_ID = "slave";
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_BACKGROUND{
PRIORITY = 1;
ACTIVATION = 1;
AUTOSTART = FALSE;
CPU_ID = "master";
SCHEDULE = FULL;
STACK = SHARED;
};
TASK IFX_OSTASK_INIT{
PRIORITY = 2;
ACTIVATION = 1;
AUTOSTART = TRUE { APPMODE = TRICORE_CPU; };
SCHEDULE = FULL;
CPU_ID = "master";
STACK = SHARED;
};
COUNTER IFX_OSTASK_COUNTER
{
MINCYCLE = 5;
MAXALLOWEDVALUE = 10000;
CPU_ID = "master";
TICKSPERBASE = 1;
};
COUNTER IFX_OSTASK_COUNTER2
{
MINCYCLE = 5;
MAXALLOWEDVALUE = 10000;
CPU_ID = "slave";
TICKSPERBASE = 1;
};
ALARM IFX_OSTASK_ALARM_1MS
{
ACTION = ACTIVATETASK
{
TASK = IFX_OSTASK_1MS;
};
COUNTER = IFX_OSTASK_COUNTER;
/* AUTOSTART = TRUE { APPMODE = TRICORE_CPU; CYCLETIME = 10;}; */
};
ALARM IFX_OSTASK_ALARM_100MS
{
ACTION = ACTIVATETASK
{
TASK = IFX_OSTASK_100MS;
};
COUNTER = IFX_OSTASK_COUNTER2;
/* AUTOSTART = TRUE { APPMODE = TRICORE_CPU; CYCLETIME = 10;}; */
};
};
When I build it, I get the following problem:
Code: Select all
make oscfg
make[1]: Entering directory `C:/Users/..../workspaceAURIX/ErikaMulticoreTryout'
Operating system configurations generated ..
[LOAD 1_ToolEnv\0_Build\1_Config\CfgErikaOS.oil]
[WORKING Prepare configuration's files]
[ Start to save]
[WRITE 2_Out\Gnuc\RT_Druid\master\eecfg.c]
[WRITE 2_Out\Gnuc\RT_Druid\master\eecfg.h]
[WRITE 2_Out\Gnuc\RT_Druid\master\common.c]
[WRITE 2_Out\Gnuc\RT_Druid\makefile]
[WRITE 2_Out\Gnuc\RT_Druid\common.mk]
[WRITE 2_Out\Gnuc\RT_Druid\master\makefile]
[WRITE 2_Out\Gnuc\RT_Druid\slave\eecfg.c]
[WRITE 2_Out\Gnuc\RT_Druid\slave\eecfg.h]
[WRITE 2_Out\Gnuc\RT_Druid\slave\makefile]
cp: cannot stat `2_Out/Gnuc/RT_Druid/eecfg.h': No such file or directory
make[1]: Leaving directory `C:/Users/..../workspaceAURIX/ErikaMulticoreTryout'
make[1]: *** [0_Src/3_OS/Config/eecfg.c] Error 1
make: *** [oscfg] Error 2
10:06:39 Build Finished (took 3s.557ms)
Every kind of help is highly appreciated.
Kind regards.