AURIX Multicore Configuration OIL
Posted: Fri Feb 12, 2016 10:14 am
Ciao tutti,
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:
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.
From my understanding, RT-druid should create two instances of the OS. Master and Slave? E.g. files like EECFG.h should be created twice?
When I build it, I get the following problem:
If I create the files 2_Out/Gnuc/RT_Druid/eecfg.h res. eecfg.c manually (just empty files), the build process finishes, but not in the way i want. My question is, why does RTD even try to write an eecfg in addition to the ones created for the master and slave instances? And why is not able to create the file (if neccesary). It is able to create slave/eecfg and master/eecfg.
Every kind of help is highly appreciated.
Kind regards.
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.