0

In the OIL files, there's always a file called "Implementation.oil" that is included. I can't find anything that explain what this file do! Her is an example: `

#include "implementation.oil"
CPU ATMEL_AT91SAM7S256
{
  OS LEJOS_OSEK
  {
    STATUS = EXTENDED;
    STARTUPHOOK = FALSE;
    ERRORHOOK = FALSE;
    SHUTDOWNHOOK = FALSE;
    PRETASKHOOK = FALSE;
    POSTTASKHOOK = FALSE;
    USEGETSERVICEID = FALSE;
    USEPARAMETERACCESS = FALSE;
    USERESSCHEDULER = FALSE;
  };

  /* Definition of application mode */
  APPMODE appmode1{};

  /* Definition of Task1 */
  TASK Task1
  {
    AUTOSTART = FALSE;
    PRIORITY = 1; /* Smaller value means lower priority */ 
    ACTIVATION = 1;
    SCHEDULE = FULL;
    STACKSIZE = 512; /* Stack size */ 
  };
`
Machavity
  • 30,841
  • 27
  • 92
  • 100
Zohra-tl
  • 53
  • 9
  • A google search of '#include "implementation.oil"' finds that most often this refers to "specification of the system objects for the specific platform". So it's a file specific to an individual set of target hardware. – Ross Sep 05 '14 at 13:14
  • Thank you Ross, but I am looking for an example to be able to really understand what this file should contain. – Zohra-tl Sep 05 '14 at 13:24

3 Answers3

1

Hope this is what you are looking for, this shall help you in understanding OSEK/VDX RTOS

http://igm.univ-mlv.fr/~masson/Teaching/IMC5-1EO/osek.pdf

Just found it will looking for OIL configuration tool User manual from Vector. Credit goes to University :/

1

Well, if anyone is interested, here's what an implemntation.oil file looks like:

    IMPLEMENTATION trampoline {
    OS {

        ENUM [STANDARD, EXTENDED] STATUS;
        BOOLEAN STARTUPHOOK = FALSE;
        BOOLEAN ERRORHOOK = FALSE;
        BOOLEAN SHUTDOWNHOOK = FALSE;
        BOOLEAN PRETASKHOOK = FALSE;
        BOOLEAN POSTTASKHOOK = FALSE;
        BOOLEAN USEGETSERVICEID = FALSE;
        BOOLEAN USEPARAMETERACCESS = FALSE;
        BOOLEAN USERESSCHEDULER = TRUE;

        BOOLEAN SYSTEM_CALL = FALSE;
        BOOLEAN DEBUG = FALSE;
        BOOLEAN INTERRUPTTABLE = FALSE;
        BOOLEAN PACKED_DATA = FALSE;
        IDENTIFIER SCHEDULER = osek;
        BOOLEAN [
          TRUE {
            ENUM [
              elxr   { STRING SCRIPT = "script.ld"; },
              gnu_ld { STRING SCRIPT = "script.ld"; },
              mwld   { STRING SCRIPT = "script.mcf"; }
            ] LINKER;
            ENUM [gcc, ghs, mwc] COMPILER;
            ENUM [gnu_as] ASSEMBLER;
            BOOLEAN MEMORY_PROTECTION = FALSE;
          },
          FALSE
        ] MEMMAP = FALSE;

        BOOLEAN [
          TRUE {
            STRING APP_SRC[];
            STRING CFLAGS[];
            STRING CPPFLAGS[];
            STRING ASFLAGS[];
            STRING LDFLAGS[];
            STRING APP_NAME[];
            STRING COMPILER[];
            STRING ASSEMBLER[];
            STRING LINKER[];
            },
          FALSE
        ] BUILD = FALSE;
        BOOLEAN [
          TRUE {
            ENUM [ FILE { STRING NAME; } ] METHOD;
            ENUM [xml, txt, bin] FORMAT;
            BOOLEAN TRACE_TASK = TRUE;
            BOOLEAN TRACE_ISR = TRUE;
            BOOLEAN TRACE_RESOURCE = TRUE;
            BOOLEAN TRACE_ALARM = TRUE;
            BOOLEAN TRACE_USER = TRUE;
            BOOLEAN DESCRIPTION = TRUE;
          },
          FALSE
        ] TRACE = FALSE;
  };

    APPMODE {
            };

    TASK {
        BOOLEAN [
        TRUE {
        APPMODE_TYPE APPMODE[];
        },
        FALSE
        ] AUTOSTART;
        UINT32 PRIORITY;
        UINT32 ACTIVATION;
        ENUM [NON, FULL] SCHEDULE;
        EVENT_TYPE EVENT[];
        RESOURCE_TYPE RESOURCE[];
        MESSAGE_TYPE MESSAGE[];
        UINT32 STACKSIZE = 2000 ;
        };

    ISR {
        UINT32 [1, 2] CATEGORY;
        RESOURCE_TYPE RESOURCE[];
        MESSAGE_TYPE MESSAGE[];
        UINT32 PRIORITY;
        UINT32 STACKSIZE = 2000 ;
       };
    COUNTER {
        UINT32 MINCYCLE;
        UINT32 MAXALLOWEDVALUE;
        UINT32 TICKSPERBASE;
        };
    ALARM {
        COUNTER_TYPE COUNTER;
        ENUM [
               ACTIVATETASK {
                  TASK_TYPE TASK;
                  },
               SETEVENT {
                 TASK_TYPE TASK;
                 EVENT_TYPE EVENT;
                       }

              ] ACTION;
       BOOLEAN [
               TRUE {
                 UINT32 ALARMTIME;
                 UINT32 CYCLETIME;
                 APPMODE_TYPE APPMODE[];
                    },
                    FALSE
               ] AUTOSTART;
           };
    EVENT {
       UINT64 WITH_AUTO MASK;
          };
    RESOURCE {
       ENUM [
             STANDARD,
       LINKED {
             RESOURCE_TYPE LINKEDRESOURCE;
             },
       INTERNAL
       ] RESOURCEPROPERTY;
       };
    MESSAGE {
     ENUM [
       SEND_STATIC_INTERNAL {
          STRING CDATATYPE;
          },
          RECEIVE_UNQUEUED_INTERNAL {
              MESSAGE_TYPE SENDINGMESSAGE;
              UINT64 INITIALVALUE = 0;
              },
          RECEIVE_QUEUED_INTERNAL {
              MESSAGE_TYPE SENDINGMESSAGE;
              UINT32 QUEUESIZE;
              }
       ] MESSAGEPROPERTY;

     ENUM [
       NONE,
       ACTIVATETASK {
          TASK_TYPE TASK;
         },
       SETEVENT {
         TASK_TYPE TASK;
         EVENT_TYPE EVENT;
         },
       COMCALLBACK {
         STRING CALLBACKROUTINENAME;
         MESSAGE_TYPE MESSAGE[];
         },
       FLAG {
         STRING FLAGNAME;
         }
         ] NOTIFICATION = NONE;
       };
    COM {
     BOOLEAN COMERRORHOOK = FALSE;
     BOOLEAN COMUSEGETSERVICEID = FALSE;
     BOOLEAN COMUSEPARAMETERACCESS = FALSE;
     BOOLEAN COMSTARTCOMEXTENSION = FALSE;
     STRING  COMAPPMODE[];
     ENUM [
           COMSTANDARD,
           COMEXTENDED
           ] COMSTATUS = COMSTANDARD;
     };
    NM {
     };
};
Zohra-tl
  • 53
  • 9
1

The "IMPLEMENTATION" section is used to define the range of values that can be assigned to the corresponding attribute in the "CPU" section (i.e. limit the max number of task activations, task priorities, etc in order to speed up the code execution or to reduce the code size or some other reason). This is useful when porting an software application from one OSEK/VDX OS implementation to another (e.g. Trampoline to Erika, Lejos to Trampoline, etc).