0

在 OIL 文件中,始终包含一个名为“Implementation.oil”的文件。我找不到任何解释这个文件做什么的东西!她就是一个例子:`

#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 */ 
  };
`
4

3 回答 3

2

“IMPLEMENTATION”部分用于定义可以分配给“CPU”部分中相应属性的值的范围(即限制任务激活的最大数量、任务优先级等,以加快代码执行或减少代码大小或其他一些原因)。这在将软件应用程序从一个 OSEK/VDX OS 实现移植到另一个(例如 Trampoline 到 Erika、Lejos 到 Trampoline 等)时很有用。

于 2015-05-23T16:02:24.530 回答
1

好吧,如果有人感兴趣,下面是implemntation.oil 文件的样子:

    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 {
     };
};
于 2015-03-09T15:01:42.910 回答
1

希望这是您正在寻找的,这将有助于您了解 OSEK/VDX RTOS

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

刚发现它会从 Vector 中寻找 OIL 配置工具用户手册。学分归功于大学:/

于 2014-10-09T09:14:53.917 回答