]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Merge with 16ca58066fba6a270838b7833397c094ec097f43
authormaek <devnull@localhost>
Wed, 20 Oct 2010 15:27:44 +0000 (17:27 +0200)
committermaek <devnull@localhost>
Wed, 20 Oct 2010 15:27:44 +0000 (17:27 +0200)
134 files changed:
arch/arm/arm_cm3/kernel/arch_krn.sx
arch/ppc/crt0.sx
boards/board_common.mk
boards/et_stm32_stamp/build_config.mk
boards/hcs12_elmicro_card12/build_config.mk
boards/linux/build_config.mk
boards/mpc5516it/build_config.mk
boards/mpc551xsim/build_config.mk
boards/mpc5554sim/build_config.mk
boards/mpc5567qrtech/build_config.mk
boards/mpc563xsim/build_config.mk
boards/stm32_mcbstm32/build_config.mk
boards/stm32_stm3210c/build_config.mk
boards/stm32_stm3210c/config/Port_Cfg.h
common/cirq_buffer.c
common/mbox.c
common/newlib_port.c
common/printf.c
common/sleep.c
common/tcf/Tcf_Cfg.c [new file with mode: 0644]
common/tcf/Tcf_Cfg.h [new file with mode: 0644]
common/tcf/streams.c [new file with mode: 0644]
common/tcf/streams.h [new file with mode: 0644]
common/tcf/sys_monitor.c [new file with mode: 0644]
common/tcf/sys_monitor.h [new file with mode: 0644]
common/tcf/tcf.c [new file with mode: 0644]
common/tcf/tcf.h [new file with mode: 0644]
communication/CanIf/CanIf.c
communication/CanSM/CanSM.c
communication/CanTp/CanTp.c
communication/Com/Com.c
communication/Com/Com_Com.c
communication/Com/Com_Internal.h [new file with mode: 0644]
communication/Com/Com_Sched.c
communication/Com/Com_misc.c
communication/Nm/Nm.c
communication/PduR/PduR.c
communication/PduR/PduR_CanIf.c
communication/PduR/PduR_CanTp.c
communication/PduR/PduR_Com.c
communication/PduR/PduR_Dcm.c
communication/PduR/PduR_LinIf.c
diagnostic/Dcm/Dcm.c
diagnostic/Dcm/Dcm_Dsd.c
diagnostic/Dcm/Dcm_Dsl.c
diagnostic/Dcm/Dcm_Dsp.c
diagnostic/Dcm/Dcm_Internal.h
diagnostic/Dem/Dem.c
diagnostic/Dem/Dem_Lcfg.h
examples/blinker_node/build_config.mk
examples/blinker_node/makefile
examples/pwm_node/build_config.mk
examples/pwm_node/makefile
examples/pwm_node2/build_config.mk
examples/pwm_node2/makefile
examples/simple/build_config.mk
examples/simple/config/hcs12_elmicro_card12/build_config.mk [new file with mode: 0644]
examples/simple/makefile
examples/switch_node/build_config.mk
examples/switch_node/makefile
examples/tiny/build_config.mk
examples/tiny/config/hcs12_elmicro_card12/build_config.mk [new file with mode: 0644]
examples/tiny/makefile
include/CanTp.h
include/Com.h
include/Dcm.h
include/Dem.h
include/Os.h
include/PduR.h
include/Port.h
include/mbox.h
readme.txt
scripts/build_arm.sh
scripts/build_ppc.sh
scripts/rules.mk
system/kernel/alarm.c
system/kernel/application.c [new file with mode: 0644]
system/kernel/asm_sample.c
system/kernel/counter.c
system/kernel/event.c
system/kernel/include/internal.h
system/kernel/include/kernel.h
system/kernel/include/pcb.h
system/kernel/include/sys.h
system/kernel/include/task_i.h
system/kernel/init.c
system/kernel/isr.c
system/kernel/makefile
system/kernel/resource.c
system/kernel/task.c
system/kernel/testsystem/build_config.mk
system/kernel/testsystem/osek_01_tm/Os_Cfg.c [new file with mode: 0644]
system/kernel/testsystem/osek_01_tm/Os_Cfg.h [new file with mode: 0644]
system/kernel/testsystem/osek_01_tm/build_config.mk [new file with mode: 0644]
system/kernel/testsystem/osek_01_tm/config_tm_01.arxml [new file with mode: 0644]
system/kernel/testsystem/osek_01_tm/makefile [new file with mode: 0644]
system/kernel/testsystem/osek_01_tm/test_tm_01.c [new file with mode: 0644]
system/kernel/testsystem/osek_02_ip/Os_Cfg.c [new file with mode: 0644]
system/kernel/testsystem/osek_02_ip/Os_Cfg.h [new file with mode: 0644]
system/kernel/testsystem/osek_02_ip/build_config.mk [new file with mode: 0644]
system/kernel/testsystem/osek_02_ip/config_osek_ip.arxml [new file with mode: 0644]
system/kernel/testsystem/osek_02_ip/makefile [new file with mode: 0644]
system/kernel/testsystem/osek_02_ip/osek_ip.c [new file with mode: 0644]
system/kernel/testsystem/osek_03_ev/Os_Cfg.c [new file with mode: 0644]
system/kernel/testsystem/osek_03_ev/Os_Cfg.h [new file with mode: 0644]
system/kernel/testsystem/osek_03_ev/build_config.mk [new file with mode: 0644]
system/kernel/testsystem/osek_03_ev/config_osek_ev.arxml [new file with mode: 0644]
system/kernel/testsystem/osek_03_ev/makefile [new file with mode: 0644]
system/kernel/testsystem/osek_03_ev/osek_ev.c [new file with mode: 0644]
system/kernel/testsystem/osek_04_rm/Os_Cfg.c [new file with mode: 0644]
system/kernel/testsystem/osek_04_rm/Os_Cfg.h [new file with mode: 0644]
system/kernel/testsystem/osek_04_rm/build_config.mk [new file with mode: 0644]
system/kernel/testsystem/osek_04_rm/config_osek_rm.arxml [new file with mode: 0644]
system/kernel/testsystem/osek_04_rm/makefile [new file with mode: 0644]
system/kernel/testsystem/osek_04_rm/test_osek_rm.c [new file with mode: 0644]
system/kernel/testsystem/osek_05_al/Os_Cfg.c [new file with mode: 0644]
system/kernel/testsystem/osek_05_al/Os_Cfg.h [new file with mode: 0644]
system/kernel/testsystem/osek_05_al/build_config.mk [new file with mode: 0644]
system/kernel/testsystem/osek_05_al/config_osek_al.arxml [new file with mode: 0644]
system/kernel/testsystem/osek_05_al/makefile [new file with mode: 0644]
system/kernel/testsystem/osek_05_al/test_osek_al.c [new file with mode: 0644]
system/kernel/testsystem/osek_06_eh/NewEcu.arxml [new file with mode: 0644]
system/kernel/testsystem/osek_06_eh/Os_Cfg.c [new file with mode: 0644]
system/kernel/testsystem/osek_06_eh/Os_Cfg.h [new file with mode: 0644]
system/kernel/testsystem/osek_06_eh/build_config.mk [new file with mode: 0644]
system/kernel/testsystem/osek_06_eh/makefile [new file with mode: 0644]
system/kernel/testsystem/osek_06_eh/test_osek_ev.c [new file with mode: 0644]
system/kernel/testsystem/suite_tm_01/Os_Cfg.c [new file with mode: 0644]
system/kernel/testsystem/suite_tm_01/Os_Cfg.h [new file with mode: 0644]
system/kernel/testsystem/suite_tm_01/test_tm_02.c [new file with mode: 0644]
system/kernel/testsystem/test_framework.c
system/kernel/testsystem/test_framework.h
system/kernel/testsystem/test_hooks.c
system/kernel/testsystem/testsystem.txt [new file with mode: 0644]

index 349862c8ddb65f97180ac03e9044bd9c145dcf6c..2a82bd89b415d25826338f0e9688ebca869a2680 100644 (file)
@@ -36,6 +36,16 @@ Irq_Handler:
     mov.w   r4,#LC_PATTERN\r
     str     r4,[sp,#C_CONTEXT_OFFS]    \r
     mov        r0,sp                   // stack as first arg\r
+    \r
+// When at interrupt nest count = 0, load interrupt stack    \r
+       ldr      r4,=os_sys\r
+       ldr      r5,[r4,#SYS_INT_NEST_CNT]\r
+       cmp      r5, #0\r
+       bgt      arggg\r
+    \r
+       ldr      sp,[r4,#SYS_INT_STACK]   \r
+      \r
+arggg:  \r
     bl      Irq_Entry\r
     mov     sp, r0                     // pop from returned stack\r
 \r
index f114b559e7bf94c216ed1eb75b6448f9fbece6f6..42014faa710d95761cb20833533cd807aa33a9fa 100644 (file)
@@ -17,6 +17,17 @@ _resetconfiguration:
        .type   _start,@function\r
 \r
        // Good information about the E500 is freescale doc: E500ABIUG.pdf\r
+       \r
+\r
+.global _redled\r
+_redled:\r
+       // mpc5567qrtech: light up led K2 \r
+       li r0, 0x0202\r
+       lis r3, 0xC3F9013A@h\r
+       ori r3, r3, 0xC3F90130@l\r
+       stw r0, 8(r3)\r
+       b _exit\r
+\r
 _start:\r
        // Set up the reserved registers in EABI: r1,r2 and r13\r
 \r
@@ -34,7 +45,21 @@ _start:
 \r
        // make space for initial backchain..\r
        subi    r1,r1,16\r
-\r
+    \r
+\r
+       # Clear all SRAM\r
+init_RAM:\r
+       lis r11,0x4000 # base address of the SRAM, 64-bit word aligned\r
+       ori r11,r11,0 # not needed for this address but could be for others\r
+       li r12,640 # loop counter to get all of SRAM;\r
+       # 80k/4 bytes/32 GPRs = 640\r
+       mtctr r12\r
+\r
+init_ram_loop:\r
+       stmw r0,0(r11) # write all 32 GPRs to SRAM\r
+       addi r11,r11,128 # inc the ram ptr; 32 GPRs * 4 bytes = 128\r
+       bdnz init_ram_loop # loop for 80k of SRAM\r
+               \r
        // Copy initialized data from ROM to RAM\r
        lis             r3,__DATA_ROM@h\r
        ori             r3,r3,__DATA_ROM@l\r
@@ -70,7 +95,6 @@ skip_data:
        cmplw   r3,r4\r
        bne+    2b\r
 3:\r
-\r
        # Call main() with argc set to 1 and argv ignored\r
        li      r3,1\r
        bl      main\r
index 136684d2ee04a153ed1d542037d73051a5cdf642..660e426e08b39fc107ed6da4be1a710926cf2dd6 100644 (file)
@@ -192,6 +192,14 @@ obj-$(USE_RAMLOG) += ramlog.o
 VPATH += $(ROOTDIR)/common\r
 \r
 \r
+#TCF\r
+obj-$(USE_TCF) += tcf.o\r
+obj-$(USE_TCF) += Tcf_Cfg.o\r
+obj-$(USE_TCF) += sys_monitor.o\r
+obj-$(USE_TCF) += streams.o\r
+inc-$(USE_TCF) += $(ROOTDIR)/common/tcf\r
+vpath-$(USE_TCF) += $(ROOTDIR)/common/tcf\r
+\r
 # Newlib overrides (overridden by default)\r
 ifneq ($(CFG_STANDARD_NEWLIB),y)\r
 obj-y += xtoa.o\r
index 4efb0be1b3f1aaa9371b80f0a980e94946861762..e46455f5174e5f3b92dc6ccdd94f018ab172f2f3 100644 (file)
@@ -11,9 +11,9 @@ CFG=ARM ARM_CM3 BRD_ET_STM32_STAMP STM32_CL
 # default or private\r
 MOD_AVAIL+=ADC MCU PWM     \r
 # System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
 # Additional\r
-MOD_AVAIL+=  RAMLOG \r
+MOD_AVAIL+=RAMLOG \r
 \r
 # Needed by us\r
 MOD_USE=KERNEL MCU\r
index df73c463d167b0fe3f3e8b1f633d0065ed0bfea5..8f42bad92d28e88f121dcbd89d513be882d8d6b2 100644 (file)
@@ -11,9 +11,9 @@ CFG=HC1X HCS12D MC912DG128A BRD_HCS12_ELMICRO_CARD12 SIMULATOR
 # default or private (These become MOD_XXX=y )
 MOD_AVAIL+=MCU GPT     
 # System + Communication + Diagnostic
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE
 # Additional
-MOD_AVAIL+=  RAMLOG 
+MOD_AVAIL+=RAMLOG 
 
 
 # Needed by us (These become USE_XXX=y and def-y += USE_XXX )
index 51d9edf38b6969cbaea63e857ad33f4be485d111..6e85de64b6b2cc95be201ca6970a6dbf9f59c0a0 100644 (file)
@@ -11,7 +11,7 @@ CFG= BRD_LINUX
 \r
 # What buildable modules does this board have, \r
 # default or private\r
-MOD_AVAIL+=COM PDUR  DET DCM DEM COMM CANSM CANTP CANIF CANNM NM\r
+MOD_AVAIL+=COM PDUR  DET DCM DEM COMM CANSM CANTP CANIF CANNM NM RTE\r
 \r
 # Needed by us\r
 MOD_USE=\r
index 6c62547402fcb085cb45879faeed1148ffc02ca2..9d8deb34d59ebcb8c18a9bb14a2c66cf776f99e5 100644 (file)
@@ -13,6 +13,6 @@ CFG=PPC BOOKE E200Z1 MPC55XX MPC5516 BRD_MPC5516IT
 # Memory + Peripherals\r
 MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG    \r
 # System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
 # Additional\r
 MOD_AVAIL+= RAMLOG \r
index e6744ff90d773666d391fa6d36d2067de30fa649..d8a452a03e7dd7d2d8e95679c2601ec6698baf6f 100644 (file)
@@ -13,6 +13,6 @@ CFG=PPC BOOKE E200Z1 MPC55XX MPC5516 BRD_MPC551XSIM SIMULATOR
 # Memory + Peripherals\r
 MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG    \r
 # System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
 # Additional\r
-MOD_AVAIL+=  RAMLOG \r
+MOD_AVAIL+=RAMLOG \r
index a9c706cca64abbb59cc66308ccd0721b97408986..9d5f663521125a88067683c08f9ee3dbbe1b9a15 100644 (file)
@@ -13,6 +13,6 @@ CFG=PPC BOOKE SPE E200Z6 MPC55XX MPC5554 BRD_MPC5554SIM SIMULATOR
 # Memory + Peripherals\r
 MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG    \r
 # System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
 # Additional\r
-MOD_AVAIL+=  RAMLOG \r
+MOD_AVAIL+=RAMLOG \r
index 976e7e66250bde4f8aa58bd9918cea6ba44d1dd8..d2504679a72a934fa14c6550cc2af6c8d66c2103 100644 (file)
@@ -13,8 +13,8 @@ CFG=PPC BOOKE E200Z6 MPC55XX MPC5567 BRD_MPC5567QRTECH SPE
 # Memory + Peripherals\r
 MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG    \r
 # System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
 # Additional\r
-MOD_AVAIL+=  RAMLOG \r
+MOD_AVAIL+=RAMLOG \r
 \r
 \r
index 01e1bbb51b3b922afbb2aa62461b2b1b0ee81bcf..e46d5e39803d0f09bec6f7498b7e0de1bb4d310d 100644 (file)
@@ -13,7 +13,7 @@ CFG=PPC BOOKE E200Z3 MPC55XX MPC5633 BRD_MPC5633SIM SPE
 # Memory + Peripherals
 MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG    
 # System + Communication + Diagnostic
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE
 # Additional
-MOD_AVAIL+=  RAMLOG 
+MOD_AVAIL+=RAMLOG 
 
index d6b26db50a344a4033eba7a411eff83402257b8a..ca501f9392b3aad4588da2f199e3f2932d939a0c 100644 (file)
@@ -27,7 +27,7 @@ CFG+=STM32_MD
 \r
 MOD_AVAIL+=ADC CAN DIO MCU FLS PORT PWM     \r
 # System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
 # Additional\r
 MOD_AVAIL+=  RAMLOG \r
 \r
index 0ab3027f56895a4d0231e0af34d59c60469b91a7..88bcede3771db22ac5db6975acc9a32ab787899c 100644 (file)
@@ -27,16 +27,14 @@ CFG+=STM32_CL
 \r
 MOD_AVAIL+=ADC CAN DIO MCU FLS PORT PWM     \r
 # System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
 # Additional\r
-MOD_AVAIL+=  RAMLOG \r
+MOD_AVAIL+=RAMLOG TCF LWIP\r
 \r
 #\r
 # Extra defines \r
 #\r
 \r
-# Use little heap\r
-def-y += HEAPSIZE=25000\r
 # Select the right device in ST header files.\r
 # [ STM32F10X_LD | STM32F10X_MD |  STM32F10X_HD |STM32F10X_CL ]\r
 def-y += STM32F10X_CL\r
index 18a82898fdcb7ced15935a87189632c78e2757cb..dc0684875ec8ca0df58ae1f3fc934c4c46413bea 100644 (file)
@@ -28,9 +28,6 @@
 /** Allow Pin mode changes during runtime (not avail on this CPU) */\r
 #define PORT_SET_PIN_MODE_API               STD_ON\r
 \r
-/** @req PORT124 */\r
-typedef uint8 Port_PinModeType;\r
-\r
 /** HW specific symbolic names of pins */\r
 /** @req PORT013 */\r
 typedef enum{\r
index 5a772160b5387d9a736ca4d40dbcbfe15724c210..8c13a80e240b33fda2772d924bb17846224374ea 100644 (file)
@@ -71,10 +71,11 @@ int CirqBuffDynDestroy(CirqBufferDynType *cPtr ) {
 
 int CirqBuffDynPush( CirqBufferDynType *cPtr, void *dataPtr ) {
        uint32_t flags;
+       Irq_Save(flags);
        if( (cPtr->currCnt == cPtr->maxCnt) || (cPtr==NULL) ) {
+               Irq_Restore(flags);
                return 1;       /* No more room */
        }
-       Irq_Save(flags);
        MEMCPY(cPtr->head,dataPtr,cPtr->dataSize);
        cPtr->head = (char *)cPtr->head + cPtr->dataSize;
        if( cPtr->head == cPtr->bufEnd) {
@@ -88,10 +89,11 @@ int CirqBuffDynPush( CirqBufferDynType *cPtr, void *dataPtr ) {
 
 int CirqBuffDynPop(CirqBufferDynType *cPtr, void *dataPtr ) {
        uint32_t flags;
+       Irq_Save(flags);
        if( (cPtr->currCnt == 0) || (cPtr==NULL) ) {
+               Irq_Restore(flags);
                return 1;
        }
-       Irq_Save(flags);
        MEMCPY(dataPtr,cPtr->tail,cPtr->dataSize);
        cPtr->tail = (char *)cPtr->tail + cPtr->dataSize;
        if( cPtr->tail == cPtr->bufEnd) {
index 3bd0aa1a2462a584b9a51268353007ca6c4aa4e6..28b4737c101c8946a6c7b60b0cb911d3fd709a64 100644 (file)
@@ -57,7 +57,7 @@ void Arc_MBoxDestroy( Arc_MBoxType *mPtr ) {
  */\r
 int Arc_MBoxPost( Arc_MBoxType *mPtr, void *msg ) {\r
        int rv;\r
-       rv = CirqBuffDynPush(mPtr->cirqPtr,msg);\r
+       rv = CirqBuffPush(mPtr->cirqPtr,msg);\r
        if( rv != 0) {\r
                return 1;\r
        }\r
@@ -71,7 +71,7 @@ int Arc_MBoxPost( Arc_MBoxType *mPtr, void *msg ) {
 int Arc_MBoxFetch(Arc_MBoxType *mPtr, void *msg)\r
 {\r
        int rv;\r
-       rv = CirqBuffDynPop(mPtr->cirqPtr,msg);\r
+       rv = CirqBuffPop(mPtr->cirqPtr,msg);\r
        if(rv != 0) {\r
                return 1;\r
        }\r
index 3d13f79836871b0ac5c12a0e139bdd0fc22cad90..60a756795ae7e9055fd1de2ef3d49a09175ee8db 100644 (file)
 #include "core_cm3.h"\r
 #endif\r
 \r
+#ifdef USE_TTY_TCF_STREAMS\r
+#include "streams.h"\r
+#endif\r
+\r
 \r
 #if defined(CFG_ARM)\r
 #define open   _open\r
@@ -236,10 +240,19 @@ int write(  int fd, const void *_buf, size_t nbytes)
                }\r
 #endif\r
 \r
-#if defined(USE_RAMLOG)\r
+#ifdef USE_TTY_TCF_STREAMS\r
                char *buf = (char *)_buf;\r
                for (int i = 0; i < nbytes; i++) {\r
-                       ramlog_chr (*(buf + i));\r
+                       TCF_TTY_SendChar(*(buf + i));\r
+               }\r
+#endif\r
+\r
+#if defined(USE_RAMLOG)\r
+               {\r
+                       char *buf = (char *)_buf;\r
+                       for (int i = 0; i < nbytes; i++) {\r
+                               ramlog_chr (*(buf + i));\r
+                       }\r
                }\r
 #endif\r
 \r
index 30c4fdf05af2f0a58661247cca9c617bf5a08c27..028ff81c9af0650853c8f65a50a7d46fda9a9b4a 100644 (file)
  *    snprintf(buf,) ->                      vsnprintf(buf,)\r
  *\r
  * IMPLEMENTATION NOTE:\r
- *  If printing more than the limit, e.g. using vsnprintf() then\r
- *  the emit function will only stop printing, but not interrupted\r
- *  (The code will get more complicated that way)\r
+ *  - If printing more than the limit, e.g. using vsnprintf() then\r
+ *    the emit function will only stop printing, but not interrupted\r
+ *    (The code will get more complicated that way)\r
+ *  - ANSI-C and POSIX, streams and POSIX filenumbers.\r
+ *    POSIX file-numbers exist in unistd.h and are only to be used by the porting\r
+ *    newlib interface i.e. newlib_port.c.\r
+ *    The filenumber is actually just a cast of the steampointer and save in the member\r
+ *    _cookie in FILE.\r
+ *\r
  */\r
 \r
 #include <unistd.h>\r
 \r
 //#define HOST_TEST    1\r
 \r
-#ifdef HOST_TEST\r
-#define _STDOUT        stdout\r
-#define _STDIN         stdin\r
-#define _STDERR        stderr\r
-#else\r
-#define _STDOUT        (FILE *)STDOUT_FILENO\r
-#define _STDINT        STDIN_FILENO\r
-#define _STDERR        (FILE *)STDERR_FILENO\r
-#endif\r
-\r
-\r
 int arc_putchar(int fd, int c);\r
 int print(FILE *file, char **buffer, size_t n, const char *format, va_list ap);\r
 \r
@@ -61,7 +56,7 @@ int printf(const char *format, ...) {
        int rv;\r
 \r
        va_start(ap, format);\r
-       rv = vfprintf(_STDOUT, format, ap);\r
+       rv = vfprintf(stdout, format, ap);\r
        va_end(ap);\r
        return rv;\r
 }\r
@@ -98,7 +93,7 @@ int snprintf(char *buffer, size_t n, const char *format, ...) {
 }\r
 \r
 int vprintf(const char *format, va_list ap) {\r
-       return vfprintf(_STDOUT, format, ap);\r
+       return vfprintf(stdout, format, ap);\r
 }\r
 \r
 int vsprintf(char *buffer, const char *format, va_list ap) {\r
@@ -107,7 +102,7 @@ int vsprintf(char *buffer, const char *format, va_list ap) {
 \r
 int vfprintf(FILE *file, const char *format, va_list ap) {\r
        int rv;\r
-       /* Just print to _STDOUT */\r
+       /* Just print to stdout */\r
        rv = print(file,NULL,~(size_t)0, format,ap);\r
        return rv;\r
 }\r
@@ -146,10 +141,10 @@ static inline int emitChar( FILE *file, char **buf, char c, int *left ) {
        --(*left);\r
        if( buf == NULL ) {\r
 #if HOST_TEST\r
-               putc(c, _STDOUT);\r
-               fflush(_STDOUT);\r
+               putc(c, stdout);\r
+               fflush(stdout);\r
 #else\r
-               arc_putchar((int)file, c);\r
+               arc_putchar(file->_cookie, c);\r
 #endif\r
        } else {\r
                **buf = c;\r
@@ -212,7 +207,7 @@ extern void xtoa( unsigned long val, char* str, int base, int negative);
 #define FL_ALIGN_LEFT                  (1<<4)\r
 #define FL_TYPE_SIGNED_INT             (1<<5)\r
 #define FL_TYPE_UNSIGNED_INT   (1<<6)\r
-\r
+#define FL_TYPE_POINTER                        (1<<7)\r
 \r
 static void emitString( FILE *file, char **buffer, char *string, int width, int flags, int *left) {\r
        char pad;\r
@@ -354,6 +349,10 @@ int print(FILE *file, char **buffer, size_t n, const char *format, va_list ap)
                                flags |= FL_TYPE_UNSIGNED_INT;\r
                                emitInt(file,buffer,va_arg( ap, int ),16,width,flags,&left);\r
                                break;\r
+                       case 'p':\r
+                               flags |= FL_TYPE_POINTER;\r
+                               emitInt(file,buffer,va_arg( ap, int ),16,width,flags,&left);\r
+                               break;\r
                        case 's':\r
                                str = (char *)va_arg( ap, int );\r
 \r
@@ -410,7 +409,7 @@ int main(void) {
 \r
        printf("decimal:  00c000   = %06x \n", 0xc000);\r
 \r
-       fprintf(_STDOUT, "string: %s = foobar \n", "foobar");\r
+       fprintf(stdout, "string: %s = foobar \n", "foobar");\r
        sprintf(buff, "string: %s = foobar \n", "foobar");\r
        printf("%s",buff);\r
 \r
index e315625fcc4dddd4b6d8fbb66833363c90479a12..00db5e5274630541a5b2d71378ca3b90455946a7 100644 (file)
@@ -14,6 +14,8 @@
  * -------------------------------- Arctic Core ------------------------------*/\r
 \r
 #include "sleep.h"\r
+#include "Mcu.h"\r
+#include "Os.h"\r
 \r
 struct timeoutlist_t{\r
        uint32_t timeout;\r
@@ -36,9 +38,19 @@ void SleepInit()
 \r
 void Sleep(uint32_t nofTicks, TaskType TaskID, EventMaskType Mask )\r
 {\r
-       timeoutlist[TaskID].timeout = ticks + nofTicks;\r
-       timeoutlist[TaskID].active = TRUE;\r
-       timeoutlist[TaskID].mask = Mask;\r
+       uint32 pval = McuE_EnterCriticalSection();\r
+       if(nofTicks == 0){\r
+               nofTicks=1;\r
+       }\r
+    if(TaskID < OS_TASK_CNT){\r
+        timeoutlist[TaskID].timeout = ticks + nofTicks;\r
+        timeoutlist[TaskID].active = TRUE;\r
+        timeoutlist[TaskID].mask = Mask;\r
+    }else{\r
+        /* Error */\r
+       ErrorHook(E_OS_LIMIT);\r
+    }\r
+       McuE_ExitCriticalSection(pval);\r
 }\r
 \r
 \r
@@ -47,8 +59,8 @@ void SleepTask(void)
        uint32_t i;\r
        for(;;) {\r
                // Alarms every tick\r
-               WaitEvent(EVENT_MASK_EVENT_SLEEP_ALARM_TASK);\r
-               ClearEvent(EVENT_MASK_EVENT_SLEEP_ALARM_TASK);\r
+               WaitEvent(EVENT_MASK_SLEEP_ALARM_TASK);\r
+               ClearEvent(EVENT_MASK_SLEEP_ALARM_TASK);\r
 \r
                ticks++;\r
 \r
diff --git a/common/tcf/Tcf_Cfg.c b/common/tcf/Tcf_Cfg.c
new file mode 100644 (file)
index 0000000..09f676b
--- /dev/null
@@ -0,0 +1,21 @@
+/*\r
+ * tcf_cfg.c\r
+ *\r
+ *  Created on: 15 sep 2010\r
+ *      Author: jcar\r
+ */\r
+#include "Tcf_Cfg.h"\r
+\r
+//Service includes\r
+#include "sys_monitor.h"\r
+#include "streams.h"\r
+\r
+const char locator_hello[] = "E\0Locator\0Hello\0[\"Locator\",\"SysMonitor\",\"AsciiStreams\",\"FileSystem\"]\0\x03\x01";\r
+\r
+const TCF_Service_Info tcfServiceCfgList[] = {\r
+               {"Locator", handle_LocatorCommand, handle_LocatorEvent},\r
+               {"FileSystem", handle_FileSystemCommand, handle_FileSystemEvent},\r
+               {"SysMonitor", handle_SysMonCommand, handle_SysMonEvent},\r
+               {"AsciiStreams", handle_StreamsCommand, handle_StreamsEvent},\r
+               {"NULL", NULL},\r
+};\r
diff --git a/common/tcf/Tcf_Cfg.h b/common/tcf/Tcf_Cfg.h
new file mode 100644 (file)
index 0000000..c92a712
--- /dev/null
@@ -0,0 +1,23 @@
+/*\r
+ * Tcf_Cfg.h\r
+ *\r
+ *  Created on: 15 sep 2010\r
+ *      Author: jcar\r
+ */\r
+\r
+#ifndef TCF_CFG_H_\r
+#define TCF_CFG_H_\r
+\r
+#include "tcf.h"\r
+\r
+typedef struct {\r
+       char name[16];\r
+       TCF_Service_CommandHandler commandHandler;\r
+       TCF_Service_EventHandler eventHandler;\r
+} TCF_Service_Info;\r
+\r
+extern const TCF_Service_Info tcfServiceCfgList[];\r
+\r
+extern const char locator_hello[];\r
+\r
+#endif /* TCF_CFG_H_ */\r
diff --git a/common/tcf/streams.c b/common/tcf/streams.c
new file mode 100644 (file)
index 0000000..9723d15
--- /dev/null
@@ -0,0 +1,208 @@
+/*\r
+ * streams.c\r
+ *\r
+ *  Created on: 15 sep 2010\r
+ *      Author: jcar\r
+ */\r
+\r
+#include "Std_Types.h"\r
+#include "streams.h"\r
+#include "tcf.h"\r
+#include <string.h>\r
+#include "internal.h"\r
+#include "xtoa.h"\r
+#include "cirq_buffer.h"\r
+\r
+const char Streams_PID[] = "\"PID\":";\r
+const char Streams_Read[] = "read";\r
+const char Streams_Write[] = "write";\r
+const char Streams_Subscribe[] = "subcribe";\r
+const char Streams_Unsubscribe[] = "unsubscribe";\r
+const char Streams_Connect[] = "connect";\r
+const char Streams_Disconnect[] = "disconnect";\r
+const char Streams_EndofStream[] = "eos";\r
+\r
+const char Streams_LostSize[] = "\"lost size\":";\r
+const char Streams_EOS[] = "\"EOS\":";\r
+const char Streams_true[] = "true";\r
+const char Streams_false[] = "false";\r
+\r
+typedef struct {\r
+       char* id;\r
+       char* size;\r
+       char* data;\r
+} TCF_Streams_Command;\r
+\r
+#define TCF_TTY_SIZE 800\r
+\r
+static boolean tty_initialized = FALSE;\r
+static CirqBufferType cirqBuf;\r
+char tty_buffer[TCF_TTY_SIZE] = "";\r
+\r
+void init_streams()\r
+{\r
+       cirqBuf = CirqBuffStatCreate(tty_buffer, TCF_TTY_SIZE, sizeof(char));\r
+       tty_initialized = TRUE;\r
+}\r
+\r
+uint8_t TCF_TTY_SendChar (uint8_t ch)\r
+{\r
+       int rv = 1;\r
+       if(tty_initialized == TRUE){\r
+               rv = CirqBuffPush(&cirqBuf,&ch);\r
+       }\r
+\r
+       return rv;\r
+}\r
+uint32_t TCF_TTY_ReadString(char *str, uint16_t max_len)\r
+{\r
+       char ch;\r
+       int rv;\r
+       int len = 0;\r
+       if(tty_initialized == TRUE){\r
+               do{\r
+                       rv = CirqBuffPop(&cirqBuf,&ch);\r
+                       if(rv==0){\r
+                               len++;\r
+                               *str++=ch;\r
+                               if(ch == '\0'){\r
+                                       rv = 1;\r
+                               }\r
+                       }\r
+               }while((rv == 0) && (len < max_len));\r
+       }\r
+\r
+       return len;\r
+}\r
+\r
+\r
+uint16_t handle_StreamsEvent(TCF_Event* event, char* buf){\r
+       return 0;\r
+}\r
+\r
+static Std_ReturnType parse_read(char* msg, TCF_Streams_Command* command, uint16_t len){\r
+       char* curr = msg;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->id = curr;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->size = curr;\r
+\r
+       return E_OK;\r
+}\r
+\r
+static Std_ReturnType parse_write(char* msg, TCF_Streams_Command* command, uint16_t len){\r
+       char* curr = msg;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->id = curr;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->size = curr;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->data = curr;\r
+\r
+       return E_OK;\r
+}\r
+\r
+static Std_ReturnType parse_id(char* msg, TCF_Streams_Command* command, uint16_t len){\r
+       char* curr = msg;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->id = curr;\r
+\r
+       return E_OK;\r
+}\r
+\r
+uint16_t handle_StreamsCommand(TCF_Command* command, char* buf) {\r
+       char tmp[200] = "";\r
+       TCF_Streams_Command streams_cmd;\r
+\r
+       /* Start building return message */\r
+       start_tcf_field(buf, (char *)TCF_S_R); /* Start */\r
+       append_tcf_field(buf, command->token);  /* Token */\r
+\r
+       if (strcmp(command->commandName, Streams_Read) == 0) {\r
+               /* C \95 <token> \95 Streams \95 read \95 <string: stream ID> \95 <int: size> \95 */\r
+               /* R \95 <token> \95 <string: data> \95 <error report> \95 <int: lost size> \95 <boolean: EOS> */\r
+               if(parse_read(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+                       return 0;\r
+               }\r
+\r
+               /* Add data field */\r
+               strcat(buf, JSON_Stringify);\r
+               int len = TCF_TTY_ReadString(tmp, 199);\r
+               tmp[len] = '\0'; /* Terminate to be sure */\r
+               strcat(buf, tmp);\r
+               strcat(buf, JSON_Stringify);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+               /* Add error field */\r
+               strcat(buf, JSON_null);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+               //strcat(buf, Streams_LostSize);\r
+               ultoa(0,tmp,10);\r
+               strcat(buf,tmp);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+               //strcat(buf, Streams_EOS);\r
+               strcat(buf, Streams_false);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+       } else if (strcmp(command->commandName, Streams_Write) == 0) {\r
+               /* C \95 <token> \95 Streams \95 write \95 <string: stream ID> \95 <int: size> \95 <string: data> \95 */\r
+               /* R \95 <token> \95 <error report> */\r
+               if(parse_write(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+                       return 0;\r
+               }\r
+\r
+               /* Add error field */\r
+               strcat(buf, JSON_null);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+       } else if (strcmp(command->commandName, Streams_Subscribe) == 0) {\r
+               /* R \95 <token> \95 <error report> */\r
+               if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+                       return 0;\r
+               }\r
+               /* Add error field */\r
+               strcat(buf, JSON_null);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+       }else if (strcmp(command->commandName, Streams_Unsubscribe) == 0) {\r
+               /* R \95 <token> \95 <error report> */\r
+               if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+                       return 0;\r
+               }\r
+               /* Add error field */\r
+               strcat(buf, JSON_null);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+       }else if (strcmp(command->commandName, Streams_Connect) == 0) {\r
+               /* R \95 <token> \95 <error report> */\r
+               if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+                       return 0;\r
+               }\r
+               /* Add error field */\r
+               strcat(buf, JSON_null);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+       }else if (strcmp(command->commandName, Streams_Disconnect) == 0) {\r
+               /* R \95 <token> \95 <error report> */\r
+               if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){\r
+                       return 0;\r
+               }\r
+               /* Add error field */\r
+               strcat(buf, JSON_null);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+       }\r
+\r
+       convert_to_tcf_message(buf);\r
+       uint16_t len = message_length(buf, TCF_MAX_FIELD_LENGTH);\r
+\r
+       return len;\r
+}\r
diff --git a/common/tcf/streams.h b/common/tcf/streams.h
new file mode 100644 (file)
index 0000000..6be0fa1
--- /dev/null
@@ -0,0 +1,20 @@
+/*\r
+ * streams.h\r
+ *\r
+ *  Created on: 15 sep 2010\r
+ *      Author: jcar\r
+ */\r
+\r
+#ifndef STREAMS_H_\r
+#define STREAMS_H_\r
+\r
+#include "Std_Types.h"\r
+#include "tcf.h"\r
+\r
+uint8_t TCF_TTY_SendChar (uint8_t ch);\r
+void init_streams();\r
+\r
+uint16_t handle_StreamsCommand(TCF_Command* command, char* buf);\r
+uint16_t handle_StreamsEvent(TCF_Event* event, char* buf);\r
+\r
+#endif /* STREAMS_H_ */\r
diff --git a/common/tcf/sys_monitor.c b/common/tcf/sys_monitor.c
new file mode 100644 (file)
index 0000000..6bc5017
--- /dev/null
@@ -0,0 +1,148 @@
+/*\r
+ * sys_monitor.c\r
+ *\r
+ *  Created on: 15 sep 2010\r
+ *      Author: jcar\r
+ */\r
+\r
+#include "Std_Types.h"\r
+#include "sys_monitor.h"\r
+#include "tcf.h"\r
+#include <string.h>\r
+#include "internal.h"\r
+#include "xtoa.h"\r
+\r
+const char SysMon_PID[] = "\"PID\":";\r
+const char SysMon_Prio[] = "\"Priority\":";\r
+const char SysMon_Stackstart[] = "\"StackStart\":";\r
+const char SysMon_Stackend[] = "\"StackEnd\":";\r
+const char SysMon_Stackcurr[] = "\"StackCurr\":";\r
+const char SysMon_State[] = "\"State\":";\r
+\r
+static void AddState(char *buf, state_t state)\r
+{\r
+       /* "RSDZTW" where\r
+       R is running,\r
+       S is sleeping in an interruptible wait,\r
+       D is waiting in uninterruptible disk sleep,\r
+       Z is zombie,\r
+       T is traced or stopped (on a signal), and\r
+       W is paging */\r
+       switch(state)\r
+       {\r
+       case ST_READY:\r
+               strcat(buf,"\"D\"");\r
+               break;\r
+       case ST_WAITING:\r
+               strcat(buf,"\"S\"");\r
+               break;\r
+       case ST_SUSPENDED:\r
+               strcat(buf,"\"T\"");\r
+               break;\r
+       case ST_RUNNING:\r
+               strcat(buf,"\"R\"");\r
+               break;\r
+       case ST_NOT_STARTED:\r
+               strcat(buf,"\"T\"");\r
+               break;\r
+       }\r
+}\r
+\r
+uint16_t handle_SysMonEvent(TCF_Event* event, char* buf){\r
+       return 0;\r
+}\r
+\r
+\r
+uint16_t handle_SysMonCommand(TCF_Command* command, char* buf) {\r
+       OsPcbType *iterPcbPtr;\r
+\r
+       /* Start building return message */\r
+       start_tcf_field(buf, (char *)TCF_S_R); /* Start */\r
+       append_tcf_field(buf, command->token);  /* Token */\r
+\r
+       if (strcmp(command->commandName, TCF_getChildren) == 0) {\r
+               boolean first = TRUE;\r
+\r
+               /* Add error field */\r
+               strcat(buf, JSON_null);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+               /* Add data field */\r
+               strcat(buf, JSON_ListStart);\r
+               TAILQ_FOREACH(iterPcbPtr,& os_sys.pcb_head,pcb_list) {\r
+                       if(iterPcbPtr->proc_type < 4)\r
+                       {\r
+                               if(first){\r
+                                       first = FALSE;\r
+                               }else{\r
+                                       strcat(buf, JSON_Separator);\r
+                               }\r
+                               strcat(buf, JSON_Stringify);\r
+                               strcat(buf, iterPcbPtr->name);\r
+                               strcat(buf, JSON_Stringify);\r
+                       }\r
+               }\r
+               strcat(buf, JSON_ListEnd);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+       } else if (strcmp(command->commandName, TCF_getContext) == 0) {\r
+               char tmp[20] = "";\r
+\r
+               /* Add error field */\r
+               strcat(buf, JSON_null);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+               /* Add data field */\r
+               char *arg = command->arguments + 1; /* add 1 for " */\r
+               TAILQ_FOREACH(iterPcbPtr,& os_sys.pcb_head,pcb_list) {\r
+                       if(strncmp(arg, iterPcbPtr->name, strlen(command->arguments)-2) == 0)\r
+                       {\r
+                               break;\r
+                       }\r
+               }\r
+               strcat(buf, JSON_ObjStart);\r
+           strcat(buf, TCF_ID);\r
+               strcat(buf, command->arguments);\r
+\r
+               strcat(buf, JSON_Separator);\r
+               strcat(buf, TCF_File);\r
+               strcat(buf, command->arguments);\r
+\r
+               strcat(buf, JSON_Separator);\r
+               strcat(buf, SysMon_PID);\r
+               ultoa(iterPcbPtr->pid,tmp,10);\r
+               strcat(buf, tmp);\r
+\r
+               strcat(buf, JSON_Separator);\r
+               strcat(buf, SysMon_Prio);\r
+               ultoa(iterPcbPtr->prio,tmp,10);\r
+               strcat(buf, tmp);\r
+\r
+               strcat(buf, JSON_Separator);\r
+               strcat(buf, SysMon_Stackstart);\r
+               ultoa((uint32_t)iterPcbPtr->stack.top,tmp,10);\r
+               strcat(buf, tmp);\r
+\r
+/*             strcat(buf, JSON_Separator);\r
+               strcat(buf, SysMon_Stackend);\r
+               ultoa((uint32_t)iterPcbPtr->stack.top + iterPcbPtr->stack.size,tmp,10);\r
+               strcat(buf, tmp);\r
+\r
+               strcat(buf, JSON_Separator);\r
+               strcat(buf, SysMon_Stackcurr);\r
+               ultoa((uint32_t)iterPcbPtr->stack.curr,tmp,10);\r
+               strcat(buf, tmp);\r
+*/\r
+               strcat(buf, JSON_Separator);\r
+               strcat(buf, SysMon_State);\r
+               AddState(buf,iterPcbPtr->state);\r
+\r
+               strcat(buf, JSON_ObjEnd);\r
+               strcat(buf, TCF_S_EOFIELD_MARKER);\r
+       }\r
+\r
+       convert_to_tcf_message(buf);\r
+       uint16_t len = message_length(buf, TCF_MAX_FIELD_LENGTH);\r
+\r
+       return len;\r
+}\r
diff --git a/common/tcf/sys_monitor.h b/common/tcf/sys_monitor.h
new file mode 100644 (file)
index 0000000..e5388de
--- /dev/null
@@ -0,0 +1,17 @@
+/*\r
+ * sys_monitor.h\r
+ *\r
+ *  Created on: 15 sep 2010\r
+ *      Author: jcar\r
+ */\r
+\r
+#ifndef SYSMONITOR_H_\r
+#define SYSMONITOR_H_\r
+\r
+#include "Std_Types.h"\r
+#include "tcf.h"\r
+\r
+uint16_t handle_SysMonCommand(TCF_Command* command, char* buf);\r
+uint16_t handle_SysMonEvent(TCF_Event* event, char* buf);\r
+\r
+#endif /* SYSMONITOR_H_ */\r
diff --git a/common/tcf/tcf.c b/common/tcf/tcf.c
new file mode 100644 (file)
index 0000000..b01a21e
--- /dev/null
@@ -0,0 +1,274 @@
+/*\r
+ * tcf.c\r
+ *\r
+ *  Created on: 15 sep 2010\r
+ *      Author: jcar\r
+ */\r
+\r
+#define USE_LDEBUG_PRINTF\r
+#include "debug.h"\r
+\r
+#include "Std_Types.h"\r
+#include <string.h>\r
+#ifdef USE_LWIP\r
+#include "lwip/tcp.h"\r
+#include "lwip/udp.h"\r
+#include "tcp_handler.h"\r
+#endif\r
+#include "tcf.h"\r
+#include "Tcf_Cfg.h"\r
+#include "xtoa.h"\r
+#include "streams.h"\r
+\r
+\r
+#define TCF_TCP_PORT   1534\r
+\r
+const char TCF_getChildren[] = "getChildren";\r
+const char TCF_getContext[] = "getContext";\r
+const char TCF_ID[] = "\"ID\":";\r
+const char TCF_File[] = "\"File\":";\r
+const char TCF_Service[] = "\"Service\":";\r
+const char TCF_Code[] = "\"Code\":";\r
+\r
+\r
+const char JSON_ObjStart[] = "{";\r
+const char JSON_ObjEnd[] = "}";\r
+const char JSON_null[] = "null";\r
+const char JSON_Separator[] = ",";\r
+\r
+const char JSON_Stringify[] = "\"";\r
+const char JSON_ListStart[] = "[";\r
+const char JSON_ListEnd[] = "]";\r
+\r
+struct tcf_tcp_state\r
+{\r
+    int num;\r
+};\r
+\r
+uint16_t message_length(const char* msg, uint16_t max_length) {\r
+       uint16_t i;\r
+       for (i = 0; i < max_length; ++i) {\r
+               if (msg[i] == '\x01') {\r
+                       return i+1;\r
+               }\r
+       }\r
+       return max_length;\r
+}\r
+\r
+void start_tcf_field(char* start, char* field) {\r
+       strcpy(start, field);\r
+       strcat(start, TCF_S_EOFIELD_MARKER);\r
+}\r
+\r
+void append_tcf_field(char* start, char* field) {\r
+       strcat(start, field);\r
+       strcat(start, TCF_S_EOFIELD_MARKER);\r
+}\r
+\r
+void convert_to_tcf_message(char* start) {\r
+       strcat(start, TCF_S_EOM);\r
+       size_t length = strlen(start);\r
+       int i;\r
+       for (i = 0; i < length; ++i) {\r
+               if (start[i] == TCF_C_EOFIELD_MARKER) {\r
+                       start[i] = TCF_C_EOFIELD;\r
+               }\r
+       }\r
+}\r
+\r
+char* get_next_tcf_field(char* chars, uint16_t maxlen) {\r
+       int i;\r
+       for(i = 0; i < maxlen; i++) {\r
+               if (chars[i] == TCF_FIELD_DELIMITER) {\r
+                       return &chars[i+1];\r
+               }\r
+       }\r
+       return (char*) NULL;\r
+}\r
+\r
+char* get_next_tcf_msg(char* chars, uint16_t *len) {\r
+       int i;\r
+       for(i = 0; i < *len-1; i++) {\r
+               if (chars[i] == '\x03' && chars[i+1] == '\x01') {\r
+                       *len -= (i + 1);\r
+                       return &chars[i+2];\r
+               }\r
+       }\r
+       *len= 0;\r
+       return (char*) NULL;\r
+}\r
+\r
+static Std_ReturnType parse_command(char* msg, TCF_Command* command, uint16_t len){\r
+       char* curr = msg;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->token = curr;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->serviceName = curr;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->commandName = curr;\r
+\r
+       curr = get_next_tcf_field(curr, len);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       command->arguments = curr;\r
+\r
+       command->args_len = len -((uint32_t)curr - (uint32_t)msg);\r
+       return E_OK;\r
+}\r
+\r
+Std_ReturnType parse_event(char* msg, TCF_Event* event){\r
+       char* curr = msg;\r
+\r
+       curr = get_next_tcf_field(curr, TCF_MAX_FIELD_LENGTH);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       event->serviceName = curr;\r
+\r
+       curr = get_next_tcf_field(curr, TCF_MAX_FIELD_LENGTH);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       event->eventName = curr;\r
+\r
+       curr = get_next_tcf_field(curr, TCF_MAX_FIELD_LENGTH);\r
+       if (curr == NULL) return E_NOT_OK;\r
+       event->eventData = curr;\r
+\r
+       return E_OK;\r
+}\r
+\r
+uint16_t handle_LocatorCommand(TCF_Command* command, char* buf) {\r
+       return 0;\r
+}\r
+\r
+uint16_t handle_LocatorEvent(TCF_Event* event, char* buf) {\r
+       uint16_t len = 0;\r
+       if(strcmp(event->eventName, "Hello") == 0)\r
+       {\r
+               len = message_length(locator_hello, TCF_MAX_FIELD_LENGTH);\r
+               memcpy(buf,locator_hello,len);\r
+       }else if(strcmp(event->eventName, "peerHeartBeat") == 0){\r
+\r
+       }\r
+\r
+       return len;\r
+}\r
+\r
+uint16_t handle_FileSystemCommand(TCF_Command* command, char* buf) {\r
+       char tmp[20] = "";\r
+\r
+       /* Start building return message */\r
+       start_tcf_field(buf, (char *)TCF_S_R); /* Start */\r
+       append_tcf_field(buf, command->token);  /* Token */\r
+\r
+       /* Add error field */\r
+       strcat(buf, JSON_ObjStart);\r
+\r
+       strcat(buf, TCF_Code);\r
+       ultoa(TCF_UNSUPPORTED,tmp,10);\r
+       strcat(buf, tmp);\r
+\r
+       strcat(buf, JSON_ObjEnd);\r
+       strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+       /* Add data field */\r
+       strcat(buf, JSON_null);\r
+       strcat(buf, TCF_S_EOFIELD_MARKER);\r
+\r
+       convert_to_tcf_message(buf);\r
+       uint16_t len = message_length(buf, TCF_MAX_FIELD_LENGTH);\r
+\r
+       return len;\r
+}\r
+\r
+uint16_t handle_FileSystemEvent(TCF_Event* event, char* buf) {\r
+       return 0;\r
+}\r
+\r
+/* Not reentrant so buffers can be static */\r
+static char outbuf[TCF_MAX_FIELD_LENGTH] = "";\r
+\r
+static void handle_event(char *buf, uint16_t len)\r
+{\r
+       char *msg = (char *)buf;\r
+       uint8 index;\r
+       uint16_t outlen = 0;\r
+       TCF_Event event;\r
+\r
+       if (parse_event(msg, &event) == E_OK) {\r
+               /* Find and call the requested agent */\r
+               index = 0;\r
+        while(tcfServiceCfgList[index].eventHandler != NULL){\r
+                       if(strcmp(event.serviceName, tcfServiceCfgList[index].name) == 0){\r
+                               outlen = tcfServiceCfgList[index].eventHandler(&event, outbuf);\r
+                               break;\r
+                       }\r
+                       index++;\r
+               }\r
+       }\r
+\r
+       if(outlen > 0){\r
+#ifdef USE_LWIP\r
+               TcpSendData(outbuf, outlen);\r
+#endif\r
+       }\r
+}\r
+\r
+static void handle_command(char *buf, uint16_t len)\r
+{\r
+       char *msg = (char *)buf;\r
+       uint8 index;\r
+       uint16_t outlen = 0;\r
+       TCF_Command command;\r
+\r
+       if (parse_command(msg, &command, len) == E_OK) {\r
+               //LDEBUG_PRINTF("C %s\n\r", command.token);\r
+               /* Find and call the requested agent */\r
+               index = 0;\r
+               while(tcfServiceCfgList[index].commandHandler != NULL){\r
+                       if(strcmp(command.serviceName, tcfServiceCfgList[index].name) == 0){\r
+                               outlen = tcfServiceCfgList[index].commandHandler(&command, outbuf);\r
+                               break;\r
+                       }\r
+                       index++;\r
+               }\r
+\r
+               if(outlen > 0){\r
+#ifdef USE_LWIP\r
+                       //LDEBUG_PRINTF("R %s\n\r", command.token);\r
+                       TcpSendData(outbuf, outlen);\r
+#endif\r
+               }else{\r
+                       LDEBUG_PRINTF("TCF: len=0:%s\n\r", command.token);\r
+               }\r
+       }else{\r
+               LDEBUG_PRINTF("TCF: Parse failed:%s\n\r", command.token);\r
+       }\r
+}\r
+\r
+static void handle_incoming(const void* buf, uint16_t len) {\r
+       char *msg = (char *)buf;\r
+\r
+       if(len > 0){\r
+               do{\r
+                       char c = msg[0];\r
+                       if (c == 'C') {\r
+                               handle_command(msg, len);\r
+                       } else if (c == 'E') {\r
+                               handle_event(msg, len);\r
+                       }\r
+\r
+                       /* Check if more than one message in buffer */\r
+                       msg = get_next_tcf_msg(msg, &len);\r
+               }while((msg != NULL) && (len > 0));\r
+       }\r
+}\r
+\r
+void InitTcf(void){\r
+#ifdef USE_LWIP\r
+    CreateTcpSocket(TCF_TCP_PORT, handle_incoming);\r
+#endif\r
+    init_streams();\r
+}\r
diff --git a/common/tcf/tcf.h b/common/tcf/tcf.h
new file mode 100644 (file)
index 0000000..f77cbf8
--- /dev/null
@@ -0,0 +1,108 @@
+/*\r
+ * tcf.h\r
+ *\r
+ *  Created on: 15 sep 2010\r
+ *      Author: jcar\r
+ */\r
+\r
+#ifndef TCF_H_\r
+#define TCF_H_\r
+\r
+#include "Std_Types.h"\r
+\r
+#define TCF_C_EOFIELD           '\x00'\r
+#define TCF_C_EOFIELD_MARKER    '\x04'\r
+\r
+#define TCF_S_EOFIELD  "\x00"\r
+#define TCF_S_EOFIELD_MARKER "\x04"\r
+#define TCF_S_R "R"\r
+#define TCF_S_EOM  "\x03\x01"\r
+\r
+#define TCF_FIELD_DELIMITER            ('\x00')\r
+#define TCF_MAX_FIELD_LENGTH   (1400)\r
+\r
+extern const char TCF_getChildren[];\r
+extern const char TCF_getContext[];\r
+extern const char TCF_ID[];\r
+extern const char TCF_File[];\r
+extern const char TCF_Service[];\r
+extern const char TCF_Code[];\r
+\r
+extern const char JSON_ObjStart[];\r
+extern const char JSON_ObjEnd[];\r
+extern const char JSON_null[];\r
+extern const char JSON_Separator[];\r
+\r
+extern const char JSON_Stringify[];\r
+extern const char JSON_ListStart[];\r
+extern const char JSON_ListEnd[];\r
+\r
+/* Standard error codes: */\r
+\r
+typedef enum{\r
+    TCF_OTHER               = 1,\r
+    TCF_JSON_SYNTAX         = 2,\r
+    TCF_PROTOCOL            = 3,\r
+    TCF_BUFFER_OVERFLOW     = 4,\r
+    TCF_CHANNEL_CLOSED      = 5,\r
+    TCF_COMMAND_CANCELLED   = 6,\r
+    TCF_UNKNOWN_PEER        = 7,\r
+    TCF_BASE64              = 8,\r
+    TCF_EOF                 = 9,\r
+    TCF_ALREADY_STOPPED     = 10,\r
+    TCF_ALREADY_EXITED      = 11,\r
+    TCF_ALREADY_RUNNING     = 12,\r
+    TCF_ALREADY_ATTACHED    = 13,\r
+    TCF_IS_RUNNING          = 14,\r
+    TCF_INV_DATA_SIZE       = 15,\r
+    TCF_INV_CONTEXT         = 16,\r
+    TCF_INV_ADDRESS         = 17,\r
+    TCF_INV_EXPRESSION      = 18,\r
+    TCF_INV_FORMAT          = 19,\r
+    TCF_INV_NUMBER          = 20,\r
+    TCF_INV_DWARF           = 21,\r
+    TCF_SYM_NOT_FOUND       = 22,\r
+    TCF_UNSUPPORTED         = 23,\r
+    TCF_INV_DATA_TYPE       = 24,\r
+    TCF_INV_COMMAND         = 25,\r
+} TCF_ErrorCode_t;\r
+\r
+\r
+typedef struct {\r
+       char* serviceName;\r
+       char* eventName;\r
+       char* eventData;\r
+} TCF_Event;\r
+\r
+typedef struct {\r
+       char* token;\r
+       char* serviceName;\r
+       char* commandName;\r
+       char* arguments;\r
+       uint16_t args_len;\r
+} TCF_Command;\r
+\r
+typedef struct {\r
+       char* token;\r
+       char* error;\r
+       char* data;\r
+} TCF_Result;\r
+\r
+typedef uint16_t (*TCF_Service_CommandHandler)(TCF_Command* command, char* buf);\r
+typedef uint16_t (*TCF_Service_EventHandler)(TCF_Event* command, char* buf);\r
+\r
+void InitTcf(void);\r
+uint16_t message_length(const char* msg, uint16_t max_length);\r
+char* get_next_tcf_field(char* chars, uint16_t maxlen);\r
+void start_tcf_field(char* start, char* field);\r
+void append_tcf_field(char* start, char* field);\r
+void convert_to_tcf_message(char* start);\r
+void tcf_compile_result(TCF_Result* result, char* buffer);\r
+\r
+/* Locator and Filesystem handlers are in tcf.c file. To be moved */\r
+uint16_t handle_LocatorCommand(TCF_Command* command, char* buf);\r
+uint16_t handle_LocatorEvent(TCF_Event* event, char* buf);\r
+uint16_t handle_FileSystemCommand(TCF_Command* command, char* buf);\r
+uint16_t handle_FileSystemEvent(TCF_Event* event, char* buf);\r
+\r
+#endif /* TCF_H_ */\r
index c4589a625976838f9777e945434f1226d802f609..74ff8de573b9c9eb65704769027fd546895fc1ff 100644 (file)
           Det_ReportError(MODULE_ID_CANIF, 0, _api, _err); \\r
           return; \\r
         }\r
-#undef DET_REPORTERROR\r
 #define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x, _y, _z, _q)\r
 \r
 #else\r
 #define VALIDATE(_exp,_api,_err )\r
 #define VALIDATE_NO_RV(_exp,_api,_err )\r
-#undef DET_REPORTERROR\r
 #define DET_REPORTERROR(_x,_y,_z,_q)\r
 #endif\r
 \r
index de085a9e28a0e426634ac5d2e63a2569a7114f9b..79506dba20060c1bf29cd95bf68b802de4753297 100644 (file)
 #include "CanIf.h"              /**< @req CANSM017 */\r
 #include "CanSM_Internal.h"\r
 \r
+static CanSM_Internal_NetworkType CanSM_InternalNetworks[CANSM_NETWORK_COUNT];\r
+\r
 static CanSM_InternalType CanSM_Internal = {\r
                .InitStatus = CANSM_STATUS_UNINIT,\r
+               .Networks = CanSM_InternalNetworks,\r
 };\r
 \r
 static const CanSM_ConfigType* CanSM_Config;\r
index f95972cdf700931f35e14e70d7c8ed137a6b9097..cdeb2f977326d42ebacd927f0fc1ec2f9f01f2fd 100644 (file)
 /*\r
  *  General requirements\r
  */\r
+\r
+/** @req CANTP001 */\r
+/** @req CANTP019 */\r
+/** @req CANTP020 */\r
 /** @req CANTP156.Partially */\r
 /** @req CANTP150 */\r
 /** @req CANTP151 */\r
 /** @req CANTP158 */\r
 /** @req CANTP003 */\r
 /** @req CANTP216 */\r
+/** @req CANTP217 */\r
+\r
+/*\r
+ * Environmental requirements
+ */\r
+/** @req CANTP164 */\r
+/** @req CANTP199 */\r
+\r
 \r
 #include "CanTp.h" /** @req CANTP219 */\r
 #include "CanTp_Cbk.h" /** @req CANTP233 */\r
           Det_ReportError(MODULE_ID_CANTP, 0, _api, _err); \\r
           return; \\r
         }\r
-#undef DET_REPORTERROR\r
 #define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x, _y, _z, _q)\r
 \r
 #else\r
 #define VALIDATE(_exp,_api,_err )\r
 #define VALIDATE_NO_RV(_exp,_api,_err )\r
-#undef DET_REPORTERROR\r
 #define DET_REPORTERROR(_x,_y,_z,_q)\r
 #endif\r
 \r
@@ -1156,7 +1166,7 @@ Std_ReturnType FrTp_CancelTransmitRequest(PduIdType FrTpTxPduId,
 // - - - - - - - - - - - - - -\r
 \r
 \r
-void CanTp_Init() /** @req CANTP208 */\r
+void CanTp_Init()\r
 {\r
        CanTp_ChannelPrivateType *runtimeData;\r
        const CanTp_TxNSduType *txConfigParams;\r
index edd21a7ae683610fdb40b69bb8de0d7ce4edcf84..17fd1e4cc6005bb4ca2e525c9e6f6a4a37c66ae2 100644 (file)
 #include <string.h>\r
 #include "Com.h"\r
 #include "Com_Arc_Types.h"\r
+#include "Com_Internal.h"\r
 #include "Com_misc.h"\r
 #include "debug.h"\r
 \r
-#ifdef COM_DEV_ERROR_DETECT\r
-#include "Det.h"\r
-#endif\r
-\r
 const Com_ConfigType * ComConfig;\r
 \r
 Com_Arc_IPdu_type Com_Arc_IPdu[COM_N_IPDUS];\r
@@ -66,8 +63,8 @@ void Com_Init(const Com_ConfigType *config ) {
        for (int i = 0; !ComConfig->ComIPdu[i].Com_Arc_EOL; i++) {\r
                Com_Arc_Config.ComNIPdu++;\r
 \r
-               ComGetIPdu(i);\r
-               ComGetArcIPdu(i);\r
+               GET_IPdu(i);\r
+               GET_ArcIPdu(i);\r
 \r
                if (i >= COM_N_IPDUS) {\r
                        DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, 0x01, COM_E_TOO_MANY_IPDU);\r
@@ -103,7 +100,7 @@ void Com_Init(const Com_ConfigType *config ) {
                //Arc_IPdu->NComIPduSignalRef = 0;\r
                for (int j = 0; IPdu->ComIPduSignalRef != NULL && IPdu->ComIPduSignalRef[j] != NULL; j++) {\r
                        Signal = IPdu->ComIPduSignalRef[j];\r
-                       ComGetArcSignal(Signal->ComHandleId);\r
+                       GET_ArcSignal(Signal->ComHandleId);\r
 \r
                        // If this signal already has been configured this is most likely an error.\r
                        if (Arc_Signal->ComIPduDataPtr != NULL) {\r
@@ -139,7 +136,7 @@ void Com_Init(const Com_ConfigType *config ) {
 \r
                        // Clear update bits\r
                        if (Signal->ComSignalArcUseUpdateBit) {\r
-                               clearBit(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
+                               CLEARBIT(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
                        }\r
 \r
                        // If this signal is a signal group\r
@@ -153,7 +150,7 @@ void Com_Init(const Com_ConfigType *config ) {
                                // For each group signal of this signal group.\r
                                for(int h = 0; Signal->ComGroupSignal[h] != NULL; h++) {\r
                                        GroupSignal = Signal->ComGroupSignal[h];\r
-                                       ComGetArcGroupSignal(GroupSignal->ComHandleId);\r
+                                       GET_ArcGroupSignal(GroupSignal->ComHandleId);\r
                                        // Set pointer to shadow buffer\r
                                        Arc_GroupSignal->Com_Arc_ShadowBuffer = Arc_Signal->Com_Arc_ShadowBuffer;\r
                                        // Initialize group signal data.\r
@@ -201,7 +198,7 @@ void Com_Init(const Com_ConfigType *config ) {
                // Configure per I-PDU based deadline monitoring.\r
                for (int j = 0; IPdu->ComIPduSignalRef != NULL && IPdu->ComIPduSignalRef[j] != NULL; j++) {\r
                        Signal = IPdu->ComIPduSignalRef[j];\r
-                       ComGetArcSignal(Signal->ComHandleId);\r
+                       GET_ArcSignal(Signal->ComHandleId);\r
 \r
                        if (Signal->ComTimeoutFactor > 0 && !Signal->ComSignalArcUseUpdateBit) {\r
                                Arc_Signal->ComTimeoutFactor = earliestDeadline;\r
index 5e6aae870706e90d6986ec00b5419191785841c7..3cdd0960d8b9c18faefda28b4381e477e06483af 100644 (file)
@@ -24,6 +24,7 @@
 #include <string.h>\r
 #include "Com_Arc_Types.h"\r
 #include "Com.h"\r
+#include "Com_Internal.h"\r
 #include "Com_misc.h"\r
 #include "debug.h"\r
 #include "PduR.h"\r
 extern Com_Arc_Config_type Com_Arc_Config;\r
 \r
 uint8 Com_SendSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {\r
-       COM_VALIDATE_SIGNAL(SignalId, 0x0a, E_NOT_OK);\r
+       VALIDATE_SIGNAL(SignalId, 0x0a, E_NOT_OK);\r
        // Store pointer to signal for easier coding.\r
-       ComGetSignal(SignalId);\r
-       ComGetArcSignal(SignalId);\r
-       ComGetIPdu(Arc_Signal->ComIPduHandleId);\r
-       ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+       GET_Signal(SignalId);\r
+       GET_ArcSignal(SignalId);\r
+       GET_IPdu(Arc_Signal->ComIPduHandleId);\r
+       GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
 \r
        //DEBUG(DEBUG_LOW, "Com_SendSignal: id %d, nBytes %d, BitPosition %d, intVal %d\n", SignalId, nBytes, signal->ComBitPosition, (uint32)*(uint8 *)SignalDataPtr);\r
 \r
@@ -49,7 +50,7 @@ uint8 Com_SendSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {
 \r
        // If the signal has an update bit. Set it!\r
        if (Signal->ComSignalArcUseUpdateBit) {\r
-               setBit(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
+               SETBIT(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
        }\r
 \r
        /*\r
@@ -62,7 +63,7 @@ uint8 Com_SendSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {
 }\r
 \r
 uint8 Com_ReceiveSignal(Com_SignalIdType SignalId, void* SignalDataPtr) {\r
-       COM_VALIDATE_SIGNAL(SignalId, 0x0b, E_NOT_OK);\r
+       VALIDATE_SIGNAL(SignalId, 0x0b, E_NOT_OK);\r
        DEBUG(DEBUG_LOW, "Com_ReceiveSignal: SignalId %d\n", SignalId);\r
 \r
        // Com_CopyFromSignal(&ComConfig->ComSignal[SignalId], SignalDataPtr);\r
@@ -75,7 +76,7 @@ uint8 Com_ReceiveSignal(Com_SignalIdType SignalId, void* SignalDataPtr) {
 }\r
 \r
 Std_ReturnType Com_TriggerTransmit(PduIdType ComTxPduId, uint8 *SduPtr) {\r
-       PduIdCheck(ComTxPduId, 0x13, E_NOT_OK);\r
+       PDU_ID_CHECK(ComTxPduId, 0x13, E_NOT_OK);\r
        /*\r
         * COM260: This function must not check the transmission mode of the I-PDU\r
         * since it should be possible to use it regardless of the transmission mode.\r
@@ -84,8 +85,8 @@ Std_ReturnType Com_TriggerTransmit(PduIdType ComTxPduId, uint8 *SduPtr) {
        /*\r
         * COM395: This function must override the IPdu callouts used in Com_TriggerIPduTransmit();\r
         */\r
-       ComGetIPdu(ComTxPduId);\r
-       ComGetArcIPdu(ComTxPduId);\r
+       GET_IPdu(ComTxPduId);\r
+       GET_ArcIPdu(ComTxPduId);\r
 \r
        memcpy(SduPtr, Arc_IPdu->ComIPduDataPtr, IPdu->ComIPduSize);\r
        return E_OK;\r
@@ -93,11 +94,11 @@ Std_ReturnType Com_TriggerTransmit(PduIdType ComTxPduId, uint8 *SduPtr) {
 \r
 \r
 void Com_TriggerIPduSend(PduIdType ComTxPduId) {\r
-       PduIdCheck(ComTxPduId, 0x17);\r
+       PDU_ID_CHECK(ComTxPduId, 0x17);\r
 \r
        //DEBUG(DEBUG_MEDIUM, "Com_TriggerIPduSend sending IPdu %d... ", ComTxPduId);\r
-       ComGetIPdu(ComTxPduId);\r
-       ComGetArcIPdu(ComTxPduId);\r
+       GET_IPdu(ComTxPduId);\r
+       GET_ArcIPdu(ComTxPduId);\r
 \r
        // Is the IPdu ready for transmission?\r
        if (Arc_IPdu->Com_Arc_TxIPduTimers.ComTxIPduMinimumDelayTimer == 0) {\r
@@ -128,7 +129,7 @@ void Com_TriggerIPduSend(PduIdType ComTxPduId) {
                        for (int i = 0; IPdu->ComIPduSignalRef != NULL && IPdu->ComIPduSignalRef[i] != NULL; i++) {\r
                        //for (int i = 0; i < Arc_IPdu->NComIPduSignalRef; i++) {\r
                                if (IPdu->ComIPduSignalRef[i]->ComSignalArcUseUpdateBit) {\r
-                                       clearBit(Arc_IPdu->ComIPduDataPtr, IPdu->ComIPduSignalRef[i]->ComUpdateBitPosition);\r
+                                       CLEARBIT(Arc_IPdu->ComIPduDataPtr, IPdu->ComIPduSignalRef[i]->ComUpdateBitPosition);\r
                                }\r
                        }\r
                }\r
@@ -145,10 +146,10 @@ void Com_TriggerIPduSend(PduIdType ComTxPduId) {
 }\r
 \r
 Std_ReturnType Com_RxIndication(PduIdType ComRxPduId, const uint8* SduPtr) {\r
-       PduIdCheck(ComRxPduId, 0x14, E_NOT_OK);\r
+       PDU_ID_CHECK(ComRxPduId, 0x14, E_NOT_OK);\r
 \r
-       ComGetIPdu(ComRxPduId);\r
-       ComGetArcIPdu(ComRxPduId);\r
+       GET_IPdu(ComRxPduId);\r
+       GET_ArcIPdu(ComRxPduId);\r
 \r
        // If Ipdu is stopped\r
        if (!Arc_IPdu->Com_Arc_IpduStarted) {\r
@@ -171,11 +172,11 @@ Std_ReturnType Com_RxIndication(PduIdType ComRxPduId, const uint8* SduPtr) {
        const ComSignal_type *signal;\r
        for (int i = 0; IPdu->ComIPduSignalRef[i] != NULL; i++) {\r
                signal = IPdu->ComIPduSignalRef[i];\r
-               ComGetArcSignal(signal->ComHandleId);\r
+               GET_ArcSignal(signal->ComHandleId);\r
 \r
                // If this signal uses an update bit, then it is only considered if this bit is set.\r
                if (!signal->ComSignalArcUseUpdateBit ||\r
-                       (signal->ComSignalArcUseUpdateBit && testBit(Arc_IPdu->ComIPduDataPtr, signal->ComUpdateBitPosition))) {\r
+                       (signal->ComSignalArcUseUpdateBit && TESTBIT(Arc_IPdu->ComIPduDataPtr, signal->ComUpdateBitPosition))) {\r
 \r
                        if (signal->ComTimeoutFactor > 0) { // If reception deadline monitoring is used.\r
                                // Reset the deadline monitoring timer.\r
@@ -213,16 +214,16 @@ Std_ReturnType Com_RxIndication(PduIdType ComRxPduId, const uint8* SduPtr) {
 }\r
 \r
 void Com_TxConfirmation(PduIdType ComTxPduId) {\r
-       PduIdCheck(ComTxPduId, 0x15);\r
+       PDU_ID_CHECK(ComTxPduId, 0x15);\r
 }\r
 \r
 \r
 Std_ReturnType Com_SendSignalGroup(Com_SignalGroupIdType SignalGroupId) {\r
 //#warning Com_SendSignalGroup should be performed atomically. Should we disable interrupts here?\r
-       ComGetSignal(SignalGroupId);\r
-       ComGetArcSignal(SignalGroupId);\r
-       ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
-       ComGetIPdu(Arc_Signal->ComIPduHandleId);\r
+       GET_Signal(SignalGroupId);\r
+       GET_ArcSignal(SignalGroupId);\r
+       GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
+       GET_IPdu(Arc_Signal->ComIPduHandleId);\r
 \r
 \r
        // Copy shadow buffer to Ipdu data space\r
@@ -236,7 +237,7 @@ Std_ReturnType Com_SendSignalGroup(Com_SignalGroupIdType SignalGroupId) {
 \r
        // If the signal has an update bit. Set it!\r
        if (Signal->ComSignalArcUseUpdateBit) {\r
-               setBit(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
+               SETBIT(Arc_IPdu->ComIPduDataPtr, Signal->ComUpdateBitPosition);\r
        }\r
 \r
        /*\r
@@ -252,8 +253,8 @@ Std_ReturnType Com_SendSignalGroup(Com_SignalGroupIdType SignalGroupId) {
 \r
 Std_ReturnType Com_ReceiveSignalGroup(Com_SignalGroupIdType SignalGroupId) {\r
 //#warning Com_ReceiveSignalGroup should be performed atomically. Should we disable interrupts here?\r
-       ComGetSignal(SignalGroupId);\r
-       ComGetArcSignal(SignalGroupId);\r
+       GET_Signal(SignalGroupId);\r
+       GET_ArcSignal(SignalGroupId);\r
 \r
        // Copy Ipdu data buffer to shadow buffer.\r
        const ComGroupSignal_type *groupSignal;\r
@@ -269,14 +270,14 @@ Std_ReturnType Com_ReceiveSignalGroup(Com_SignalGroupIdType SignalGroupId) {
 }\r
 \r
 void Com_UpdateShadowSignal(Com_SignalIdType SignalId, const void *SignalDataPtr) {\r
-       ComGetArcGroupSignal(SignalId);\r
+       GET_ArcGroupSignal(SignalId);\r
        // TODO: CopyData\r
        // Com_CopyData(Arc_GroupSignal->Com_Arc_ShadowBuffer, SignalDataPtr, GroupSignal->ComBitSize, GroupSignal->ComBitPosition, 0);\r
        Com_WriteSignalDataToPduBuffer(SignalId, TRUE, SignalDataPtr, (void *)Arc_GroupSignal->Com_Arc_ShadowBuffer);\r
 }\r
 \r
 void Com_ReceiveShadowSignal(Com_SignalIdType SignalId, void *SignalDataPtr) {\r
-       ComGetArcGroupSignal(SignalId);\r
+       GET_ArcGroupSignal(SignalId);\r
        // TODO: CopyData\r
        // Com_CopyData(SignalDataPtr, Arc_GroupSignal->Com_Arc_ShadowBuffer, GroupSignal->ComBitSize, 0, GroupSignal->ComBitPosition);\r
        Com_ReadSignalDataFromPduBuffer(SignalId, TRUE, SignalDataPtr, (void *)Arc_GroupSignal->Com_Arc_ShadowBuffer);\r
diff --git a/communication/Com/Com_Internal.h b/communication/Com/Com_Internal.h
new file mode 100644 (file)
index 0000000..570be8a
--- /dev/null
@@ -0,0 +1,83 @@
+/* -------------------------------- Arctic Core ------------------------------\r
+ * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
+ *\r
+ * Copyright (C) 2009  ArcCore AB <contact@arccore.com>\r
+ *\r
+ * This source code is free software; you can redistribute it and/or modify it\r
+ * under the terms of the GNU General Public License version 2 as published by the\r
+ * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\r
+ * for more details.\r
+ * -------------------------------- Arctic Core ------------------------------*/\r
+\r
+/*\r
+ * NB! This file is for COM internal use only and may only be included from COM C-files!\r
+ */\r
+\r
+\r
+\r
+#ifndef COM_INTERNAL_H_\r
+#define COM_INTERNAL_H_\r
+\r
+\r
+extern const Com_ConfigType * ComConfig;\r
+\r
+\r
+\r
+#ifdef COM_DEV_ERROR_DETECT\r
+#include "Det.h"\r
+\r
+#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x,_y,_z,_q)\r
+\r
+\r
+// Define macro for parameter check.\r
+#define PDU_ID_CHECK(PduId,ApiId,...) \\r
+       if (PduId >= Com_Arc_Config.ComNIPdu) { \\r
+               DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, ApiId, COM_INVALID_PDU_ID); \\r
+               return __VA_ARGS__; \\r
+       } \\r
+\r
+#define VALIDATE_SIGNAL(SignalId, ApiId, ...) \\r
+       if (ComConfig->ComSignal[SignalId].Com_Arc_IsSignalGroup) { \\r
+               DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, ApiId, COM_ERROR_SIGNAL_IS_SIGNALGROUP); \\r
+               return __VA_ARGS__; \\r
+       } \\r
+\r
+\r
+#else\r
+\r
+#define DET_REPORTERROR(_x,_y,_z,_q)\r
+\r
+#define PDU_ID_CHECK(PduId,ApiId,...)\r
+#define VALIDATE_SIGNAL(PduId, ApiId, ...)\r
+#endif\r
+\r
+\r
+#define TESTBIT(source,bit) (*((uint8 *)source + (bit / 8)) & (1 << (bit % 8)))\r
+#define SETBIT(dest,bit) *((uint8 *)dest + (bit / 8)) |= (1 << (bit % 8))\r
+#define CLEARBIT(dest,bit) *((uint8 *)dest + (bit / 8)) &= ~(1 << (bit % 8))\r
+\r
+#define GET_Signal(SignalId) \\r
+       const ComSignal_type * Signal = &ComConfig->ComSignal[SignalId]\\r
+\r
+#define GET_ArcSignal(SignalId) \\r
+       Com_Arc_Signal_type * Arc_Signal = &Com_Arc_Config.ComSignal[SignalId]\\r
+\r
+#define GET_IPdu(IPduId) \\r
+       const ComIPdu_type *IPdu = &ComConfig->ComIPdu[IPduId]\\r
+\r
+#define GET_ArcIPdu(IPduId) \\r
+       Com_Arc_IPdu_type *Arc_IPdu = &Com_Arc_Config.ComIPdu[IPduId]\\r
+\r
+#define GET_GroupSignal(GroupSignalId) \\r
+       const ComGroupSignal_type *GroupSignal = &ComConfig->ComGroupSignal[GroupSignalId]\\r
+\r
+#define GET_ArcGroupSignal(GroupSignalId) \\r
+       Com_Arc_GroupSignal_type *Arc_GroupSignal = &Com_Arc_Config.ComGroupSignal[GroupSignalId]\\r
+\r
+\r
+\r
+#endif /* COM_INTERNAL_H_ */\r
index 71e52c0e97f2decdeac152075abccba92f5c902a..147ab96dd704b34e9107b8e32caf3764ba59dbca 100644 (file)
@@ -20,6 +20,7 @@
 \r
 #include "Com_Arc_Types.h"\r
 #include "Com.h"\r
+#include "Com_Internal.h"\r
 #include "Com_misc.h"\r
 #include <string.h>\r
 #include "debug.h"\r
@@ -36,8 +37,8 @@ void Com_MainFunctionRx() {
        const ComSignal_type *signal;\r
        for (int i = 0; !ComConfig->ComSignal[i].Com_Arc_EOL; i++) {\r
                signal = &ComConfig->ComSignal[i];\r
-               ComGetArcSignal(signal->ComHandleId);\r
-               ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+               GET_ArcSignal(signal->ComHandleId);\r
+               GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
 \r
                // Monitor signal reception deadline\r
                if (Arc_IPdu->Com_Arc_IpduStarted && Arc_Signal->ComTimeoutFactor > 0) {\r
@@ -79,7 +80,7 @@ void Com_MainFunctionTx() {
        const ComIPdu_type *IPdu;\r
        for (int i = 0; !ComConfig->ComIPdu[i].Com_Arc_EOL; i++) {\r
                IPdu = &ComConfig->ComIPdu[i];\r
-               ComGetArcIPdu(i);\r
+               GET_ArcIPdu(i);\r
 \r
                // Is this a IPdu that should be transmitted?\r
                if (IPdu->ComIPduDirection == SEND && Arc_IPdu->Com_Arc_IpduStarted) {\r
index 68545b866ec7a479363bf0fd03c494fd412ebaf7..e6521b602ab0710b5fbdf8f0da6d7524ac6a2c9d 100644 (file)
@@ -25,6 +25,7 @@
 \r
 #include "Com_Arc_Types.h"\r
 #include "Com.h"\r
+#include "Com_Internal.h"\r
 #include "Com_misc.h"\r
 \r
 extern Com_Arc_Config_type Com_Arc_Config;\r
@@ -34,9 +35,9 @@ void Com_ReadSignalDataFromPdu(
                        void *signalData) {\r
 \r
        // Get PDU\r
-       ComGetSignal(signalId);\r
-       ComGetArcSignal(Signal->ComHandleId);\r
-       ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+       GET_Signal(signalId);\r
+       GET_ArcSignal(Signal->ComHandleId);\r
+       GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
 \r
        // Get data\r
        Com_ReadSignalDataFromPduBuffer(\r
@@ -52,9 +53,9 @@ void Com_ReadGroupSignalDataFromPdu(
                void *signalData) {\r
 \r
        // Get PDU\r
-       ComGetSignal(parentSignalId);\r
-       ComGetArcSignal(Signal->ComHandleId);\r
-       ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+       GET_Signal(parentSignalId);\r
+       GET_ArcSignal(Signal->ComHandleId);\r
+       GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
 \r
        // Get data\r
        Com_ReadSignalDataFromPduBuffer(\r
@@ -77,14 +78,14 @@ void Com_ReadSignalDataFromPduBuffer(
        uint8 bitSize;\r
 \r
        if (!isGroupSignal) {\r
-               ComGetSignal(signalId);\r
+               GET_Signal(signalId);\r
                signalType = Signal->ComSignalType;\r
                signalEndianess = Signal->ComSignalEndianess;\r
                signalLength = Signal->ComBitSize / 8;\r
                bitPosition = Signal->ComBitPosition;\r
                bitSize = Signal->ComBitSize;\r
        } else {\r
-               ComGetGroupSignal(signalId);\r
+               GET_GroupSignal(signalId);\r
                signalType = GroupSignal->ComSignalType;\r
                signalEndianess = GroupSignal->ComSignalEndianess;\r
                signalLength = GroupSignal->ComBitSize / 8;\r
@@ -128,9 +129,9 @@ void Com_WriteSignalDataToPdu(
                        const void *signalData) {\r
 \r
        // Get PDU\r
-       ComGetSignal(signalId);\r
-       ComGetArcSignal(Signal->ComHandleId);\r
-       ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+       GET_Signal(signalId);\r
+       GET_ArcSignal(Signal->ComHandleId);\r
+       GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
 \r
        // Get data\r
        Com_WriteSignalDataToPduBuffer(\r
@@ -146,9 +147,9 @@ void Com_WriteGroupSignalDataToPdu(
                const void *signalData) {\r
 \r
        // Get PDU\r
-       ComGetSignal(parentSignalId);\r
-       ComGetArcSignal(Signal->ComHandleId);\r
-       ComGetArcIPdu(Arc_Signal->ComIPduHandleId);\r
+       GET_Signal(parentSignalId);\r
+       GET_ArcSignal(Signal->ComHandleId);\r
+       GET_ArcIPdu(Arc_Signal->ComIPduHandleId);\r
 \r
        // Get data\r
        Com_WriteSignalDataToPduBuffer(\r
@@ -172,13 +173,13 @@ void Com_WriteSignalDataToPduBuffer(
        uint8 bitSize;\r
 \r
        if (!isGroupSignal) {\r
-               ComGetSignal(signalId);\r
+               GET_Signal(signalId);\r
                signalType = Signal->ComSignalType;\r
                signalLength = Signal->ComBitSize / 8;\r
                bitPosition = Signal->ComBitPosition;\r
                bitSize = Signal->ComBitSize;\r
        } else {\r
-               ComGetGroupSignal(signalId);\r
+               GET_GroupSignal(signalId);\r
                signalType = GroupSignal->ComSignalType;\r
                signalLength = GroupSignal->ComBitSize / 8;\r
                bitPosition = GroupSignal->ComBitPosition;\r
@@ -196,7 +197,7 @@ void Com_WriteSignalDataToPduBuffer(
 \r
 #if (COM_ARC_FILTER_ENABLED == STD_ON)\r
 uint8 Com_Filter(ComSignal_type *signal) {\r
-       ComGetArcSignal(signal->ComHandleId);\r
+       GET_ArcSignal(signal->ComHandleId);\r
        const ComFilter_type * filter = &signal->ComFilter;\r
        uint8 success = 0;\r
        if (filter->ComFilterAlgorithm == ALWAYS) {\r
index e42674b73b871a7049a94bfafbc0542d399aa822..f5d1a58c786b9abe9f5535d9c1e6522da8114961 100644 (file)
@@ -69,14 +69,17 @@ Nm_ReturnType Nm_EnableCommunication( const NetworkHandleType NetworkHandle ){
 /** Set user data for NM messages transmitted next on the bus.\r
   * For that purpose <BusNm>_SetUserData shall be called\r
   * (e.g. CanNm_SetUserData function is called if channel is configured as CAN). */\r
+#if (NM_USER_DATA_ENABLED == STD_ON)\r
 Nm_ReturnType Nm_SetUserData( const NetworkHandleType NetworkHandle, const uint8 * const nmUserDataPtr ){\r
        const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
        NM_CALL_BUSNM(SetUserData, ChannelConf, nmUserDataPtr)\r
 }\r
+#endif\r
 \r
 /** Get user data out of the last successfully received NM message.\r
   * For that purpose <BusNm>_GetUserData shall be called\r
   * (e.g. CanNm_GetUserData function is called if channel is configured as CAN). */\r
+#if (NM_USER_DATA_ENABLED == STD_ON)\r
 Nm_ReturnType Nm_GetUserData( const NetworkHandleType NetworkHandle, uint8 * const nmUserDataPtr, uint8 * const nmNodeIdPtr ){\r
        /* For some reason the signature of this service differs from its busNm equivalents... */\r
        const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
@@ -96,13 +99,16 @@ Nm_ReturnType Nm_GetUserData( const NetworkHandleType NetworkHandle, uint8 * con
        default: return NM_E_NOT_OK;\r
        }\r
 }\r
+#endif\r
 \r
 /** Get the whole PDU data out of the most recently received NM message.\r
   * For that purpose CanNm_GetPduData shall be called. */\r
+#if ((NM_NODE_ID_ENABLED == STD_ON) || (NM_NODE_DETECTION_ENABLED == STD_ON) || (NM_USER_DATA_ENABLED == STD_ON))\r
 Nm_ReturnType Nm_GetPduData( const NetworkHandleType NetworkHandle, uint8 * const nmPduData ){\r
        const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
        NM_CALL_BUSNM(GetPduData, ChannelConf, nmPduData)\r
 }\r
+#endif\r
 \r
 /** Set Repeat Message Request Bit for NM messages transmitted next on the bus.\r
   * For that purpose <BusNm>_RepeatMessageRequest shall be called\r
@@ -114,6 +120,7 @@ Nm_ReturnType Nm_RepeatMessageRequest( const NetworkHandleType NetworkHandle ){
 \r
 /** Get node identifier out of the last successfully received NM-message.\r
   * The function <BusNm>_GetNodeIdentifier shall be called. */\r
+#if (NM_NODE_ID_ENABLED == STD_ON)\r
 Nm_ReturnType Nm_GetNodeIdentifier( const NetworkHandleType NetworkHandle, uint8 * const nmNodeIdPtr ){\r
        const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
        NM_CALL_BUSNM(GetNodeIdentifier, ChannelConf, nmNodeIdPtr)\r
@@ -126,6 +133,7 @@ Nm_ReturnType Nm_GetLocalNodeIdentifier( const NetworkHandleType NetworkHandle,
        const Nm_ChannelType* ChannelConf = &Nm_ConfigPtr->Channels[NetworkHandle];\r
        NM_CALL_BUSNM(GetLocalNodeIdentifier, ChannelConf, nmNodeIdPtr)\r
 }\r
+#endif\r
 \r
 /** Check if remote sleep indication takes place or not. This in turn calls the\r
   * <BusNm>_CheckRemoteSleepIndication for the bus specific NM layer\r
index c3740e6a5eadb75aa8c6cb56bba1076be1241690..529b31a19590c12f73c90b0235b5874b7b56d30a 100644 (file)
@@ -57,12 +57,12 @@ void PduR_Init (const PduR_PBConfigType* ConfigPtr) {
        // Otherwise raise an error.\r
        if (PduRState != PDUR_UNINIT) {\r
                // Raise error and return.\r
-               DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, 0x00, PDUR_E_INVALID_REQUEST);\r
+               PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, 0x00, PDUR_E_INVALID_REQUEST);\r
                return;\r
        }\r
 \r
        if (ConfigPtr == NULL) {\r
-               DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, 0x00, PDUR_E_CONFIG_PTR_INVALID);\r
+               PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, 0x00, PDUR_E_CONFIG_PTR_INVALID);\r
                return;\r
        } else {\r
                PduRConfig = ConfigPtr;\r
@@ -209,7 +209,7 @@ void PduR_GetVersionInfo (Std_VersionInfoType* versionInfo){
 #endif\r
 \r
 uint32 PduR_GetConfigurationId () {\r
-       //DevCheck(0,1,0x18,E_NOT_OK);\r
+       //PduR_DevCheck(0,1,0x18,E_NOT_OK);\r
        return PduRConfig->PduRConfigurationId;\r
 }\r
 #endif // End of not Zero Cost Operation Mode\r
index 4f475f3e9b4747eaf13134a6e2f285b0a0fbfb86..513aa64a2c559029dbc7d11a534bd80fc0d040a3 100644 (file)
@@ -27,7 +27,7 @@
 \r
 void PduR_CanIfRxIndication(PduIdType CanRxPduId,const uint8* CanSduPtr) {\r
 #if (PDUR_CANIF_SUPPORT == STD_ON)\r
-       DevCheck(CanRxPduId,CanSduPtr,0x0e);\r
+       PduR_DevCheck(CanRxPduId,CanSduPtr,0x0e);\r
 \r
        DEBUG(DEBUG_LOW,"----------------------\n");\r
        DEBUG(DEBUG_LOW,"PduR_CanIfRxIndication: received indication with id %d and data %d\n", CanRxPduId, *CanSduPtr);\r
@@ -40,7 +40,7 @@ void PduR_CanIfRxIndication(PduIdType CanRxPduId,const uint8* CanSduPtr) {
 \r
 void PduR_CanIfTxConfirmation(PduIdType CanTxPduId) {\r
 #if (PDUR_CANIF_SUPPORT == STD_ON)\r
-       DevCheck(CanTxPduId,1,0x0f);\r
+       PduR_DevCheck(CanTxPduId,1,0x0f);\r
 \r
        DEBUG(DEBUG_LOW,"----------------------\n");\r
        DEBUG(DEBUG_LOW,"PduR_CanIfTxConfirmation: received confirmation with id %d\n", CanTxPduId);\r
index b06f9f25d6aecffc1189902a9f9d0e36a025bd81..3e8a15faca4e56d379d81a77f2e2d10d7d01b9a9 100644 (file)
@@ -60,7 +60,7 @@ BufReq_ReturnType PduR_CanTpProvideTxBuffer(PduIdType CanTpTxPduId, PduInfoType*
 \r
 void PduR_CanTpTxConfirmation(PduIdType CanTpTxPduId, NotifResultType Result) {\r
 #if (PDUR_CANTP_SUPPORT == STD_ON)\r
-       DevCheck(CanTpTxPduId,1,0x0f);\r
+       PduR_DevCheck(CanTpTxPduId,1,0x0f);\r
 \r
        DEBUG(DEBUG_LOW,"----------------------\n");\r
        DEBUG(DEBUG_LOW,"PduR_CanIfTxConfirmation: received confirmation with id %d\n", CanTxPduId);\r
index da93c3e8f5182452000e4a8b5a6958d6d38f58c1..7cfcfc8789eb0c44df9f33e028c644224ee68e7b 100644 (file)
@@ -30,7 +30,7 @@
 Std_ReturnType PduR_ComTransmit(PduIdType ComTxPduId, const PduInfoType* PduInfoPtr) {\r
        BufReq_ReturnType retVal = BUFREQ_NOT_OK;\r
 #if (PDUR_COM_SUPPORT == STD_ON)\r
-       DevCheck(ComTxPduId,PduInfoPtr,0x15, E_NOT_OK);\r
+       PduR_DevCheck(ComTxPduId,PduInfoPtr,0x15, E_NOT_OK);\r
 \r
        //DEBUG(DEBUG_LOW,"PduR_ComTransmit: received transmit request with id %d and data %d\n", ComTxPduId, *PduInfoPtr->SduDataPtr);\r
        PduRRoutingPath_type *route = &PduRConfig->PduRRoutingTable->PduRRoutingPath[ComTxPduId];\r
index bc62ebda11e24ac4b9c6f18409413a844bfbc1e0..bbbc192c13d6b149c554edf2ddc556dffc83bb6b 100644 (file)
@@ -25,7 +25,7 @@
 Std_ReturnType PduR_DcmTransmit(PduIdType DcmTxPduId, const PduInfoType* PduInfoPtr) {\r
        BufReq_ReturnType retVal = BUFREQ_NOT_OK;\r
 #if (PDUR_DCM_SUPPORT == STD_ON)\r
-       DevCheck(DcmTxPduId,PduInfoPtr,0x15, E_NOT_OK);\r
+       PduR_DevCheck(DcmTxPduId,PduInfoPtr,0x15, E_NOT_OK);\r
 \r
        //DEBUG(DEBUG_LOW,"PduR_ComTransmit: received transmit request with id %d and data %d\n", ComTxPduId, *PduInfoPtr->SduDataPtr);\r
 \r
index cab5c7398240fd749c5a190737311c804bacc4f7..6b11c584942cb0cdcaeb154da896b50a6ec38c07 100644 (file)
@@ -26,7 +26,7 @@
 \r
 void PduR_LinIfRxIndication(PduIdType LinRxPduId, const uint8* LinSduPtr) {\r
 #if (PDUR_LINIF_SUPPORT == STD_ON)\r
-       DevCheck(LinRxPduId,LinSduPtr,0x0e);\r
+       PduR_DevCheck(LinRxPduId,LinSduPtr,0x0e);\r
 \r
        DEBUG(DEBUG_LOW,"----------------------\n");\r
        DEBUG(DEBUG_LOW,"PduR_LinIfRxIndication: received indication with id %d and data %d\n", LinRxPduId, *LinSduPtr);\r
@@ -39,7 +39,7 @@ void PduR_LinIfRxIndication(PduIdType LinRxPduId, const uint8* LinSduPtr) {
 \r
 void PduR_LinIfTxConfirmation(PduIdType LinTxPduId) {\r
 #if (PDUR_LINIF_SUPPORT == STD_ON)\r
-       DevCheck(LinTxPduId,1,0x0f);\r
+       PduR_DevCheck(LinTxPduId,1,0x0f);\r
 \r
        DEBUG(DEBUG_LOW,"----------------------\n");\r
        DEBUG(DEBUG_LOW,"PduR_LinIfTxConfirmation: received confirmation with id %d\n", LinTxPduId);\r
@@ -52,7 +52,7 @@ void PduR_LinIfTxConfirmation(PduIdType LinTxPduId) {
 \r
 void PduR_LinIfTriggerTransmit(PduIdType LinTxPduId, uint8* LinSduPtr) {\r
 #if (PDUR_LINIF_SUPPORT == STD_ON)\r
-       DevCheck(LinTxPduId,LinSduPtr,0x10);\r
+       PduR_DevCheck(LinTxPduId,LinSduPtr,0x10);\r
 \r
        DEBUG(DEBUG_LOW,"----------------------\n");\r
        DEBUG(DEBUG_LOW,"PduR_LinIfTriggerTransmit: received request with id %d\n", LinTxPduId);\r
index a91d83685a0caa118981956cc5abf6debd11def8..19c33928fa7f63b3b8db2ed64991211219867fb5 100644 (file)
  *  General requirements\r
  */\r
 /** @req DCM054.Partially */ /** @req DCM055.Partially */ /** @req DCM110 */ /** @req DCM107 */ /** @req DCM332 */\r
-/** @req DCM012 */ /** @req DCM044 */ /** @req DCM364 */ /** @req DCM040 */ /** @req DCM041 */\r
+/** @req DCM012 */ /** @req DCM044 */ /** @req DCM364 */ /** @req DCM041 */\r
 /** @req DCM042 */ /** @req DCM049 */\r
 /** @req DCM033 */\r
 /** @req DCM171 */\r
 /** @req DCM333 */ /** @req DCM334 */\r
+/** @req DCM018 */\r
+/** @req DCM048 */\r
+ /** @req DCM040.Uninit */\r
+ /** @req DCM040.Param */\r
+ /** @req DCM043 */\r
+ /** @req DCM048 */\r
 \r
 #include <string.h>\r
 #include "Dcm.h"\r
 #include "Dcm_Internal.h"\r
 #include "Dem.h"\r
-#include "Det.h"\r
 #include "MemMap.h"\r
 //#include "SchM_Dcm.h"\r
 #include "ComM_Dcm.h"\r
@@ -67,19 +72,13 @@ static Dcm_StateType dcmState = DCM_UNINITIALIZED;
  */\r
 void Dcm_Init(void) /** @req DCM037 */\r
 {\r
-       if ((DCM_Config.Dsl == NULL) || (DCM_Config.Dsd == NULL) || (DCM_Config.Dsp == NULL)) {\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DCM, 0, DCM_INIT_ID, DCM_E_CONFIG_INVALID);\r
-#endif\r
+       VALIDATE_NO_RV((DCM_Config.Dsl != NULL) && (DCM_Config.Dsd != NULL) && (DCM_Config.Dsp != NULL), DCM_INIT_ID, DCM_E_CONFIG_INVALID);\r
 \r
-       }\r
-       else {\r
-               DslInit();\r
-               DsdInit();\r
-               DspInit();\r
+       DslInit();\r
+       DsdInit();\r
+       DspInit();\r
 \r
-               dcmState = DCM_INITIALIZED;\r
-       }\r
+       dcmState = DCM_INITIALIZED;\r
 \r
        return;\r
 }\r
@@ -90,6 +89,8 @@ void Dcm_Init(void) /** @req DCM037 */
  */\r
 void Dcm_MainFunction(void) /** @req DCM362 */\r
 {\r
+       VALIDATE_NO_RV(dcmState == DCM_INITIALIZED, DCM_MAIN_ID, DCM_E_UNINIT);\r
+\r
        DsdMain();\r
        DspMain();\r
        DslMain();\r
@@ -102,6 +103,9 @@ BufReq_ReturnType Dcm_ProvideRxBuffer(PduIdType dcmRxPduId, PduLengthType tpSduL
 {\r
        BufReq_ReturnType returnCode = BUFREQ_OK;\r
 \r
+       VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_PROVIDE_RX_BUFFER_ID, DCM_E_UNINIT, BUFREQ_NOT_OK);\r
+       VALIDATE_RV(dcmRxPduId < DCM_DSL_RX_PDU_ID_LIST_LENGTH, DCM_PROVIDE_RX_BUFFER_ID, DCM_E_PARAM, BUFREQ_NOT_OK);\r
+\r
        returnCode = DslProvideRxBufferToPdur(dcmRxPduId, tpSduLength, (const PduInfoType**)pduInfoPtr);\r
 \r
        return returnCode;\r
@@ -110,6 +114,9 @@ BufReq_ReturnType Dcm_ProvideRxBuffer(PduIdType dcmRxPduId, PduLengthType tpSduL
 \r
 void Dcm_RxIndication(PduIdType dcmRxPduId, NotifResultType result)\r
 {\r
+       VALIDATE_NO_RV(dcmState == DCM_INITIALIZED, DCM_RX_INDICATION_ID, DCM_E_UNINIT);\r
+       VALIDATE_NO_RV(dcmRxPduId < DCM_DSL_RX_PDU_ID_LIST_LENGTH, DCM_RX_INDICATION_ID, DCM_E_PARAM);\r
+\r
        DslRxIndicationFromPduR(dcmRxPduId, result);\r
 }\r
 \r
@@ -118,6 +125,8 @@ Std_ReturnType Dcm_GetActiveProtocol(Dcm_ProtocolType *protocolId)
 {\r
        Std_ReturnType returnCode = E_OK;\r
 \r
+       VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_GET_ACTIVE_PROTOCOL_ID, DCM_E_UNINIT, E_NOT_OK);\r
+\r
        returnCode = DslGetActiveProtocol(protocolId);\r
 \r
        return returnCode;\r
@@ -128,6 +137,8 @@ Std_ReturnType Dcm_GetSecurityLevel(Dcm_SecLevelType *secLevel)
 {\r
        Std_ReturnType returnCode = E_OK;\r
 \r
+       VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_GET_SECURITY_LEVEL_ID, DCM_E_UNINIT, E_NOT_OK);\r
+\r
        returnCode = DslGetSecurityLevel(secLevel);\r
 \r
        return returnCode;\r
@@ -138,6 +149,8 @@ Std_ReturnType Dcm_GetSesCtrlType(Dcm_SesCtrlType *sesCtrlType)
 {\r
        Std_ReturnType returnCode = E_OK;\r
 \r
+       VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_GET_SES_CTRL_TYPE_ID, DCM_E_UNINIT, E_NOT_OK);\r
+\r
        returnCode = DslGetSesCtrlType(sesCtrlType);\r
 \r
        return returnCode;\r
@@ -147,6 +160,9 @@ BufReq_ReturnType Dcm_ProvideTxBuffer(PduIdType dcmTxPduId, PduInfoType **pduInf
 {\r
        BufReq_ReturnType returnCode = BUFREQ_OK;\r
 \r
+       VALIDATE_RV(dcmState == DCM_INITIALIZED, DCM_PROVIDE_TX_BUFFER_ID, DCM_E_UNINIT, BUFREQ_NOT_OK);\r
+       VALIDATE_RV(dcmTxPduId < DCM_DSL_TX_PDU_ID_LIST_LENGTH, DCM_PROVIDE_TX_BUFFER_ID, DCM_E_PARAM, BUFREQ_NOT_OK);\r
+\r
        returnCode = DslProvideTxBuffer(dcmTxPduId, (const PduInfoType**)pduInfoPtr, length);\r
 \r
        return returnCode;\r
@@ -154,6 +170,9 @@ BufReq_ReturnType Dcm_ProvideTxBuffer(PduIdType dcmTxPduId, PduInfoType **pduInf
 \r
 void Dcm_TxConfirmation(PduIdType dcmTxPduId, NotifResultType result)\r
 {\r
+       VALIDATE_NO_RV(dcmState == DCM_INITIALIZED, DCM_TX_CONFIRMATION_ID, DCM_E_UNINIT);\r
+       VALIDATE_NO_RV(dcmTxPduId < DCM_DSL_TX_PDU_ID_LIST_LENGTH, DCM_TX_CONFIRMATION_ID, DCM_E_PARAM);\r
+\r
        DslTxConfirmation(dcmTxPduId, result);\r
 }\r
 \r
index d6a95fc45e82d967d28b80dad2fac10beb9dac23..61c0060a7f4ecda04615bb8ed5dd5fb638898a1e 100644 (file)
 /*\r
  *  General requirements\r
  */\r
+/** @req DCM600 */ // Generated by BSW builder\r
 \r
 \r
 #include <string.h>\r
 #include "Dcm.h"\r
 #include "Dcm_Internal.h"\r
-#include "Det.h"\r
 #include "MemMap.h"\r
 \r
 typedef struct {\r
index de2297410a81c527ee49354ee4e73fcf856aa73f..3d7278cdd518567cfe811894902df40ecbbfd138 100644 (file)
@@ -23,7 +23,6 @@
 #include "McuExtensions.h"\r
 #include "Dcm.h"\r
 #include "Dcm_Internal.h"\r
-#include "Det.h"\r
 #include "MemMap.h"\r
 #include "ComM_Dcm.h"\r
 #include "PduR_Dcm.h"\r
@@ -103,8 +102,7 @@ static inline void stopS3SessionTimer(Dcm_DslRunTimeProtocolParametersType *runt
 //     This function implements the requirement DCM139 when\r
 //     transition from one session to another.\r
 //\r
-static void changeDiagnosticSession(Dcm_DslRunTimeProtocolParametersType *runtime,\r
-               Dcm_SesCtrlType newSession) {\r
+static void changeDiagnosticSession(Dcm_DslRunTimeProtocolParametersType *runtime, Dcm_SesCtrlType newSession) {\r
 \r
        /** @req DCM139 */\r
 \r
@@ -120,7 +118,7 @@ static void changeDiagnosticSession(Dcm_DslRunTimeProtocolParametersType *runtim
                break;\r
 \r
        default:\r
-               // TODO: Log this error.\r
+               DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_CHANGE_DIAGNOSTIC_SESSION_ID, DCM_E_PARAM);\r
                DEBUG(DEBUG_MEDIUM, "Old session invalid");\r
                break;\r
        }\r
@@ -135,7 +133,7 @@ static void changeDiagnosticSession(Dcm_DslRunTimeProtocolParametersType *runtim
                break;\r
 \r
        default:\r
-               // TODO: Log this error.\r
+               DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_CHANGE_DIAGNOSTIC_SESSION_ID, DCM_E_PARAM);\r
                DEBUG(DEBUG_MEDIUM, "New session invalid");\r
                break;\r
        }\r
index a8157556bbc7d5bb62392b334ea6d1dc3d7135aa..e4ea1ae246d7d1f77fbef363d1e3a321ac8c9ff8 100644 (file)
@@ -27,7 +27,6 @@
 #include "Dcm.h"\r
 #include "Dcm_Internal.h"\r
 #include "Dem.h"\r
-#include "Det.h"\r
 #include "MemMap.h"\r
 #if defined(USE_MCU)\r
 #include "Mcu.h"\r
@@ -271,9 +270,6 @@ static Dcm_NegativeResponseCodeType udsReadDtcInfoSub_0x01_0x07_0x11_0x12(const
 \r
        default:\r
                setDtcFilterResult = DEM_WRONG_FILTER;\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DCM, 0, DCM_UDS_READ_DTC_INFO, DCM_E_UNEXPECTED_PARAM);\r
-#endif\r
                break;\r
        }\r
 \r
@@ -346,9 +342,6 @@ static Dcm_NegativeResponseCodeType udsReadDtcInfoSub_0x02_0x0A_0x0F_0x13_0x15(c
 \r
        default:\r
                setDtcFilterResult = DEM_WRONG_FILTER;\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DCM, 0, DCM_UDS_READ_DTC_INFO, DCM_E_UNEXPECTED_PARAM);\r
-#endif\r
                break;\r
        }\r
 \r
@@ -435,9 +428,6 @@ static Dcm_NegativeResponseCodeType udsReadDtcInfoSub_0x06_0x10(const PduInfoTyp
        default:\r
                responseCode = DCM_E_SUBFUNCTIONNOTSUPPORTED;\r
                dtcOrigin = 0;\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DCM, 0, DCM_UDS_READ_DTC_INFO, DCM_E_UNEXPECTED_PARAM);\r
-#endif\r
                break;\r
        }\r
 \r
@@ -930,7 +920,6 @@ void DspUdsSecurityAccess(const PduInfoType *pduRxData, PduInfoType *pduTxData)
        if ((pduRxData->SduDataPtr[1] >= 0x01) && (pduRxData->SduDataPtr[1] <= 0x42)) {\r
                boolean isRequestSeed = pduRxData->SduDataPtr[1] & 0x01;\r
                Dcm_SecLevelType requestedSecurityLevel = (pduRxData->SduDataPtr[1]-1)/2;\r
-               Std_ReturnType getSeedResult;\r
                Dcm_NegativeResponseCodeType getSeedErrorCode;\r
 \r
                if (isRequestSeed) {\r
@@ -953,18 +942,23 @@ void DspUdsSecurityAccess(const PduInfoType *pduRxData, PduInfoType *pduTxData)
                                        }\r
                                        else {\r
                                                // New security level ask for seed\r
-                                               getSeedResult = securityRow->GetSeed(&pduRxData->SduDataPtr[2], &pduTxData->SduDataPtr[2], &getSeedErrorCode); /** @req DCM324.RequestSeed */\r
-                                               if ((getSeedResult == E_OK) && (getSeedErrorCode == E_OK)) {\r
-                                                       // Everything ok add sub function to tx message and send it.\r
-                                                       pduTxData->SduDataPtr[1] = pduRxData->SduDataPtr[1];\r
-                                                       pduTxData->SduLength = 2 + securityRow->DspSecuritySeedSize;\r
-\r
-                                                       dspUdsSecurityAccesData.reqSecLevel = requestedSecurityLevel;\r
-                                                       dspUdsSecurityAccesData.reqSecLevelRef = securityRow;\r
-                                                       dspUdsSecurityAccesData.reqInProgress = TRUE;\r
-                                               }\r
-                                               else {\r
-                                                       // GetSeed returned not ok\r
+                                               if (securityRow->GetSeed != NULL) {\r
+                                                       Std_ReturnType getSeedResult;\r
+                                                       getSeedResult = securityRow->GetSeed(&pduRxData->SduDataPtr[2], &pduTxData->SduDataPtr[2], &getSeedErrorCode); /** @req DCM324.RequestSeed */\r
+                                                       if ((getSeedResult == E_OK) && (getSeedErrorCode == E_OK)) {\r
+                                                               // Everything ok add sub function to tx message and send it.\r
+                                                               pduTxData->SduDataPtr[1] = pduRxData->SduDataPtr[1];\r
+                                                               pduTxData->SduLength = 2 + securityRow->DspSecuritySeedSize;\r
+\r
+                                                               dspUdsSecurityAccesData.reqSecLevel = requestedSecurityLevel;\r
+                                                               dspUdsSecurityAccesData.reqSecLevelRef = securityRow;\r
+                                                               dspUdsSecurityAccesData.reqInProgress = TRUE;\r
+                                                       }\r
+                                                       else {\r
+                                                               // GetSeed returned not ok\r
+                                                               responseCode = DCM_E_INCORRECTMESSAGELENGTHORINVALIDFORMAT;\r
+                                                       }\r
+                                               } else {\r
                                                        responseCode = DCM_E_INCORRECTMESSAGELENGTHORINVALIDFORMAT;\r
                                                }\r
                                        }\r
@@ -984,17 +978,21 @@ void DspUdsSecurityAccess(const PduInfoType *pduRxData, PduInfoType *pduTxData)
                        if (dspUdsSecurityAccesData.reqInProgress) {\r
                                if (pduRxData->SduLength == (2 + dspUdsSecurityAccesData.reqSecLevelRef->DspSecurityKeySize)) { /** @req DCM321.SendKey */\r
                                        if (requestedSecurityLevel == dspUdsSecurityAccesData.reqSecLevel) {\r
-                                               Std_ReturnType compareKeyResult;\r
-                                               compareKeyResult = dspUdsSecurityAccesData.reqSecLevelRef->CompareKey(&pduRxData->SduDataPtr[2]); /** @req DCM324.SendKey */\r
-                                               if (compareKeyResult == E_OK) {\r
-                                                       // Request accepted\r
-                                                       // Kill timer\r
-                                                       DslSetSecurityLevel(dspUdsSecurityAccesData.reqSecLevelRef->DspSecurityLevel); /** @req DCM325 */\r
-                                                       dspUdsSecurityAccesData.reqInProgress = FALSE;\r
-                                                       pduTxData->SduDataPtr[1] = pduRxData->SduDataPtr[1];\r
-                                                       pduTxData->SduLength = 2;\r
-                                               }\r
-                                               else {\r
+                                               if (dspUdsSecurityAccesData.reqSecLevelRef->CompareKey != NULL) {\r
+                                                       Std_ReturnType compareKeyResult;\r
+                                                       compareKeyResult = dspUdsSecurityAccesData.reqSecLevelRef->CompareKey(&pduRxData->SduDataPtr[2]); /** @req DCM324.SendKey */\r
+                                                       if (compareKeyResult == E_OK) {\r
+                                                               // Request accepted\r
+                                                               // Kill timer\r
+                                                               DslSetSecurityLevel(dspUdsSecurityAccesData.reqSecLevelRef->DspSecurityLevel); /** @req DCM325 */\r
+                                                               dspUdsSecurityAccesData.reqInProgress = FALSE;\r
+                                                               pduTxData->SduDataPtr[1] = pduRxData->SduDataPtr[1];\r
+                                                               pduTxData->SduLength = 2;\r
+                                                       }\r
+                                                       else {\r
+                                                               responseCode = DCM_E_CONDITIONSNOTCORRECT;\r
+                                                       }\r
+                                               } else {\r
                                                        responseCode = DCM_E_CONDITIONSNOTCORRECT;\r
                                                }\r
                                        }\r
@@ -1099,9 +1097,7 @@ void DspDcmConfirmation(PduIdType confirmPduId)
 #if defined(USE_MCU) && ( MCU_PERFORM_RESET_API == STD_ON )\r
                        Mcu_PerformReset();\r
 #else\r
-#if (DCM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DCM, 0, DCM_UDS_RESET, DCM_E_NOT_SUPPORTED);\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DCM, 0, DCM_UDS_RESET_ID, DCM_E_NOT_SUPPORTED);\r
 #endif\r
                }\r
        }\r
index 4d4a7face5de6e6b8187da629acbcf81b94371c7..8639c931773cbd9100f08fb4b9206ba556c8dc4e 100644 (file)
 #ifndef DCM_INTERNAL_H_\r
 #define DCM_INTERNAL_H_\r
 \r
+\r
+#if  ( DCM_DEV_ERROR_DETECT == STD_ON )\r
+#include "Det.h"\r
+#define VALIDATE(_exp,_api,_err ) \\r
+        if( !(_exp) ) { \\r
+          Det_ReportError(MODULE_ID_DCM, 0, _api, _err); \\r
+          return E_NOT_OK; \\r
+        }\r
+\r
+#define VALIDATE_RV(_exp,_api,_err,_rv ) \\r
+        if( !(_exp) ) { \\r
+          Det_ReportError(MODULE_ID_DCM, 0, _api, _err); \\r
+          return _rv; \\r
+        }\r
+\r
+#define VALIDATE_NO_RV(_exp,_api,_err ) \\r
+  if( !(_exp) ) { \\r
+          Det_ReportError(MODULE_ID_DCM, 0, _api, _err); \\r
+          return; \\r
+        }\r
+#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x, _y, _z, _q)\r
+\r
+#else\r
+#define VALIDATE(_exp,_api,_err )\r
+#define VALIDATE_RV(_exp,_api,_err,_rv )\r
+#define VALIDATE_NO_RV(_exp,_api,_err )\r
+#define DET_REPORTERROR(_x,_y,_z,_q)\r
+#endif\r
+\r
+\r
 // SID table\r
 #define SID_DIAGNOSTIC_SESSION_CONTROL                 0x10\r
 #define SID_ECU_RESET                                                  0x11\r
index bf7a2bd2d500bf986612618cf89506e602024a85..32cd6c124ee0061a8a355481e8d491612703e3c1 100644 (file)
 /** @req DEM113 */ /** @req DEM174 */\r
 /** @req DEM286 */\r
 /** @req DEM267 */\r
+/** @req DEM364 */\r
+/** @req DEM114 */\r
+/** @req DEM124 */\r
+/** @req DEM370 */\r
+\r
 \r
 \r
 #include <string.h>\r
 #include "Dem.h"\r
-#include "Det.h"\r
 //#include "Fim.h"\r
 //#include "Nvm.h"\r
 //#include "SchM_Dem.h"\r
 #define DEBOUNCE_FDC_TEST_FAILED  127\r
 #define DEBOUNCE_FDC_TEST_PASSED -128\r
 \r
+#if  ( DEM_DEV_ERROR_DETECT == STD_ON )\r
+#include "Det.h"\r
+/** @req DEM117 */\r
+#define VALIDATE(_exp,_api,_err ) \\r
+        if( !(_exp) ) { \\r
+          Det_ReportError(MODULE_ID_DEM, 0, _api, _err); \\r
+          return E_NOT_OK; \\r
+        }\r
+\r
+#define VALIDATE_RV(_exp,_api,_err,_rv ) \\r
+        if( !(_exp) ) { \\r
+          Det_ReportError(MODULE_ID_DEM, 0, _api, _err); \\r
+          return _rv; \\r
+        }\r
+\r
+#define VALIDATE_NO_RV(_exp,_api,_err ) \\r
+  if( !(_exp) ) { \\r
+          Det_ReportError(MODULE_ID_DEM, 0, _api, _err); \\r
+          return; \\r
+        }\r
+#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x, _y, _z, _q)\r
+\r
+#else\r
+#define VALIDATE(_exp,_api,_err )\r
+#define VALIDATE_RV(_exp,_api,_err,_rv )\r
+#define VALIDATE_NO_RV(_exp,_api,_err )\r
+#define DET_REPORTERROR(_x,_y,_z,_q)\r
+#endif\r
+\r
+\r
 /*\r
  * Local types\r
  */\r
@@ -334,9 +368,7 @@ static Dem_EventStatusType preDebounceNone(Dem_EventStatusType reportedStatus, E
 \r
        default:\r
                // TODO: What to do with PREFAIL and PREPASSED on no debouncing?\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_PREDEBOUNCE_NONE_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_PREDEBOUNCE_NONE_ID, DEM_E_PARAM_DATA);\r
                break;\r
        }\r
 \r
@@ -391,9 +423,7 @@ static Dem_EventStatusType preDebounceCounterBased(Dem_EventStatusType reportedS
                break;\r
 \r
        default:\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_PREDEBOUNCE_COUNTER_BASED_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_PREDEBOUNCE_COUNTER_BASED_ID, DEM_E_PARAM_DATA);\r
                break;\r
 \r
        }\r
@@ -444,9 +474,7 @@ static void updateEventStatusRec(const Dem_EventParameterType *eventParam, Dem_E
                }\r
                else {\r
                        // Error: Event status buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_UPDATE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_UPDATE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL);\r
                }\r
        }\r
 \r
@@ -465,9 +493,7 @@ static void updateEventStatusRec(const Dem_EventParameterType *eventParam, Dem_E
 \r
                        default:\r
                                // Don't know how to handle this.\r
-       #if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                               Det_ReportError(MODULE_ID_DEM, 0, DEM_UPDATE_EVENT_STATUS_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-       #endif\r
+                               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_UPDATE_EVENT_STATUS_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
                                break;\r
                        }\r
                }\r
@@ -543,9 +569,7 @@ static void mergeEventStatusRec(EventRecType *eventRec)
                }\r
                else {\r
                        // Error: Event status buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_MERGE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_MERGE_EVENT_STATUS_ID, DEM_E_EVENT_STATUS_BUFF_FULL);\r
                }\r
        }\r
 \r
@@ -711,9 +735,7 @@ static void getExtendedData(const Dem_EventParameterType *eventParam, ExtDataRec
                        }\r
                        else {\r
                                // Error: Size of extended data record is bigger than reserved space.\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                               Det_ReportError(MODULE_ID_DEM, 0, DEM_GET_EXTENDED_DATA_ID, DEM_E_EXT_DATA_TOO_BIG); /** @req DEM117 */\r
-#endif\r
+                               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GET_EXTENDED_DATA_ID, DEM_E_EXT_DATA_TOO_BIG);\r
                                break;  // Break the loop\r
                        }\r
                }\r
@@ -759,9 +781,7 @@ static void storeExtendedDataPreInit(const Dem_EventParameterType *eventParam, E
                }\r
                else {\r
                        // Error: Pre init extended data buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_STORE_EXT_DATA_PRE_INIT_ID, DEM_E_PRE_INIT_EXT_DATA_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_STORE_EXT_DATA_PRE_INIT_ID, DEM_E_PRE_INIT_EXT_DATA_BUFF_FULL);\r
                }\r
        }\r
 \r
@@ -799,9 +819,7 @@ static void storeEventPriMem(const Dem_EventParameterType *eventParam, EventStat
                }\r
                else {\r
                        // Error: Pri mem event buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_STORE_EVENT_PRI_MEM_ID, DEM_E_PRI_MEM_EVENT_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_STORE_EVENT_PRI_MEM_ID, DEM_E_PRI_MEM_EVENT_BUFF_FULL);\r
                }\r
        }\r
 \r
@@ -852,9 +870,7 @@ static void storeEventEvtMem(const Dem_EventParameterType *eventParam, EventStat
                case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
                case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
                        // Not yet supported\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
                        break;\r
                default:\r
                        break;\r
@@ -888,9 +904,7 @@ static void storeExtendedDataPriMem(const Dem_EventParameterType *eventParam, Ex
                }\r
                else {\r
                        // Error: Pri mem extended data buffer full\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_STORE_EXT_DATA_PRI_MEM_ID, DEM_E_PRI_MEM_EXT_DATA_BUFF_FULL); /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_STORE_EXT_DATA_PRI_MEM_ID, DEM_E_PRI_MEM_EXT_DATA_BUFF_FULL);\r
                }\r
        }\r
 \r
@@ -939,9 +953,7 @@ static void storeExtendedDataEvtMem(const Dem_EventParameterType *eventParam, Ex
                case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
                case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
                        // Not yet supported\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
                        break;\r
 \r
                default:\r
@@ -1034,9 +1046,7 @@ static void storeFreezeFrameDataEvtMem(const Dem_EventParameterType *eventParam,
                case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
                case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
                        // Not yet supported\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GLOBAL_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
                        break;\r
                default:\r
                        break;\r
@@ -1289,15 +1299,11 @@ static Std_ReturnType getFaultDetectionCounter(Dem_EventIdType eventId, sint8 *c
 \r
                        case DEM_PRE_DEBOUNCE_FREQUENCY_BASED:\r
                        case DEM_PRE_DEBOUNCE_TIME_BASED:\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                               Det_ReportError(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
+                               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
                                break;\r
 \r
                        default:\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                               Det_ReportError(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+                               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_PARAM_DATA);\r
                                break;\r
                        }\r
                }\r
@@ -1344,17 +1350,13 @@ static Std_ReturnType setOperationCycleState(Dem_OperationCycleIdType operationC
                        }\r
                        break;\r
                default:\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_PARAM_DATA);\r
                        returnCode = E_NOT_OK;\r
                        break;\r
                }\r
        }\r
        else {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_PARAM_DATA); /** @req DEM117 */\r
-#endif\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_PARAM_DATA);\r
                returnCode = E_NOT_OK;\r
                }\r
 \r
@@ -1392,14 +1394,9 @@ void Dem_PreInit(void)
        /** @req DEM180 */\r
        int i, j;\r
 \r
-       if (DEM_Config.ConfigSet == NULL) {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_PREINIT_ID, DEM_E_CONFIG_PTR_INVALID); /** @req DEM117 */\r
-#endif\r
-               return;\r
-       } else {\r
-               configSet = DEM_Config.ConfigSet;\r
-       }\r
+       VALIDATE_NO_RV(DEM_Config.ConfigSet != NULL, DEM_PREINIT_ID, DEM_E_CONFIG_PTR_INVALID);\r
+\r
+       configSet = DEM_Config.ConfigSet;\r
 \r
        // Initializion of operation cycle states.\r
        for (i = 0; i < DEM_OPERATION_CYCLE_ID_ENDMARK; i++) {\r
@@ -1575,10 +1572,8 @@ Std_ReturnType Dem_SetEventStatus(Dem_EventIdType eventId, Dem_EventStatusType e
        }\r
        else\r
        {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_SETEVENTSTATUS_ID, DEM_E_UNINIT); /** @req DEM124.SetEventStatus */ /** @req DEM117 */\r
-#endif\r
-               returnCode = E_NOT_OK; /** @req DEM370.SetEventStatus */\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETEVENTSTATUS_ID, DEM_E_UNINIT);\r
+               returnCode = E_NOT_OK;\r
        }\r
 \r
        return returnCode;\r
@@ -1599,10 +1594,8 @@ Std_ReturnType Dem_ResetEventStatus(Dem_EventIdType eventId) /** @req DEM331 */
        }\r
        else\r
        {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_RESETEVENTSTATUS_ID, DEM_E_UNINIT); /** @req DEM124.ResetEventStatus */ /** @req DEM117 */\r
-#endif\r
-               returnCode = E_NOT_OK; /** @req DEM370.ResetEventStatus */\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_RESETEVENTSTATUS_ID, DEM_E_UNINIT);\r
+               returnCode = E_NOT_OK;\r
        }\r
 \r
        return returnCode;\r
@@ -1623,10 +1616,8 @@ Std_ReturnType Dem_GetEventStatus(Dem_EventIdType eventId, Dem_EventStatusExtend
        }\r
        else\r
        {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_GETEVENTSTATUS_ID, DEM_E_UNINIT); /** @req DEM124.GetEventStatus */ /** @req DEM117 */\r
-#endif\r
-               returnCode = E_NOT_OK; /** @req DEM370.GetEventStatus */\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEVENTSTATUS_ID, DEM_E_UNINIT);\r
+               returnCode = E_NOT_OK;\r
        }\r
 \r
        return returnCode;\r
@@ -1647,10 +1638,8 @@ Std_ReturnType Dem_GetEventFailed(Dem_EventIdType eventId, boolean *eventFailed)
        }\r
        else\r
        {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_GETEVENTFAILED_ID, DEM_E_UNINIT); /** @req DEM124.GetEventFailed */ /** @req DEM117 */\r
-#endif\r
-               returnCode = E_NOT_OK; /** @req DEM370.GetEventFailed */\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEVENTFAILED_ID, DEM_E_UNINIT);\r
+               returnCode = E_NOT_OK;\r
        }\r
 \r
        return returnCode;\r
@@ -1671,10 +1660,8 @@ Std_ReturnType Dem_GetEventTested(Dem_EventIdType eventId, boolean *eventTested)
        }\r
        else\r
        {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_GETEVENTTESTED_ID, DEM_E_UNINIT); /** @req DEM124.GetEventTested */ /** @req DEM117 */\r
-#endif\r
-               returnCode = E_NOT_OK; /** @req DEM370.GetEventTested */\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEVENTTESTED_ID, DEM_E_UNINIT);\r
+               returnCode = E_NOT_OK;\r
        }\r
 \r
        return returnCode;\r
@@ -1695,10 +1682,8 @@ Std_ReturnType Dem_GetFaultDetectionCounter(Dem_EventIdType eventId, sint8 *coun
        }\r
        else\r
        {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_UNINIT); /** @req DEM124.GetFaultDetectionCounter */ /** @req DEM117 */\r
-#endif\r
-               returnCode = E_NOT_OK; /** @req DEM370.GetFaultDetectionCounter */\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETFAULTDETECTIONCOUNTER_ID, DEM_E_UNINIT);\r
+               returnCode = E_NOT_OK;\r
        }\r
 \r
        return returnCode;\r
@@ -1720,10 +1705,8 @@ Std_ReturnType Dem_SetOperationCycleState(Dem_OperationCycleIdType operationCycl
        }\r
        else\r
        {\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-               Det_ReportError(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_UNINIT); /** @req DEM124.SetOperationCycleState */ /** @req DEM117 */\r
-#endif\r
-               returnCode = E_NOT_OK; /** @req DEM370.SetOperationCycleState */\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETOPERATIONCYCLESTATE_ID, DEM_E_UNINIT);\r
+               returnCode = E_NOT_OK;\r
        }\r
 \r
        return returnCode;\r
@@ -1739,18 +1722,26 @@ Std_ReturnType Dem_GetDTCOfEvent(Dem_EventIdType eventId, Dem_DTCKindType dtcKin
        Std_ReturnType returnCode = E_NO_DTC_AVAILABLE;\r
        const Dem_EventParameterType *eventParam;\r
 \r
-       lookupEventIdParameter(eventId, &eventParam);\r
+       if (demState == DEM_INITIALIZED) // No action is taken if the module is not started\r
+       {\r
+               lookupEventIdParameter(eventId, &eventParam);\r
 \r
-       if (eventParam != NULL) {\r
-               if (checkDtcKind(dtcKind, eventParam)) {\r
-                       if (eventParam->DTCClassRef != NULL) {\r
-                               *dtcOfEvent = eventParam->DTCClassRef->DTC; /** @req DEM269 */\r
-                               returnCode = E_OK;\r
+               if (eventParam != NULL) {\r
+                       if (checkDtcKind(dtcKind, eventParam)) {\r
+                               if (eventParam->DTCClassRef != NULL) {\r
+                                       *dtcOfEvent = eventParam->DTCClassRef->DTC; /** @req DEM269 */\r
+                                       returnCode = E_OK;\r
+                               }\r
                        }\r
                }\r
+               else {\r
+                       // Event Id not found\r
+                       returnCode = E_NOT_OK;\r
+               }\r
        }\r
-       else {\r
-               // Event Id not found\r
+       else\r
+       {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETDTCOFEVENT_ID, DEM_UNINITIALIZED);\r
                returnCode = E_NOT_OK;\r
        }\r
 \r
@@ -1784,9 +1775,8 @@ void Dem_ReportErrorStatus( Dem_EventIdType eventId, Dem_EventStatusType eventSt
                case DEM_UNINITIALIZED:\r
                default:\r
                        // Uninitialized can not do anything\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_REPORTERRORSTATUS_ID, DEM_E_UNINIT); /** @req DEM124.ReportErrorStatus */ /** @req DEM364 */ /** @req DEM117 */\r
-#endif\r
+                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_REPORTERRORSTATUS_ID, DEM_E_UNINIT);\r
+\r
                        break;\r
 \r
        } // switch (demState)\r
@@ -1825,35 +1815,37 @@ Dem_ReturnSetDTCFilterType Dem_SetDTCFilter(uint8 dtcStatusMask,
                Dem_DTCOriginType dtcOrigin,\r
                Dem_FilterWithSeverityType filterWithSeverity,\r
                Dem_DTCSeverityType dtcSeverityMask,\r
-               Dem_FilterForFDCType filterForFaultDetectionCounter) {\r
-\r
-       Dem_ReturnSetDTCFilterType returnCode = DEM_WRONG_FILTER;\r
+               Dem_FilterForFDCType filterForFaultDetectionCounter)\r
+{\r
+       Dem_ReturnSetDTCFilterType returnCode = DEM_FILTER_ACCEPTED;\r
 \r
-       // Check dtcKind parameter\r
-       if ((dtcKind == DEM_DTC_KIND_ALL_DTCS) || (dtcKind ==  DEM_DTC_KIND_EMISSION_REL_DTCS)) {\r
+       if (demState == DEM_INITIALIZED) {\r
+               // Check dtcKind parameter\r
+               VALIDATE_RV((dtcKind == DEM_DTC_KIND_ALL_DTCS) || (dtcKind == DEM_DTC_KIND_EMISSION_REL_DTCS), DEM_SETDTCFILTER_ID, DEM_E_PARAM_DATA, DEM_WRONG_FILTER);\r
 \r
                // Check dtcOrigin parameter\r
-               if ((dtcOrigin == DEM_DTC_ORIGIN_SECONDARY_MEMORY) || (dtcOrigin == DEM_DTC_ORIGIN_PRIMARY_MEMORY)\r
-                       || (dtcOrigin == DEM_DTC_ORIGIN_PERMANENT_MEMORY) || (dtcOrigin == DEM_DTC_ORIGIN_MIRROR_MEMORY)) {\r
-\r
-                       // Check filterWithSeverity and dtcSeverityMask parameter\r
-                       if ((filterWithSeverity == DEM_FILTER_WITH_SEVERITY_NO)\r
-                               || ((filterWithSeverity == DEM_FILTER_WITH_SEVERITY_YES) && !(dtcSeverityMask & ~(DEM_SEVERITY_MAINTENANCE_ONLY | DEM_SEVERITY_CHECK_AT_NEXT_FALT | DEM_SEVERITY_CHECK_IMMEDIATELY)))){\r
-\r
-                               // Check filterForFaultDetectionCounter parameter\r
-                               if ((filterForFaultDetectionCounter == DEM_FILTER_FOR_FDC_YES) || (filterForFaultDetectionCounter ==  DEM_FILTER_FOR_FDC_NO)) {\r
-                                       // Yes all parameters correct, set the new filters.  /** @req DEM057 */\r
-                                       dtcFilter.dtcStatusMask = dtcStatusMask;\r
-                                       dtcFilter.dtcKind = dtcKind;\r
-                                       dtcFilter.dtcOrigin = dtcOrigin;\r
-                                       dtcFilter.filterWithSeverity = filterWithSeverity;\r
-                                       dtcFilter.dtcSeverityMask = dtcSeverityMask;\r
-                                       dtcFilter.filterForFaultDetectionCounter = filterForFaultDetectionCounter;\r
-                                       dtcFilter.faultIndex = DEM_MAX_NUMBER_EVENT;\r
-                                       returnCode = DEM_FILTER_ACCEPTED;\r
-                               }\r
-                       }\r
-               }\r
+               VALIDATE_RV((dtcOrigin == DEM_DTC_ORIGIN_SECONDARY_MEMORY) || (dtcOrigin == DEM_DTC_ORIGIN_PRIMARY_MEMORY)\r
+                                       || (dtcOrigin == DEM_DTC_ORIGIN_PERMANENT_MEMORY) || (dtcOrigin == DEM_DTC_ORIGIN_MIRROR_MEMORY), DEM_SETDTCFILTER_ID, DEM_E_PARAM_DATA, DEM_WRONG_FILTER);\r
+\r
+               // Check filterWithSeverity and dtcSeverityMask parameter\r
+               VALIDATE_RV(((filterWithSeverity == DEM_FILTER_WITH_SEVERITY_NO)\r
+                                       || ((filterWithSeverity == DEM_FILTER_WITH_SEVERITY_YES)\r
+                                               && !(dtcSeverityMask & ~(DEM_SEVERITY_MAINTENANCE_ONLY | DEM_SEVERITY_CHECK_AT_NEXT_FALT | DEM_SEVERITY_CHECK_IMMEDIATELY)))), DEM_SETDTCFILTER_ID, DEM_E_PARAM_DATA, DEM_WRONG_FILTER);\r
+\r
+               // Check filterForFaultDetectionCounter parameter\r
+               VALIDATE_RV((filterForFaultDetectionCounter == DEM_FILTER_FOR_FDC_YES) || (filterForFaultDetectionCounter ==  DEM_FILTER_FOR_FDC_NO), DEM_SETDTCFILTER_ID, DEM_E_PARAM_DATA, DEM_WRONG_FILTER);\r
+\r
+               // Yes all parameters correct, set the new filters.  /** @req DEM057 */\r
+               dtcFilter.dtcStatusMask = dtcStatusMask;\r
+               dtcFilter.dtcKind = dtcKind;\r
+               dtcFilter.dtcOrigin = dtcOrigin;\r
+               dtcFilter.filterWithSeverity = filterWithSeverity;\r
+               dtcFilter.dtcSeverityMask = dtcSeverityMask;\r
+               dtcFilter.filterForFaultDetectionCounter = filterForFaultDetectionCounter;\r
+               dtcFilter.faultIndex = DEM_MAX_NUMBER_EVENT;\r
+       } else {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_SETDTCFILTER_ID, DEM_E_UNINIT);\r
+               returnCode = DEM_WRONG_FILTER;\r
        }\r
 \r
        return returnCode;\r
@@ -1868,22 +1860,27 @@ Dem_ReturnGetStatusOfDTCType Dem_GetStatusOfDTC(uint32 dtc, Dem_DTCKindType dtcK
        Dem_ReturnGetStatusOfDTCType returnCode = DEM_STATUS_FAILED;\r
        EventStatusRecType *eventRec;\r
 \r
-       if (lookupDtcEvent(dtc, &eventRec)) {\r
-               if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
-                       if (checkDtcOrigin(dtcOrigin,eventRec->eventParamRef)) {\r
-                               *status = eventRec->eventStatusExtended; /** @req DEM059 */\r
-                               returnCode = DEM_STATUS_OK;\r
+       if (demState == DEM_INITIALIZED) {\r
+               if (lookupDtcEvent(dtc, &eventRec)) {\r
+                       if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
+                               if (checkDtcOrigin(dtcOrigin,eventRec->eventParamRef)) {\r
+                                       *status = eventRec->eventStatusExtended; /** @req DEM059 */\r
+                                       returnCode = DEM_STATUS_OK;\r
+                               }\r
+                               else {\r
+                                       returnCode = DEM_STATUS_WRONG_DTCORIGIN; /** @req DEM171 */\r
+                               }\r
                        }\r
                        else {\r
-                               returnCode = DEM_STATUS_WRONG_DTCORIGIN; /** @req DEM171 */\r
+                               returnCode = DEM_STATUS_WRONG_DTCKIND;\r
                        }\r
                }\r
                else {\r
-                       returnCode = DEM_STATUS_WRONG_DTCKIND;\r
+                       returnCode = DEM_STATUS_WRONG_DTC; /** @req DEM172 */\r
                }\r
-       }\r
-       else {\r
-               returnCode = DEM_STATUS_WRONG_DTC; /** @req DEM172 */\r
+       } else {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETSTATUSOFDTC_ID, DEM_E_UNINIT);\r
+               returnCode = DEM_STATUS_FAILED;\r
        }\r
 \r
        return returnCode;\r
@@ -1897,24 +1894,30 @@ Dem_ReturnGetStatusOfDTCType Dem_GetStatusOfDTC(uint32 dtc, Dem_DTCKindType dtcK
 Dem_ReturnGetNumberOfFilteredDTCType Dem_GetNumberOfFilteredDtc(uint16 *numberOfFilteredDTC) {\r
        uint16 i;\r
        uint16 numberOfFaults = 0;\r
+       Dem_ReturnGetNumberOfFilteredDTCType returnCode = DEM_NUMBER_OK;\r
 \r
-       //Dem_DisableEventStatusUpdate();\r
+       if (demState == DEM_INITIALIZED) {\r
+               //Dem_DisableEventStatusUpdate();\r
 \r
-       for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
-               if (eventStatusBuffer[i].eventId != DEM_EVENT_ID_NULL) {\r
-                       if (matchEventWithDtcFilter(&eventStatusBuffer[i])) {\r
-                               if (eventStatusBuffer[i].eventParamRef->DTCClassRef != NULL) {\r
-                                       numberOfFaults++;\r
+               for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
+                       if (eventStatusBuffer[i].eventId != DEM_EVENT_ID_NULL) {\r
+                               if (matchEventWithDtcFilter(&eventStatusBuffer[i])) {\r
+                                       if (eventStatusBuffer[i].eventParamRef->DTCClassRef != NULL) {\r
+                                               numberOfFaults++;\r
+                                       }\r
                                }\r
                        }\r
                }\r
-       }\r
 \r
-       //Dem_EnableEventStatusUpdate();\r
+               //Dem_EnableEventStatusUpdate();\r
 \r
-       *numberOfFilteredDTC = numberOfFaults; /** @req DEM061 */\r
+               *numberOfFilteredDTC = numberOfFaults; /** @req DEM061 */\r
+       } else {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETNUMBEROFFILTEREDDTC_ID, DEM_E_UNINIT);\r
+               returnCode = DEM_NUMBER_FAILED;\r
+       }\r
 \r
-       return DEM_NUMBER_OK;\r
+       return returnCode;\r
 }\r
 \r
 \r
@@ -1927,22 +1930,27 @@ Dem_ReturnGetNextFilteredDTCType Dem_GetNextFilteredDTC(uint32 *dtc, Dem_EventSt
        Dem_ReturnGetNextFilteredDTCType returnCode = DEM_FILTERED_OK;\r
        boolean dtcFound = FALSE;\r
 \r
-       // TODO: This job should be done in an more advanced way according to Dem217\r
-       while (!dtcFound && (dtcFilter.faultIndex != 0)) {\r
-               dtcFilter.faultIndex--;\r
-               if (eventStatusBuffer[dtcFilter.faultIndex].eventId != DEM_EVENT_ID_NULL) {\r
-                       if (matchEventWithDtcFilter(&eventStatusBuffer[dtcFilter.faultIndex])) {\r
-                               if (eventStatusBuffer[dtcFilter.faultIndex].eventParamRef->DTCClassRef != NULL) {\r
-                                       *dtc = eventStatusBuffer[dtcFilter.faultIndex].eventParamRef->DTCClassRef->DTC; /** @req DEM216 */\r
-                                       *dtcStatus = eventStatusBuffer[dtcFilter.faultIndex].eventStatusExtended;\r
-                                       dtcFound = TRUE;\r
+       if (demState == DEM_INITIALIZED) {\r
+               // TODO: This job should be done in an more advanced way according to Dem217\r
+               while (!dtcFound && (dtcFilter.faultIndex != 0)) {\r
+                       dtcFilter.faultIndex--;\r
+                       if (eventStatusBuffer[dtcFilter.faultIndex].eventId != DEM_EVENT_ID_NULL) {\r
+                               if (matchEventWithDtcFilter(&eventStatusBuffer[dtcFilter.faultIndex])) {\r
+                                       if (eventStatusBuffer[dtcFilter.faultIndex].eventParamRef->DTCClassRef != NULL) {\r
+                                               *dtc = eventStatusBuffer[dtcFilter.faultIndex].eventParamRef->DTCClassRef->DTC; /** @req DEM216 */\r
+                                               *dtcStatus = eventStatusBuffer[dtcFilter.faultIndex].eventStatusExtended;\r
+                                               dtcFound = TRUE;\r
+                                       }\r
                                }\r
                        }\r
                }\r
-       }\r
 \r
-       if (!dtcFound) {\r
-               dtcFilter.faultIndex = DEM_MAX_NUMBER_EVENT;\r
+               if (!dtcFound) {\r
+                       dtcFilter.faultIndex = DEM_MAX_NUMBER_EVENT;\r
+                       returnCode = DEM_FILTERED_NO_MATCHING_DTC;\r
+               }\r
+       } else {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETNEXTFILTEREDDTC_ID, DEM_E_UNINIT);\r
                returnCode = DEM_FILTERED_NO_MATCHING_DTC;\r
        }\r
 \r
@@ -1971,53 +1979,54 @@ Dem_ReturnClearDTCType Dem_ClearDTC(uint32 dtc, Dem_DTCKindType dtcKind, Dem_DTC
        const Dem_EventParameterType *eventParam;\r
        uint16 i, j;\r
 \r
-       // Loop through the event buffer\r
-       for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
-               eventId = eventStatusBuffer[i].eventId;\r
-               if (eventId != DEM_EVENT_ID_NULL) {\r
-                       eventParam = eventStatusBuffer[i].eventParamRef;\r
-                       if (eventParam != NULL) {\r
-                               if (DEM_CLEAR_ALL_EVENTS | (eventParam->DTCClassRef != NULL)) {\r
-                                       if (checkDtcKind(dtcKind, eventParam)) {\r
-                                               if (checkDtcGroup(dtc, eventParam)) {\r
-                                                       for (j = 0; (j < DEM_MAX_NR_OF_EVENT_DESTINATION) && (eventParam->EventClass->EventDestination[j] != dtcOrigin); j++);\r
-                                                       if (j < DEM_MAX_NR_OF_EVENT_DESTINATION) {\r
-                                                               // Yes! All conditions met.\r
-                                                               switch (dtcOrigin)\r
-                                                               {\r
-                                                               case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
-                                                                       /** @req DEM077 */\r
-                                                                       deleteEventPriMem(eventParam);\r
-                                                                       deleteFreezeFrameDataPriMem(eventParam);\r
-                                                                       deleteExtendedDataPriMem(eventParam);\r
-                                                                       deleteEventStatusRec(eventParam);               // TODO: Shall this be done or just resetting the status?\r
-                                                                       break;\r
-\r
-                                                               case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
-                                                               case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
-                                                               case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
-                                                                       // Not yet supported\r
-                                                                       returnCode = DEM_CLEAR_WRONG_DTCORIGIN;\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                                                                       Det_ReportError(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
-                                                                       break;\r
-                                                               default:\r
-                                                                       returnCode = DEM_CLEAR_WRONG_DTCORIGIN;\r
-                                                                       break;\r
+       if (demState == DEM_INITIALIZED) {\r
+               // Loop through the event buffer\r
+               for (i = 0; i < DEM_MAX_NUMBER_EVENT; i++) {\r
+                       eventId = eventStatusBuffer[i].eventId;\r
+                       if (eventId != DEM_EVENT_ID_NULL) {\r
+                               eventParam = eventStatusBuffer[i].eventParamRef;\r
+                               if (eventParam != NULL) {\r
+                                       if (DEM_CLEAR_ALL_EVENTS | (eventParam->DTCClassRef != NULL)) {\r
+                                               if (checkDtcKind(dtcKind, eventParam)) {\r
+                                                       if (checkDtcGroup(dtc, eventParam)) {\r
+                                                               for (j = 0; (j < DEM_MAX_NR_OF_EVENT_DESTINATION) && (eventParam->EventClass->EventDestination[j] != dtcOrigin); j++);\r
+                                                               if (j < DEM_MAX_NR_OF_EVENT_DESTINATION) {\r
+                                                                       // Yes! All conditions met.\r
+                                                                       switch (dtcOrigin)\r
+                                                                       {\r
+                                                                       case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
+                                                                               /** @req DEM077 */\r
+                                                                               deleteEventPriMem(eventParam);\r
+                                                                               deleteFreezeFrameDataPriMem(eventParam);\r
+                                                                               deleteExtendedDataPriMem(eventParam);\r
+                                                                               deleteEventStatusRec(eventParam);               // TODO: Shall this be done or just resetting the status?\r
+                                                                               break;\r
+\r
+                                                                       case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
+                                                                       case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
+                                                                       case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
+                                                                               // Not yet supported\r
+                                                                               returnCode = DEM_CLEAR_WRONG_DTCORIGIN;\r
+                                                                               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
+                                                                               break;\r
+                                                                       default:\r
+                                                                               returnCode = DEM_CLEAR_WRONG_DTCORIGIN;\r
+                                                                               break;\r
+                                                                       }\r
                                                                }\r
                                                        }\r
                                                }\r
                                        }\r
                                }\r
-                       }\r
-                       else {\r
-                               // Fatal error, no event parameters found for the stored event!\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                       Det_ReportError(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_UNEXPECTED_EXECUTION); /** @req DEM117 */\r
-#endif\r
+                               else {\r
+                                       // Fatal error, no event parameters found for the stored event!\r
+                                       DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_UNEXPECTED_EXECUTION);\r
+                               }\r
                        }\r
                }\r
+       } else {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_CLEARDTC_ID, DEM_E_UNINIT);\r
+               returnCode = DEM_CLEAR_FAILED;\r
        }\r
 \r
        return returnCode;\r
@@ -2030,22 +2039,26 @@ Dem_ReturnClearDTCType Dem_ClearDTC(uint32 dtc, Dem_DTCKindType dtcKind, Dem_DTC
  */\r
 Dem_ReturnControlDTCStorageType Dem_DisableDTCStorage(Dem_DTCGroupType dtcGroup, Dem_DTCKindType dtcKind) /** @req DEM035 */\r
 {\r
-       Dem_ReturnControlDTCStorageType returnCode = DEM_CONTROL_DTC_STORAGE_N_OK;\r
-\r
-       // Check dtcGroup parameter\r
-       if (dtcGroup == DEM_DTC_GROUP_ALL_DTCS) {\r
-               // Check dtcKind parameter\r
-               if ((dtcKind == DEM_DTC_KIND_ALL_DTCS) || (dtcKind ==  DEM_DTC_KIND_EMISSION_REL_DTCS)) {\r
-                       /** @req DEM079 */\r
-                       disableDtcStorage.dtcGroup = dtcGroup;\r
-                       disableDtcStorage.dtcKind = dtcKind;\r
-                       disableDtcStorage.storageDisabled = TRUE;\r
-\r
-                       returnCode = DEM_CONTROL_DTC_STORAGE_OK;\r
+       Dem_ReturnControlDTCStorageType returnCode = DEM_CONTROL_DTC_STORAGE_OK;\r
+\r
+       if (demState == DEM_INITIALIZED) {\r
+               // Check dtcGroup parameter\r
+               if (dtcGroup == DEM_DTC_GROUP_ALL_DTCS) {\r
+                       // Check dtcKind parameter\r
+                       if ((dtcKind == DEM_DTC_KIND_ALL_DTCS) || (dtcKind ==  DEM_DTC_KIND_EMISSION_REL_DTCS)) {\r
+                               /** @req DEM079 */\r
+                               disableDtcStorage.dtcGroup = dtcGroup;\r
+                               disableDtcStorage.dtcKind = dtcKind;\r
+                               disableDtcStorage.storageDisabled = TRUE;\r
+                       } else {\r
+                               returnCode = DEM_CONTROL_DTC_STORAGE_N_OK;\r
+                       }\r
+               } else {\r
+                       returnCode = DEM_CONTROL_DTC_WRONG_DTCGROUP;\r
                }\r
-       }\r
-       else {\r
-               returnCode = DEM_CONTROL_DTC_WRONG_DTCGROUP;\r
+       } else {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_DISABLEDTCSTORAGE_ID, DEM_E_UNINIT);\r
+               returnCode = DEM_CONTROL_DTC_STORAGE_N_OK;\r
        }\r
 \r
        return returnCode;\r
@@ -2058,10 +2071,17 @@ Dem_ReturnControlDTCStorageType Dem_DisableDTCStorage(Dem_DTCGroupType dtcGroup,
  */\r
 Dem_ReturnControlDTCStorageType Dem_EnableDTCStorage(Dem_DTCGroupType dtcGroup, Dem_DTCKindType dtcKind)\r
 {\r
-       // TODO: Behavior is not defined if group or kind do not match active settings, therefore the filter is just switched off.\r
-       disableDtcStorage.storageDisabled = FALSE; /** @req DEM080 */\r
+       Dem_ReturnControlDTCStorageType returnCode = DEM_CONTROL_DTC_STORAGE_OK;\r
 \r
-       return DEM_CONTROL_DTC_STORAGE_OK;\r
+       if (demState == DEM_INITIALIZED) {\r
+               // TODO: Behavior is not defined if group or kind do not match active settings, therefore the filter is just switched off.\r
+               disableDtcStorage.storageDisabled = FALSE; /** @req DEM080 */\r
+       } else {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_ENABLEDTCSTORAGE_ID, DEM_E_UNINIT);\r
+               returnCode = DEM_CONTROL_DTC_STORAGE_N_OK;\r
+       }\r
+\r
+       return returnCode;\r
 }\r
 \r
 /*\r
@@ -2076,56 +2096,59 @@ Dem_ReturnGetExtendedDataRecordByDTCType Dem_GetExtendedDataRecordByDTC(uint32 d
        ExtDataRecType *extData;\r
        uint8 posInExtData = 0;\r
 \r
-       if (lookupDtcEvent(dtc, &eventRec)) {\r
-               if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
-                       if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
-                               if (lookupExtendedDataRecNumParam(extendedDataNumber, eventRec->eventParamRef, &extendedDataRecordClass, &posInExtData)) {\r
-                                       if (*bufSize >= extendedDataRecordClass->DataSize) {\r
-                                               switch (dtcOrigin)\r
-                                               {\r
-                                               case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
-                                                       if (lookupExtendedDataPriMem(eventRec->eventId, &extData)) {\r
-                                                               // Yes all conditions met, copy the extended data record to destination buffer.\r
-                                                               memcpy(destBuffer, &extData->data[posInExtData], extendedDataRecordClass->DataSize); /** @req DEM075 */\r
-                                                               *bufSize = extendedDataRecordClass->DataSize;\r
-                                                               returnCode = DEM_RECORD_OK;\r
-                                                       }\r
-                                                       else {\r
-                                                               // The record number is legal but no record was found for the DTC\r
-                                                               *bufSize = 0;\r
-                                                               returnCode = DEM_RECORD_OK;\r
+       if (demState == DEM_INITIALIZED) {\r
+               if (lookupDtcEvent(dtc, &eventRec)) {\r
+                       if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
+                               if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
+                                       if (lookupExtendedDataRecNumParam(extendedDataNumber, eventRec->eventParamRef, &extendedDataRecordClass, &posInExtData)) {\r
+                                               if (*bufSize >= extendedDataRecordClass->DataSize) {\r
+                                                       switch (dtcOrigin)\r
+                                                       {\r
+                                                       case DEM_DTC_ORIGIN_PRIMARY_MEMORY:\r
+                                                               if (lookupExtendedDataPriMem(eventRec->eventId, &extData)) {\r
+                                                                       // Yes all conditions met, copy the extended data record to destination buffer.\r
+                                                                       memcpy(destBuffer, &extData->data[posInExtData], extendedDataRecordClass->DataSize); /** @req DEM075 */\r
+                                                                       *bufSize = extendedDataRecordClass->DataSize;\r
+                                                                       returnCode = DEM_RECORD_OK;\r
+                                                               }\r
+                                                               else {\r
+                                                                       // The record number is legal but no record was found for the DTC\r
+                                                                       *bufSize = 0;\r
+                                                                       returnCode = DEM_RECORD_OK;\r
+                                                               }\r
+                                                               break;\r
+\r
+                                                       case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
+                                                       case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
+                                                       case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
+                                                               // Not yet supported\r
+                                                               returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
+                                                               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEXTENDEDDATARECORDBYDTC_ID, DEM_E_NOT_IMPLEMENTED_YET);\r
+                                                               break;\r
+                                                       default:\r
+                                                               returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
+                                                               break;\r
                                                        }\r
-                                                       break;\r
-\r
-                                               case DEM_DTC_ORIGIN_SECONDARY_MEMORY:\r
-                                               case DEM_DTC_ORIGIN_PERMANENT_MEMORY:\r
-                                               case DEM_DTC_ORIGIN_MIRROR_MEMORY:\r
-                                                       // Not yet supported\r
-                                                       returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
-#if (DEM_DEV_ERROR_DETECT == STD_ON)\r
-                                                       Det_ReportError(MODULE_ID_DEM, 0, DEM_GETEXTENDEDDATARECORDBYDTC_ID, DEM_E_NOT_IMPLEMENTED_YET); /** @req DEM117 */\r
-#endif\r
-                                                       break;\r
-                                               default:\r
-                                                       returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
-                                                       break;\r
+                                               }\r
+                                               else {\r
+                                                       returnCode = DEM_RECORD_BUFFERSIZE;\r
                                                }\r
                                        }\r
                                        else {\r
-                                               returnCode = DEM_RECORD_BUFFERSIZE;\r
+                                               returnCode = DEM_RECORD_NUMBER;\r
                                        }\r
                                }\r
                                else {\r
-                                       returnCode = DEM_RECORD_NUMBER;\r
+                                       returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
                                }\r
                        }\r
                        else {\r
-                               returnCode = DEM_RECORD_WRONG_DTCORIGIN;\r
+                               returnCode = DEM_RECORD_DTCKIND;\r
                        }\r
                }\r
-               else {\r
-                       returnCode = DEM_RECORD_DTCKIND;\r
-               }\r
+       } else {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETEXTENDEDDATARECORDBYDTC_ID, DEM_E_UNINIT);\r
+               returnCode = DEM_RECORD_WRONG_DTC;\r
        }\r
 \r
        return returnCode;\r
@@ -2143,24 +2166,29 @@ Dem_ReturnGetSizeOfExtendedDataRecordByDTCType Dem_GetSizeOfExtendedDataRecordBy
        Dem_ExtendedDataRecordClassType const *extendedDataRecordClass = NULL;\r
        uint8 posInExtData;\r
 \r
-       if (lookupDtcEvent(dtc, &eventRec)) {\r
-               if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
-                       if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
-                               if (lookupExtendedDataRecNumParam(extendedDataNumber, eventRec->eventParamRef, &extendedDataRecordClass, &posInExtData)) {\r
-                                       *sizeOfExtendedDataRecord = extendedDataRecordClass->DataSize; /** @req DEM076 */\r
-                                       returnCode = DEM_GET_SIZEOFEDRBYDTC_OK;\r
+       if (demState == DEM_INITIALIZED) {\r
+               if (lookupDtcEvent(dtc, &eventRec)) {\r
+                       if (checkDtcKind(dtcKind, eventRec->eventParamRef)) {\r
+                               if (checkDtcOrigin(dtcOrigin, eventRec->eventParamRef)) {\r
+                                       if (lookupExtendedDataRecNumParam(extendedDataNumber, eventRec->eventParamRef, &extendedDataRecordClass, &posInExtData)) {\r
+                                               *sizeOfExtendedDataRecord = extendedDataRecordClass->DataSize; /** @req DEM076 */\r
+                                               returnCode = DEM_GET_SIZEOFEDRBYDTC_OK;\r
+                                       }\r
+                                       else {\r
+                                               returnCode = DEM_GET_SIZEOFEDRBYDTC_W_RNUM;\r
+                                       }\r
                                }\r
                                else {\r
-                                       returnCode = DEM_GET_SIZEOFEDRBYDTC_W_RNUM;\r
+                                       returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTCOR;\r
                                }\r
                        }\r
                        else {\r
-                               returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTCOR;\r
+                               returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTCKI;\r
                        }\r
                }\r
-               else {\r
-                       returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTCKI;\r
-               }\r
+       } else {\r
+               DET_REPORTERROR(MODULE_ID_DEM, 0, DEM_GETSIZEOFEXTENDEDDATARECORDBYDTC_ID, DEM_E_UNINIT);\r
+               returnCode = DEM_GET_SIZEOFEDRBYDTC_W_DTC;\r
        }\r
 \r
        return returnCode;\r
index dd62cf75a1fc03f40032edfdbd80beca7a6f4489..d1079e0136de55c0ec7427b972ca1a36a99b7c3c 100644 (file)
@@ -87,7 +87,7 @@ typedef struct {
 typedef struct {\r
        uint16  RecordNumber;                                           // (1)\r
        uint16  DataSize;                                                       // (1)\r
-       Dem_CallbackGetExtDataRecordFncType     CallbackGetExtDataRecord;// (1)\r
+       Dem_CallbackGetExtDataRecordFncType     CallbackGetExtDataRecord;// (1)  /** @req DEM139 */\r
 } Dem_ExtendedDataRecordClassType; /** @req DEM135 */\r
 \r
 // 10.2.13 DemExtendedDataClass\r
index 86f3a519008dbb26b837824250e608be5e17b7c9..e68b61f6126fb72cb98e9f78b381e0e8b7f19f58 100644 (file)
@@ -1,7 +1,7 @@
 -include ../config/*.mk\r
 -include ../config/$(BOARDDIR)/*.mk\r
 \r
-MOD_USE+=ECUM KERNEL MCU WDG WDGM PORT DIO \r
+MOD_USE+=ECUM KERNEL MCU WDG WDGM PORT DIO DET\r
 \r
 SELECT_CONSOLE = RAMLOG\r
 SELECT_OS_CONSOLE = RAMLOG\r
index ee696f67259d6ce9f168e48eb1e7e1cc171802ae..81990837577d00b84e7af53013b6e6fa16aaf7f5 100644 (file)
@@ -5,8 +5,8 @@ obj-y += Tasks.o
 obj-y += Hooks.o\r
 obj-y += Rte.o\r
 \r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
+VPATH += ../\r
+\r
 # Board object files\r
 include $(ROOTDIR)/boards/board_common.mk\r
 \r
@@ -20,8 +20,8 @@ inc-y += $(ROOTDIR)/system/kernel/$(objdir)
 inc-y += $(ROOTDIR)/system/kernel/include\r
 \r
 #TODO: Remove?, Build other way?\r
-VPATH += $(ROOTDIR)/$(SUBDIR)/Rte\r
-inc-y += $(ROOTDIR)/$(SUBDIR)/Rte\r
+VPATH += ../Rte\r
+inc-y += ../Rte\r
 VPATH += $(ROOTDIR)/components/blinker\r
 inc-y += $(ROOTDIR)/components/blinker\r
 \r
index 8bff5047ea1c13823a82068edc23197ee486707c..debb8ce634aa2255c369f8d2a93679d87545f2f8 100644 (file)
@@ -1,7 +1,4 @@
 -include ../config/*.mk\r
 -include ../config/$(BOARDDIR)/*.mk\r
 \r
--include ../config/*.mk\r
--include ../config/$(BOARDDIR)/*.mk\r
-\r
-MOD_USE+=KERNEL MCU ECUM  DET PORT PWM RAMLOG\r
+MOD_USE+=KERNEL MCU ECUM DET PORT PWM RAMLOG\r
index 195b735a66267607ad898fbcf44d812098d9b254..d02a7bec3a66078627d9c38a64b52b6dd605426d 100644 (file)
@@ -5,8 +5,8 @@ obj-y += Tasks.o
 obj-y += Hooks.o\r
 obj-y += Rte.o\r
 \r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
+VPATH += ../\r
+\r
 # Board object files\r
 include $(ROOTDIR)/boards/board_common.mk\r
 \r
@@ -22,8 +22,8 @@ inc-y += $(ROOTDIR)/system/kernel/$(objdir)
 inc-y += $(ROOTDIR)/system/kernel/include\r
 \r
 #TODO: Remove?, Build other way?\r
-VPATH += $(ROOTDIR)/$(SUBDIR)/Rte\r
-inc-y += $(ROOTDIR)/$(SUBDIR)/Rte\r
+VPATH += ../Rte\r
+inc-y += ../Rte\r
 VPATH += $(ROOTDIR)/components/pwm_sine\r
 inc-y += $(ROOTDIR)/components/pwm_sine\r
 \r
index 2ab67f6e1abf50d164128d33bdb6245997dbd87a..13e0cb828306fdee2ae4c9c0e20457d9d9a10a08 100644 (file)
@@ -2,4 +2,4 @@
 -include ../config/*.mk\r
 -include ../config/$(BOARDDIR)/*.mk\r
 \r
-MOD_USE+=KERNEL MCU ECUM  DET PORT COM CAN CANIF PWM RAMLOG\r
+MOD_USE+=KERNEL MCU ECUM DET PORT COM CAN CANIF PWM RAMLOG\r
index 9e330df0bf0ab262fa6bf92648edde323fde48cb..86f73afecf862a36083eab678b0dd75930687dd2 100644 (file)
@@ -9,8 +9,8 @@ obj-y += Hooks.o
 inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
 inc-y += $(ROOTDIR)/system/kernel/include\r
 \r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
+VPATH += ../\r
+\r
 # Board object files\r
 include $(ROOTDIR)/boards/board_common.mk\r
 \r
@@ -23,8 +23,8 @@ inc-y := ../config/$(BOARDDIR) ../config $(inc-y)
 inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
 \r
 #TODO: Remove?, Build other way?\r
-VPATH += $(ROOTDIR)/$(SUBDIR)/Rte\r
-inc-y += $(ROOTDIR)/$(SUBDIR)/Rte\r
+VPATH += ../Rte\r
+inc-y += ../Rte\r
 VPATH += $(ROOTDIR)/components/fading_led\r
 inc-y += $(ROOTDIR)/components/fading_led\r
 \r
index 3d74a9239ebded010c8bf0b484e03353f0dc18ac..1cad3266622df9dab7f0238967450c5a1b13dd53 100644 (file)
@@ -1,10 +1,7 @@
--include ../config/*.mk\r
--include ../config/$(BOARDDIR)/*.mk\r
 \r
 -include ../config/*.mk\r
 -include ../config/$(BOARDDIR)/*.mk\r
 \r
-MOD_USE+= DET ECUM MCU  KERNEL RAMLOG \r
+MOD_USE+= DET ECUM MCU KERNEL RAMLOG \r
 \r
 #def-y += NDEBUG\r
-#def-y += HEAPSIZE=1400
\ No newline at end of file
diff --git a/examples/simple/config/hcs12_elmicro_card12/build_config.mk b/examples/simple/config/hcs12_elmicro_card12/build_config.mk
new file mode 100644 (file)
index 0000000..da678de
--- /dev/null
@@ -0,0 +1,3 @@
+\r
+\r
+def-y += HEAPSIZE=1000
\ No newline at end of file
index 47d723c185653172574b70d1137ac3cda37b1567..20c2f70f2259f5c38a1dcb7fbc0d9f20eae132fc 100644 (file)
@@ -1,8 +1,6 @@
 \r
 # Our object files\r
 obj-y += simple_main.o\r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
 \r
 VPATH += ..\r
 VPATH += ../config\r
index f21c8b4e76305893b69f76da465640a549c01bc1..f3420869559522f904ae987db413d9e565a69c5f 100644 (file)
@@ -1,7 +1,7 @@
 -include ../config/*.mk\r
 -include ../config/$(BOARDDIR)/*.mk\r
 \r
-MOD_USE+=KERNEL MCU ADC DMA \r
+MOD_USE+=ADC DET ECUM DMA KERNEL MCU \r
 \r
 SELECT_CONSOLE = RAMLOG\r
 SELECT_OS_CONSOLE = RAMLOG
\ No newline at end of file
index 8ef59e3702351431fc237db9840af66dbc6ca366..49853658bca312d44817ac7e0a82b877a58d7cd3 100644 (file)
@@ -9,8 +9,8 @@ obj-y += Hooks.o
 inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
 inc-y += $(ROOTDIR)/system/kernel/include\r
 \r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
+VPATH += ../\r
+\r
 # Board object files\r
 include $(ROOTDIR)/boards/board_common.mk\r
 \r
@@ -23,8 +23,8 @@ inc-y := ../config/$(BOARDDIR) ../config $(inc-y)
 inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
 \r
 #TODO: Remove?, Build other way?\r
-VPATH += $(ROOTDIR)/$(SUBDIR)/Rte\r
-inc-y += $(ROOTDIR)/$(SUBDIR)/Rte\r
+VPATH += ../Rte\r
+inc-y += ../Rte\r
 VPATH += $(ROOTDIR)/components/switch\r
 inc-y += $(ROOTDIR)/components/switch\r
 \r
index 46b89559392119e45c8e2f0d5b83eb0ed34eec2c..3643914e7d69544a9e65537df218014373cfb523 100644 (file)
@@ -1,13 +1,10 @@
--include ../config/*.mk\r
--include ../config/$(BOARDDIR)/*.mk\r
 \r
 -include ../config/*.mk\r
 -include ../config/$(BOARDDIR)/*.mk\r
 \r
-MOD_USE+= DET ECUM MCU  KERNEL RAMLOG \r
+MOD_USE+=DET ECUM MCU KERNEL RAMLOG \r
 \r
 SELECT_CONSOLE = RAMLOG\r
 SELECT_OS_CONSOLE = RAMLOG\r
 \r
 def-y += CFG_RAMLOG_SIZE=1024\r
-#def-y += HEAPSIZE=400\r
diff --git a/examples/tiny/config/hcs12_elmicro_card12/build_config.mk b/examples/tiny/config/hcs12_elmicro_card12/build_config.mk
new file mode 100644 (file)
index 0000000..8c951ec
--- /dev/null
@@ -0,0 +1,3 @@
+\r
+\r
+def-y += HEAPSIZE=1400
\ No newline at end of file
index e49f2e289f0ec8f3fd72ce6f3d2998f431c1591c..05da3de0331927698edb38d182bab531f4b4f6a4 100644 (file)
@@ -1,7 +1,6 @@
 \r
-# OS object files.\r
-obj-y += Os_Cfg.o\r
-\r
+# Our object files\r
+obj-y += tiny.o\r
 \r
 VPATH += ..\r
 VPATH += ../config\r
@@ -17,9 +16,6 @@ inc-y := ../config/$(BOARDDIR) ../config $(inc-y)
 # Board object files\r
 include $(ROOTDIR)/boards/board_common.mk\r
 \r
-# Our object files\r
-obj-y += tiny.o\r
-\r
 # libs needed by us \r
 #libitem-y +=\r
 \r
index b88d5e0b676ae66d7b0b9be009d95c0cf6298e26..a9a1079ed6a062f1e664a44dfc9c1263bdd800f8 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef CANTP_H_\r
 #define CANTP_H_\r
 \r
-#define CANTP_MODULE_ID                                MODULE_ID_CANTP\r
+#define CANTP_MODULE_ID                                MODULE_ID_CANTP /** @req CANTP115 */\r
 #define CANTP_VENDOR_ID                                1\r
 \r
 #define CANTP_SW_MAJOR_VERSION         1\r
@@ -46,7 +46,7 @@
  * Errors described by CanTp 7.4 Error classification.\r
  *\r
  ****************************/\r
-\r
+/** @req CANTP101 */\r
 #define CANTP_E_PARAM_CONFIG           0x01\r
 #define CANTP_E_PARAM_ID                       0x02\r
 #define CANTP_E_PARAM_ADDRESS          0x04\r
index 71af27a63a1a0cd2f3797cf3eacbe38f9446aa89..821033dafd2cef693d0189f3eacc4a15b8519899 100644 (file)
 #include "ComStack_Types.h"\r
 \r
 \r
-#ifdef COM_DEV_ERROR_DETECT\r
-#include "Det.h"\r
-#endif\r
-\r
 #define COM_SW_MAJOR_VERSION   1\r
 #define COM_SW_MINOR_VERSION   0\r
 #define COM_SW_PATCH_VERSION   0\r
 #include "Com_Com.h"\r
 #include "Com_Sched.h"\r
 \r
-const Com_ConfigType * ComConfig;\r
-\r
-\r
-\r
-#ifdef COM_DEV_ERROR_DETECT\r
-\r
-#undef DET_REPORTERROR\r
-#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x,_y,_z,_q)\r
-\r
-\r
-// Define macro for parameter check.\r
-#define PduIdCheck(PduId,ApiId,...) \\r
-       if (PduId >= Com_Arc_Config.ComNIPdu) { \\r
-               DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, ApiId, COM_INVALID_PDU_ID); \\r
-               return __VA_ARGS__; \\r
-       } \\r
-\r
-#define COM_VALIDATE_SIGNAL(SignalId, ApiId, ...) \\r
-       if (ComConfig->ComSignal[SignalId].Com_Arc_IsSignalGroup) { \\r
-               DET_REPORTERROR(COM_MODULE_ID, COM_INSTANCE_ID, ApiId, COM_ERROR_SIGNAL_IS_SIGNALGROUP); \\r
-               return __VA_ARGS__; \\r
-       } \\r
-\r
-\r
-#else\r
-\r
-#undef DET_REPORTERROR\r
-#define DET_REPORTERROR(_x,_y,_z,_q)\r
-\r
-#define PduIdCheck(PduId,ApiId,...)\r
-#define COM_VALIDATE_SIGNAL(PduId, ApiId, ...)\r
-#endif\r
-\r
-\r
-#define testBit(source,bit) (*((uint8 *)source + (bit / 8)) & (1 << (bit % 8)))\r
-#define setBit(dest,bit) *((uint8 *)dest + (bit / 8)) |= (1 << (bit % 8))\r
-#define clearBit(dest,bit) *((uint8 *)dest + (bit / 8)) &= ~(1 << (bit % 8))\r
-\r
-#define ComGetSignal(SignalId) \\r
-       const ComSignal_type * Signal = &ComConfig->ComSignal[SignalId]\\r
-\r
-#define ComGetArcSignal(SignalId) \\r
-       Com_Arc_Signal_type * Arc_Signal = &Com_Arc_Config.ComSignal[SignalId]\\r
-\r
-#define ComGetIPdu(IPduId) \\r
-       const ComIPdu_type *IPdu = &ComConfig->ComIPdu[IPduId]\\r
-\r
-#define ComGetArcIPdu(IPduId) \\r
-       Com_Arc_IPdu_type *Arc_IPdu = &Com_Arc_Config.ComIPdu[IPduId]\\r
-\r
-#define ComGetGroupSignal(GroupSignalId) \\r
-       const ComGroupSignal_type *GroupSignal = &ComConfig->ComGroupSignal[GroupSignalId]\\r
-\r
-#define ComGetArcGroupSignal(GroupSignalId) \\r
-       Com_Arc_GroupSignal_type *Arc_GroupSignal = &Com_Arc_Config.ComGroupSignal[GroupSignalId]\\r
-\r
 //-------------------------------------------------------------------\r
 // From OSEK_VDX spec...\r
 //\r
@@ -131,8 +71,8 @@ const Com_ConfigType * ComConfig;
 \r
 \r
 // From Autosar\r
-void Com_Init( const Com_ConfigType * ConfigPtr);\r
-void Com_DeInit( void );\r
+void Com_Init(const Com_ConfigType * ConfigPtr);\r
+void Com_DeInit(void);\r
 \r
 void Com_IpduGroupStart(Com_PduGroupIdType IpduGroupId, boolean Initialize);\r
 void Com_IpduGroupStop(Com_PduGroupIdType IpduGroupId);\r
index 88fcc5a867b9024f13b4d702579dcb9fb1243fb1..af96a592e4391c80ab2d8aaf7875599236b048eb 100644 (file)
 #include "Dcm_Cbk.h"\r
 \r
 #if (DCM_DEV_ERROR_DETECT == STD_ON)\r
-// Error codes produced by this module\r
-#define DCM_E_CONFIG_INVALID                           0x41\r
-#define DCM_E_UNEXPECTED_PARAM                         0x42\r
+// Error codes produced by this module defined by Autosar\r
+#define DCM_E_INTERFACE_TIMEOUT                                0x01\r
+#define DCM_E_INTERFACE_VALUE_OUT_OF_RANGE     0x02\r
+#define DCM_E_INTERFACE_BUFFER_OVERFLOW                0x03\r
+#define DCM_E_INTERFACE_PROTOCOL_MISMATCH      0x04\r
+#define DCM_E_UNINIT                                           0x05\r
+#define DCM_E_PARAM                                                    0x06\r
+\r
+// Other error codes reported by this module\r
+#define DCM_E_CONFIG_INVALID                           0x40\r
 #define DCM_E_NOT_SUPPORTED                                    0xfe\r
 #define DCM_E_NOT_IMPLEMENTED_YET                      0xff\r
 \r
-// Service ID in this module\r
+// Service IDs in this module defined by Autosar\r
 #define DCM_INIT_ID                                                    0x01\r
-#define DCM_HANDLE_RESPONSE_TRANSMISSION       0x80\r
-#define DCM_UDS_READ_DTC_INFO                          0x81\r
-#define DCM_UDS_RESET                                          0x82\r
+#define DCM_PROVIDE_RX_BUFFER_ID                       0x02\r
+#define DCM_RX_INDICATION_ID                           0x03\r
+#define DCM_PROVIDE_TX_BUFFER_ID                       0x04\r
+#define DCM_TX_CONFIRMATION_ID                         0x05\r
+#define DCM_GET_SES_CTRL_TYPE_ID                       0x06\r
+#define DCM_GET_SECURITY_LEVEL_ID                      0x0d\r
+#define DCM_GET_ACTIVE_PROTOCOL_ID                     0x0f\r
+#define DCM_COMM_NO_COM_MODE_ENTERED_ID                0x21\r
+#define DCM_COMM_SILENT_COM_MODE_ENTERED_ID    0x22\r
+#define DCM_COMM_FULL_COM_MODE_ENTERED_ID      0x23\r
+#define DCM_MAIN_ID                                                    0x25\r
+\r
+// Other service IDs reported by this module\r
+#define DCM_HANDLE_RESPONSE_TRANSMISSION_ID    0x80\r
+#define DCM_UDS_READ_DTC_INFO_ID                       0x81\r
+#define DCM_UDS_RESET_ID                                       0x82\r
+#define DCM_CHANGE_DIAGNOSTIC_SESSION_ID       0x88\r
 #define DCM_GLOBAL_ID                                          0xff\r
 \r
 #endif\r
index 0478482f50f4db80796647e313253413614e60eb..2c02c2aee4c8eb543542d9fcc370fa662cf31c0c 100644 (file)
@@ -45,7 +45,6 @@
 \r
 #if (DEM_DEV_ERROR_DETECT == STD_ON)\r
 // Error codes reported by this module defined by AUTOSAR /** @req DEM116 */ /** @req DEM173 */\r
-#define DEM_E_CONFIG_PTR_INVALID                       0x01\r
 #define DEM_E_PARAM_CONFIG                                     0x10\r
 #define DEM_E_PARAM_ADDRESS                                    0x11\r
 #define DEM_E_PARAM_DATA                                       0x12\r
 #define DEM_E_NODATAAVAILABLE                          0x30\r
 \r
 // Other error codes reported by this module\r
-#define DEM_E_EVENT_STATUS_BUFF_FULL           0x40\r
-#define DEM_E_EXT_DATA_TOO_BIG                         0x41\r
-#define DEM_E_PRE_INIT_EXT_DATA_BUFF_FULL      0x42\r
-#define DEM_E_PRI_MEM_EVENT_BUFF_FULL          0x43\r
-#define DEM_E_PRI_MEM_EXT_DATA_BUFF_FULL       0x44\r
+#define DEM_E_CONFIG_PTR_INVALID                       0x40\r
+#define DEM_E_EVENT_STATUS_BUFF_FULL           0x41\r
+#define DEM_E_EXT_DATA_TOO_BIG                         0x42\r
+#define DEM_E_PRE_INIT_EXT_DATA_BUFF_FULL      0x43\r
+#define DEM_E_PRI_MEM_EVENT_BUFF_FULL          0x44\r
+#define DEM_E_PRI_MEM_EXT_DATA_BUFF_FULL       0x45\r
 \r
 #define DEM_E_UNEXPECTED_EXECUTION                     0xfe\r
 #define DEM_E_NOT_IMPLEMENTED_YET                      0xff\r
 \r
 // Service ID in this module\r
-#define DEM_PREINIT_ID                                         0x01\r
-#define DEM_INIT_ID                                                    0x02\r
-#define DEM_SETEVENTSTATUS_ID                          0x04\r
-#define DEM_RESETEVENTSTATUS_ID                                0x05\r
-#define DEM_SETOPERATIONCYCLESTATE_ID          0x08\r
-#define DEM_GETEVENTSTATUS_ID                          0x0A\r
-#define DEM_GETEVENTFAILED_ID                          0x0B\r
-#define DEM_GETEVENTTESTED_ID                          0x0C\r
-#define DEM_REPORTERRORSTATUS_ID                       0x0F\r
-#define DEM_GETEXTENDEDDATARECORDBYDTC_ID      0x20\r
-#define DEM_CLEARDTC_ID                                                0x22\r
-#define DEM_GETFAULTDETECTIONCOUNTER_ID        0x3E\r
-\r
-#define DEM_UPDATE_EVENT_STATUS_ID                     0x80\r
-#define DEM_MERGE_EVENT_STATUS_ID                      0x81\r
-#define DEM_GET_EXTENDED_DATA_ID                       0x82\r
-#define DEM_STORE_EXT_DATA_PRE_INIT_ID         0x83\r
-#define DEM_STORE_EVENT_PRI_MEM_ID                     0x84\r
-#define DEM_STORE_EXT_DATA_PRI_MEM_ID          0x85\r
-#define DEM_PREDEBOUNCE_NONE_ID                                0x86\r
-#define DEM_PREDEBOUNCE_COUNTER_BASED_ID       0x87\r
-#define DEM_GLOBAL_ID                                          0xff\r
+#define DEM_PREINIT_ID                                                 0x01\r
+#define DEM_INIT_ID                                                            0x02\r
+#define DEM_SHUTDOWN_ID                                                        0x03\r
+#define DEM_SETEVENTSTATUS_ID                                  0x04\r
+#define DEM_RESETEVENTSTATUS_ID                                        0x05\r
+#define DEM_SETOPERATIONCYCLESTATE_ID                  0x08\r
+#define DEM_GETEVENTSTATUS_ID                                  0x0A\r
+#define DEM_GETEVENTFAILED_ID                                  0x0B\r
+#define DEM_GETEVENTTESTED_ID                                  0x0C\r
+#define DEM_GETDTCOFEVENT_ID                                   0x0D\r
+#define DEM_REPORTERRORSTATUS_ID                               0x0F\r
+#define DEM_SETDTCFILTER_ID                                            0x13\r
+#define DEM_GETSTATUSOFDTC_ID                                  0x15\r
+#define DEM_GETDTCSTATUSAVAILABILITYMASK_ID            0x16\r
+#define DEM_GETNUMBEROFFILTEREDDTC_ID                  0x17\r
+#define DEM_GETNEXTFILTEREDDTC_ID                              0x18\r
+#define DEM_GETEXTENDEDDATARECORDBYDTC_ID              0x20\r
+#define DEM_GETSIZEOFEXTENDEDDATARECORDBYDTC_ID        0x21\r
+#define DEM_CLEARDTC_ID                                                        0x22\r
+#define DEM_DISABLEDTCSTORAGE_ID                               0x24\r
+#define DEM_ENABLEDTCSTORAGE_ID                                        0x25\r
+#define DEM_GETTRANSLATIONTYPE_ID                              0x3c\r
+#define DEM_GETFAULTDETECTIONCOUNTER_ID                0x3E\r
+#define DEM_MAINFUNCTION_ID                                            0x55\r
+\r
+#define DEM_UPDATE_EVENT_STATUS_ID                             0x80\r
+#define DEM_MERGE_EVENT_STATUS_ID                              0x81\r
+#define DEM_GET_EXTENDED_DATA_ID                               0x82\r
+#define DEM_STORE_EXT_DATA_PRE_INIT_ID                 0x83\r
+#define DEM_STORE_EVENT_PRI_MEM_ID                             0x84\r
+#define DEM_STORE_EXT_DATA_PRI_MEM_ID                  0x85\r
+#define DEM_PREDEBOUNCE_NONE_ID                                        0x86\r
+#define DEM_PREDEBOUNCE_COUNTER_BASED_ID               0x87\r
+#define DEM_GLOBAL_ID                                                  0xff\r
 \r
 #endif\r
 \r
index 744f4b0bb59724fcb5af55d41163cdd523c38633..729498d80f2a186637a6b52721b5cbb638f7c424 100644 (file)
@@ -40,6 +40,7 @@ typedef enum {
        TASK_STATE_RUNNING,\r
 } TaskStateType;\r
 \r
+#define INVALID_TASK   0xdeadU\r
 \r
 typedef TaskStateType *TaskStateRefType;\r
 \r
@@ -247,9 +248,9 @@ StatusType GetResource( ResourceType ResID );
 StatusType ReleaseResource( ResourceType ResID);\r
 \r
 /*\r
- * Define the scheduler resource as ~0\r
+ * Define scheduler as topmost\r
  */\r
-#define        RES_SCHEDULER                   ~(ResourceType)0\r
+#define        RES_SCHEDULER                   OS_RESOURCE_CNT\r
 \r
 /*\r
  * Priorities of tasks and resources\r
index acf50397668d837dc054133e1f0e6b5e353fd422..eb2145fcdd1af48f563df86fa7d9e2486e8308b3 100644 (file)
@@ -66,30 +66,28 @@ extern const PduR_PBConfigType *PduRConfig;
 \r
 #if (PDUR_DEV_ERROR_DETECT == STD_ON)\r
 \r
-#undef DET_REPORTERROR\r
-#define DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x,_y,_z,_q)\r
+#define PDUR_DET_REPORTERROR(_x,_y,_z,_q) Det_ReportError(_x,_y,_z,_q)\r
 \r
 // Define macro for state, parameter and data pointer checks.\r
 // TODO Implement data range check if needed.\r
-#define DevCheck(PduId,PduPtr,ApiId,...) \\r
+#define PduR_DevCheck(PduId,PduPtr,ApiId,...) \\r
        if (PduRState == PDUR_UNINIT || PduRState == PDUR_REDUCED) { \\r
-               DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_INVALID_REQUEST); \\r
+               PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_INVALID_REQUEST); \\r
                return __VA_ARGS__; \\r
        } \\r
        if (PduPtr == 0 && PDUR_DEV_ERROR_DETECT) { \\r
-               DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_DATA_PTR_INVALID); \\r
+               PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_DATA_PTR_INVALID); \\r
                return __VA_ARGS__; \\r
        } \\r
        if ((PduId >= PduRConfig->PduRRoutingTable->NRoutingPaths) && PDUR_DEV_ERROR_DETECT) { \\r
-               DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_PDU_ID_INVALID); \\r
+               PDUR_DET_REPORTERROR(MODULE_ID_PDUR, PDUR_INSTANCE_ID, ApiId, PDUR_E_PDU_ID_INVALID); \\r
                return __VA_ARGS__; \\r
-       } \\r
+       }\r
 \r
 \r
 #else\r
-#undef DET_REPORTERROR\r
-#define DET_REPORTERROR(_x,_y,_z,_q)\r
-#define DevCheck(...)\r
+#define PDUR_DET_REPORTERROR(_x,_y,_z,_q)\r
+#define PduR_DevCheck(...)\r
 \r
 #endif\r
 \r
index dac283da00a2a83c81a6e10db7cf2a24720b0f68..23a5538f63d348796883c1060f8dd5b83fa9c655 100644 (file)
@@ -68,6 +68,13 @@ typedef enum
     PORT_PIN_IN = 0, PORT_PIN_OUT,
 } Port_PinDirectionType;
 
+#if defined(CFG_HC1X)
+/** @req PORT124 */
+typedef uint8 Port_PinModeType;
+#else  // CFG_PPC, CFG_STM32_STAMP and others
+typedef uint32 Port_PinModeType;
+#endif
+
 void
 Port_Init(const Port_ConfigType *configType);
 #if ( PORT_PIN_DIRECTION_CHANGES_ALLOWED == STD_ON )
index d4b9e7b461eafb55aab8aa1fa0e3f6b2ce75cf8d..0cd99742a2a07be24802e8f977988cd260f45d27 100644 (file)
@@ -20,7 +20,7 @@
 
 typedef struct
 {
-       CirqBufferDynType *cirqPtr;
+       CirqBufferType *cirqPtr;
 } Arc_MBoxType;
 
 
index d36053e2cd3ae319736de1e5ee63fdc0367873c1..e81e06a5643e72af0d7da2a6e91236d1cba0f7da 100644 (file)
@@ -1,2 +1,20 @@
-Please see the Arctic Core wiki. \r
-http://arccore.com/wiki\r
+\r
+Arctic Core - the open source AUTOSAR embedded platform\r
+\r
+\r
+For information on getting started with Arctic Core, please take a look at: \r
+  http://arccore.com/wiki/Quick-start_Tutorial\r
+\r
+For more general information and help, browse the wiki at:\r
+  http://arccore.com/wiki/\r
+\r
+or post a question in the forum:\r
+  https://arccore.com/forum/\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
index 1670702a80fafc91ad8b3d5dc09e5f26a3ed6229..0fb7da232c702b6050815616cdebb7671f0f7ea9 100755 (executable)
@@ -17,20 +17,17 @@ make BOARDDIR=stm32_stm3210c all
 if [ $? -ne 0 ]; then quit 1
 fi
 
-export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02
+export BDIR=examples/simple 
 make BOARDDIR=stm32_stm3210c clean
 make BOARDDIR=stm32_stm3210c all
 if [ $? -ne 0 ]; then quit 1
 fi
 
-export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02
-make BOARDDIR=stm32_mcbstm32 clean
-make BOARDDIR=stm32_mcbstm32 all
-if [ $? -ne 0 ]; then quit 1
-fi
+# Problems memory..
+#export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02, system/kernel/testsystem/suite_03
+#make BOARDDIR=stm32_stm3210c clean
+#make BOARDDIR=stm32_stm3210c all
+#if [ $? -ne 0 ]; then quit 1
+#fi
+
 
-export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02
-make BOARDDIR=stm32_stm3210c clean
-make BOARDDIR=stm32_stm3210c all
-if [ $? -ne 0 ]; then quit 1
-fi
index 178194a9fbe467a48b9bbcab75c46d472227b71f..84e703856ec604e2ac9e143192c2d60421f0ca9b 100644 (file)
@@ -16,7 +16,7 @@ function quit {
 SCRIPT_DIR=`dirname $0`   
 ARCH=PPC
 source ${SCRIPT_DIR}/guess_cc.sh
-         
+                         
 export BDIR=system/kernel/testsystem/suite_01,system/kernel/testsystem/suite_02,,system/kernel/testsystem/suite_03
 make BOARDDIR=mpc5554sim clean 
 make BOARDDIR=mpc5554sim all 
@@ -43,20 +43,20 @@ fi
 # Build the examples...
 
 export BDIR=examples/blinker_node
-make BOARDDIR=mpc551xsim clean 
-make BOARDDIR=mpc551xsim all 
+make BOARDDIR=mpc5516it clean 
+make BOARDDIR=mpc5516it all 
 if [ $? -ne 0 ]; then quit 1
 fi
 
 export BDIR=examples/pwm_node
-make BOARDDIR=mpc551xsim clean 
-make BOARDDIR=mpc551xsim all 
+make BOARDDIR=mpc5516it clean 
+make BOARDDIR=mpc5516it all 
 if [ $? -ne 0 ]; then quit 1
 fi
 
 export BDIR=examples/pwm_node2
-make BOARDDIR=mpc551xsim clean 
-make BOARDDIR=mpc551xsim all 
+make BOARDDIR=mpc5516it clean 
+make BOARDDIR=mpc5516it all 
 if [ $? -ne 0 ]; then quit 1
 fi
 
@@ -66,15 +66,15 @@ make BOARDDIR=mpc551xsim all
 if [ $? -ne 0 ]; then quit 1
 fi
 
-export BDIR=examples/swith_node
-make BOARDDIR=mpc551xsim clean 
-make BOARDDIR=mpc551xsim all 
+export BDIR=examples/switch_node
+make BOARDDIR=mpc5516it clean 
+make BOARDDIR=mpc5516it all 
 if [ $? -ne 0 ]; then quit 1
 fi
 
 export BDIR=examples/tiny
-make BOARDDIR=mpc551xsim clean 
-make BOARDDIR=mpc551xsim all 
+make BOARDDIR=mpc5516it clean 
+make BOARDDIR=mpc5516it all 
 if [ $? -ne 0 ]; then quit 1
 fi
 
index fbc7064813c860dd6f640ea7aa0e3d8626268b64..8e2aff80883b827252e14df14deb259547529950 100644 (file)
@@ -191,6 +191,10 @@ else
                                                                /^\.data/ { print "  data:"  $$3+0 " bytes"; rom+=$$3; ram+=$$3}; \\r
                                                                /^\.bss/ { print "  bss :"  $$3+0 " bytes"; ram+=$$3}; \\r
                                                                END { print "  ROM: ~" rom " bytes"; print "  RAM: ~" ram " bytes"}' $(subst .elf,.map,$@)\r
+ifeq ($(BUILD_LOAD_MODULE),y)\r
+       @$(CROSS_COMPILE)objcopy -O srec $@ $@.raw.s19\r
+       srec_cat $@.raw.s19 --crop 0x8008000 0x803fffc --fill 0x00 0x8008000 0x803fffc --l-e-crc32 0x803fffc -o $@.lm.s19\r
+endif\r
 endif\r
 endif\r
        @echo\r
index e534c4409f5b8a1d9ab302386662f4d5f5d0692a..900812f76a068ce2a936c62b959bcff4ea4c6f9c 100644 (file)
@@ -112,11 +112,9 @@ StatusType SetRelAlarm(AlarmType AlarmId, TickType Increment, TickType Cycle){
                rv =  E_OS_VALUE;\r
                goto err;\r
        } else {\r
-               if(  Cycle == 0 ||\r
-                       (Cycle >= COUNTER_MIN_CYCLE(aPtr)) ||\r
-                       (Cycle <= COUNTER_MAX(aPtr)) ) {\r
-                       /* OK */\r
-               } else {\r
+               if( Cycle != 0 &&\r
+                       ( (Cycle < COUNTER_MIN_CYCLE(aPtr)) ||\r
+                         (Cycle > COUNTER_MAX(aPtr)) ) ) {\r
                        /** @req OS304 */\r
                        rv =  E_OS_VALUE;\r
                        goto err;\r
diff --git a/system/kernel/application.c b/system/kernel/application.c
new file mode 100644 (file)
index 0000000..c0de676
--- /dev/null
@@ -0,0 +1,27 @@
+/* -------------------------------- Arctic Core ------------------------------\r
+ * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
+ *\r
+ * Copyright (C) 2009  ArcCore AB <contact@arccore.com>\r
+ *\r
+ * This source code is free software; you can redistribute it and/or modify it\r
+ * under the terms of the GNU General Public License version 2 as published by the\r
+ * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\r
+ * for more details.\r
+ * -------------------------------- Arctic Core ------------------------------*/\r
+\r
+#include <stdlib.h>\r
+#include "Os.h"\r
+\r
+#include "internal.h"\r
+#include "arc.h"\r
+#include "arch.h"\r
+\r
+\r
+StatusType GetActiveApplicationMode( AppModeType* mode) {\r
+        *mode = os_sys.appMode;\r
+        return E_OK;\r
+}\r
index 8a1e29fdbeb48ed64a2b5b8e921ea897e9ca8465..b882281d50fb2f8da65d2e7ce6dc5dfdb176a19c 100644 (file)
@@ -30,7 +30,7 @@ void interrupt(void) __attribute__((__interrupt__));
 \r
 void interrupt( void ) {\r
 \r
-       apa((void *)0x123);\r
+//     apa((void *)0x123);\r
 }\r
 \r
 \r
@@ -38,11 +38,19 @@ void func1( int a ) {
 \r
 }\r
 \r
+int func3( int a ) {\r
+       if( a == 0) {\r
+               return 5;\r
+       }\r
+       return 4;\r
+}\r
+\r
 int func2( void ) {\r
        int a;\r
        a = 3;\r
 \r
        func1(5);\r
+       func3(0);\r
 \r
        return 2;\r
 }\r
index bab93253c78a78d6f22796edee987359a07d80cb..b17936cdaf983e4b79c958523b4c4a3968b95334 100644 (file)
@@ -58,11 +58,14 @@ static inline struct OsScheduleTableSync *getSync( OsSchTblType *stblPtr ) {
 StatusType IncrementCounter( CounterType counter_id ) {\r
        StatusType rv = E_OK;\r
        OsCounterType *cPtr;\r
+       uint32_t flags;\r
        cPtr = Os_CfgGetCounter(counter_id);\r
 \r
+       Irq_Save(flags);\r
        /** @req OS376 */\r
        if( !IsCounterValid(counter_id) ) {\r
                rv = E_OS_ID;\r
+               Irq_Restore(flags);\r
                goto err;\r
        }\r
 \r
@@ -71,6 +74,7 @@ StatusType IncrementCounter( CounterType counter_id ) {
        if( ( cPtr->type != COUNTER_TYPE_SOFT ) ||\r
                ( counter_id >= Os_CfgGetCounterCnt() ) ) {\r
                rv =  E_OS_ID;\r
+               Irq_Restore(flags);\r
                goto err;\r
        }\r
 \r
@@ -80,6 +84,8 @@ StatusType IncrementCounter( CounterType counter_id ) {
        Os_AlarmCheck(cPtr);\r
        Os_SchTblCheck(cPtr);\r
 \r
+       Irq_Restore(flags);\r
+\r
        /** @req OS321 */\r
        COUNTER_STD_END;\r
 }\r
index 4c7df9f8c810493d0acb4d782ab0c754a65dc93b..e022f2c588c27afba6dd5a026e5b8e56db17aa29 100644 (file)
@@ -44,6 +44,8 @@ StatusType WaitEvent( EventMaskType Mask ) {
        OsPcbType *curr_pcb = get_curr_pcb();\r
        StatusType rv = E_OK;\r
 \r
+       OS_DEBUG(D_EVENT,"# WaitEvent %s\n",Os_TaskGetCurrent()->name);\r
+\r
        if( os_sys.int_nest_cnt != 0 ) {\r
                rv =  E_OS_CALLEVEL;\r
                goto err;\r
@@ -54,7 +56,7 @@ StatusType WaitEvent( EventMaskType Mask ) {
                goto err;\r
        }\r
 \r
-       if ( Os_TaskOccupiesResouces(curr_pcb) ) {\r
+       if ( Os_TaskOccupiesResources(curr_pcb) ) {\r
                rv = E_OS_RESOURCE;\r
                goto err;\r
        }\r
@@ -69,9 +71,9 @@ StatusType WaitEvent( EventMaskType Mask ) {
                curr_pcb->ev_wait = Mask;\r
 \r
                if ( Os_SchedulerResourceIsFree() ) {\r
-                       POSTTASKHOOK();\r
-                       Os_TaskMakeWaiting(curr_pcb);\r
-                       Os_Dispatch(0);\r
+                       // Os_TaskMakeWaiting(curr_pcb);\r
+                       Os_Dispatch(OP_WAIT_EVENT);\r
+                       assert( curr_pcb->state & ST_RUNNING );\r
                } else {\r
                        Os_TaskMakeWaiting(curr_pcb);\r
                }\r
@@ -103,6 +105,8 @@ StatusType SetEvent( TaskType TaskID, EventMaskType Mask ) {
        OsPcbType *currPcbPtr;\r
        uint32_t flags;\r
 \r
+       OS_DEBUG(D_EVENT,"# SetEvent %s\n",Os_TaskGetCurrent()->name);\r
+\r
        if( TaskID  >= Os_CfgGetTaskCnt() ) {\r
                rv = E_OS_ID;\r
                goto err;\r
@@ -110,15 +114,17 @@ StatusType SetEvent( TaskType TaskID, EventMaskType Mask ) {
 \r
        dest_pcb = os_get_pcb(TaskID);\r
 \r
-       if( (dest_pcb->state & ST_SUSPENDED ) ) {\r
-               rv = E_OS_STATE;\r
+#if (OS_STATUS_EXTENDED == STD_ON )\r
+       if( dest_pcb->proc_type != PROC_EXTENDED ) {\r
+               rv = E_OS_ACCESS;\r
                goto err;\r
        }\r
 \r
-       if( dest_pcb->proc_type != PROC_EXTENDED ) {\r
-               rv = E_OS_ACCESS;\r
+       if( (dest_pcb->state & ST_SUSPENDED ) ) {\r
+               rv = E_OS_STATE;\r
                goto err;\r
        }\r
+#endif\r
 \r
        Irq_Save(flags);\r
 \r
@@ -147,12 +153,13 @@ StatusType SetEvent( TaskType TaskID, EventMaskType Mask ) {
                                (dest_pcb->prio > currPcbPtr->prio) &&\r
                                (Os_SchedulerResourceIsFree()) )\r
                        {\r
-                               Os_SetOp(OP_SET_EVENT);\r
-                               Os_Dispatch(0);\r
+                               Os_Dispatch(OP_SET_EVENT);\r
                        }\r
 \r
-               }  else if(dest_pcb->state & ST_READY ) {\r
+               }  else if(dest_pcb->state & (ST_READY|ST_RUNNING) ) {\r
                        /* Hmm, we do nothing */\r
+               } else {\r
+                       assert( 0 );\r
                }\r
        }\r
 \r
@@ -186,8 +193,8 @@ StatusType GetEvent( TaskType TaskId, EventMaskRefType Mask) {
 \r
        dest_pcb = os_get_pcb(TaskId);\r
 \r
-       VALIDATE_W_RV(dest_pcb->state & ST_SUSPENDED,E_OS_STATE);\r
        VALIDATE_W_RV(dest_pcb->proc_type != PROC_EXTENDED,E_OS_ACCESS);\r
+       VALIDATE_W_RV(dest_pcb->state & ST_SUSPENDED,E_OS_STATE);\r
 \r
        *Mask = dest_pcb->ev_set;\r
 \r
index c9d2f48b762362fd762f46f0b8a64a0078671bdf..85479cc5e6dbc951c59c1f2deda01ed7d9dc2334 100644 (file)
 \r
 \r
 #define PRETASKHOOK() \\r
+       assert( os_sys.curr_pcb->state & ST_RUNNING ); \\r
+       assert( os_sys.curr_pcb->flags == SYS_FLAG_HOOK_STATE_EXPECTING_PRE );  \\r
+       os_sys.curr_pcb->flags = SYS_FLAG_HOOK_STATE_EXPECTING_POST;   \\r
        if( os_sys.hooks->PreTaskHook != NULL ) { \\r
                os_sys.hooks->PreTaskHook(); \\r
        }\r
 \r
 #define POSTTASKHOOK() \\r
+       assert( os_sys.curr_pcb->state & ST_RUNNING ); \\r
+       assert( os_sys.curr_pcb->flags == SYS_FLAG_HOOK_STATE_EXPECTING_POST );  \\r
+       os_sys.curr_pcb->flags = SYS_FLAG_HOOK_STATE_EXPECTING_PRE;   \\r
        if( os_sys.hooks->PostTaskHook != NULL ) {      \\r
                os_sys.hooks->PostTaskHook();                   \\r
        }\r
@@ -195,9 +201,22 @@ OsPcbType *os_find_task( TaskType tid );
 // resource.c\r
 void Os_ResourceGetInternal(void );\r
 void Os_ResourceReleaseInternal( void );\r
+void Os_ResourceAlloc( OsResourceType *rPtr, OsPcbType *pcbPtr);\r
+void Os_ResourceFree( OsResourceType *rPtr , OsPcbType *pcbPtr);\r
 \r
 void Os_ResourceInit( void );\r
 \r
+\r
+static inline void Os_ResourceFreeAll( OsPcbType *pcbPtr ) {\r
+       OsResourceType *rPtr;\r
+\r
+       /* Pop the queue */\r
+       TAILQ_FOREACH(rPtr, &pcbPtr->resource_head, listEntry ) {\r
+               Os_ResourceFree(rPtr,pcbPtr);\r
+       }\r
+}\r
+\r
+#if 0\r
 /**\r
  *\r
  * @return 1 - if any resources were found.\r
@@ -220,11 +239,13 @@ static inline _Bool Os_ResourceCheckAndRelease( OsPcbType *pcb )  {
        }\r
        return rv;\r
 }\r
+#endif\r
 \r
-static inline _Bool Os_TaskOccupiesResouces( OsPcbType *pcb ) {\r
+static inline _Bool Os_TaskOccupiesResources( OsPcbType *pcb ) {\r
        return !(TAILQ_EMPTY(&pcb->resource_head));\r
 }\r
 \r
+/*\r
 static inline void Os_GetSchedulerResource() {\r
        os_sys.scheduler_lock = 1;\r
 }\r
@@ -232,13 +253,24 @@ static inline void Os_GetSchedulerResource() {
 static inline void Os_ReleaseSchedulerResource() {\r
        os_sys.scheduler_lock = 0;\r
 }\r
-\r
+*/\r
+/*\r
 static inline _Bool Os_SchedulerResourceIsOccupied() {\r
+#if 0\r
+       return (os_sys.resScheduler.owner != NO_TASK_OWNER );\r
+#else\r
        return (os_sys.scheduler_lock == 1);\r
+#endif\r
 }\r
+*/\r
+#define NO_TASK_OWNER  (TaskType)(~0)\r
 \r
 static inline _Bool Os_SchedulerResourceIsFree() {\r
+#if 1\r
+       return (os_sys.resScheduler.owner == NO_TASK_OWNER );\r
+#else\r
        return (os_sys.scheduler_lock == 0);\r
+#endif\r
 }\r
 \r
 // Create.c\r
@@ -249,7 +281,7 @@ void os_dispatch(void);
 void OsTick( void );\r
 \r
 void *Os_Isr( void *stack, void *pcb_p );\r
-void Os_Dispatch( _Bool force );\r
+void Os_Dispatch( uint32_t op );\r
 \r
 #define STACK_PATTERN  0x42\r
 \r
@@ -274,7 +306,7 @@ static inline _Bool Os_StackIsEndmarkOk( OsPcbType *pcbPtr ) {
        uint8_t *end = pcbPtr->stack.top;\r
        rv =  ( *end == STACK_PATTERN);\r
        if( !rv ) {\r
-               OS_DEBUG(D_TASK,"Stack End Mark is bad for %s curr: %08x curr: %08x\n",\r
+               OS_DEBUG(D_TASK,"Stack End Mark is bad for %s curr: %p curr: %p\n",\r
                                pcbPtr->name,\r
                                pcbPtr->stack.curr,\r
                                pcbPtr->stack.top );\r
index 55640c01c50fbb2734827b3358c8ee23754e80fd..2c7e68c3c6cda83c1ea9d428efca0b7c2e10cc5d 100644 (file)
@@ -72,7 +72,7 @@ extern uint32_t os_dbg_mask;
 #  define OS_DEBUG(_mask,...) \\r
        do { \\r
                if( os_dbg_mask & (_mask) ) { \\r
-                       printf("[%08u] : ",(unsigned)GetOsTick()); \\r
+                       printf("[%08u] : %s %d ",(unsigned)GetOsTick(), __FUNCTION__, __LINE__ ); \\r
                        printf(__VA_ARGS__ );   \\r
                }; \\r
        } while(0);\r
index 6cc2e60c89b699d41ff5a24dfca6746ebb1fed82..9be3c253164c636518c9baa5fb5f88e6ee959bb6 100644 (file)
@@ -114,7 +114,8 @@ typedef struct {
 } OsStackType;\r
 \r
 \r
-\r
+#define SYS_FLAG_HOOK_STATE_EXPECTING_PRE      0\r
+#define SYS_FLAG_HOOK_STATE_EXPECTING_POST   1\r
 \r
 /* We do ISR and TASK the same struct for now */\r
 typedef struct OsPcb {\r
@@ -139,6 +140,8 @@ typedef struct OsPcb {
        OsEventType     ev_wait;                                // TASK\r
        OsEventType     ev_set;                                 // TASK\r
 \r
+       uint32_t                flags;\r
+\r
        enum OsTaskSchedule     scheduling;     // TASK\r
        /* belongs to this application */\r
        struct OsApplication    *application;\r
@@ -161,9 +164,9 @@ typedef struct OsPcb {
 \r
        // What resource that are currently held by this task\r
        // Typically (1<<RES_xxx) | (1<<RES_yyy)\r
-//     uint32_t resourceHolds;\r
+       uint32_t resourceMaskTaken;\r
 \r
-       TAILQ_HEAD(,OsResource) resource_head; // TASK\r
+       TAILQ_HEAD(head,OsResource) resource_head; // TASK\r
 \r
        const struct OsRomPcb *pcb_rom_p;\r
 \r
index 001e615a75da3122df6ed50f80dc92865d24adab..4ac360c40d795687d86dc180123dca5f8486d525 100644 (file)
 \r
 struct os_conf_global_hook_s;\r
 \r
-#define OP_SET_EVENT           1\r
-#define OP_ACTIVATE_TASK       2\r
-\r
+typedef enum  {\r
+       OP_SET_EVENT = 1,\r
+       OP_WAIT_EVENT = 2,\r
+       OP_ACTIVATE_TASK = 4,\r
+       OP_TERMINATE_TASK = 8,\r
+       OP_SCHEDULE = 16,\r
+       OP_CHAIN_TASK = 32,\r
+       OP_RELEASE_RESOURCE = 64,\r
+} OpType ;\r
 \r
 typedef struct sys_s {\r
 //     OsApplicationType *curr_application;\r
@@ -28,6 +34,8 @@ typedef struct sys_s {
        OsPcbType *curr_pcb;\r
        /* List of all tasks */\r
        OsPcbType *pcb_list;\r
+\r
+       OsPcbType *chainedPcbPtr;\r
        /* Interrupt nested count */\r
        uint32 int_nest_cnt;\r
        /* The current operation */\r
@@ -37,7 +45,7 @@ typedef struct sys_s {
        // The os tick\r
        TickType tick;\r
        // 1-The scheduler is locked (by GetResource() or something else)\r
-       int scheduler_lock;\r
+//     int scheduler_lock;\r
        /* Hooks */\r
        struct OsHooks *hooks;\r
 \r
@@ -50,6 +58,8 @@ typedef struct sys_s {
        /* Current Application mode */\r
        AppModeType appMode;\r
 \r
+//     uint32_t flags;\r
+\r
        uint32_t task_cnt;\r
        /* List of all pcb's,\r
         * Only needed for non-static configuration of the kernel\r
@@ -57,18 +67,13 @@ typedef struct sys_s {
        TAILQ_HEAD(,OsPcb) pcb_head;\r
        /* Ready queue */\r
        TAILQ_HEAD(,OsPcb) ready_head;\r
+\r
+       /* Occording to OSEK 8.3 RES_SCHEDULER is accessible to all tasks */\r
+       OsResourceType resScheduler;\r
 } sys_t;\r
 \r
 extern sys_t os_sys;\r
 \r
-static inline void Os_SetOp( uint8_t op) {\r
-       os_sys.op = op;\r
-}\r
-\r
-static inline uint8_t Os_GetOp( void ) {\r
-       return os_sys.op;\r
-}\r
-\r
 static inline OsPcbType *Os_TaskGetCurrent(  void ) {\r
        return os_sys.curr_pcb;\r
 }\r
index 2aba1f80711242cfa63ad891c8d174e9cf605951..b1c2ff3d5d737f891247ca449b98530365c34961 100644 (file)
@@ -43,7 +43,7 @@ static inline void Os_TaskRunningToReady( OsPcbType *pcb ) {
 // ActivateTask(pid)\r
 // SetEvent(pid)\r
 static inline void Os_TaskMakeReady( OsPcbType *pcb ) {\r
-       if( pcb->state != ST_READY ) {\r
+       if( !( pcb->state & ( ST_READY | ST_RUNNING )) ) {\r
                pcb->state = ST_READY;\r
                TAILQ_INSERT_TAIL(& os_sys.ready_head,pcb,ready_list);\r
                OS_DEBUG(D_TASK,"Added %s to ready list\n",pcb->name);\r
@@ -116,7 +116,7 @@ static inline OsPriorityType os_pcb_set_prio( OsPcbType *pcb, OsPriorityType new
 \r
 #define os_pcb_get_state(pcb) ((pcb)->state)\r
 \r
-void os_swap_context(OsPcbType *old_pcb, OsPcbType *new_pcb );\r
+void Os_TaskSwapContext(OsPcbType *old_pcb, OsPcbType *new_pcb );\r
 void Os_TaskSwapContextTo(OsPcbType *old_pcb, OsPcbType *new_pcb );\r
 \r
 \r
index 4acd4552b344fb370862669ba88ddc5da437ad93..6cc513f0fff2231e8af7c7f6204573a7ad825769 100644 (file)
@@ -72,6 +72,7 @@ static void os_pcb_rom_copy( OsPcbType *pcb, const OsRomPcbType *r_pcb ) {
 //     pcb->app = &app_list[r_pcb->app];
 //     pcb->app_mask = app_mask[r_pcb->app];
        strncpy(pcb->name,r_pcb->name,16);
+       pcb->name[15] = '\0';
 }
 
 static _Bool init_os_called = 0;
@@ -199,10 +200,8 @@ static void os_start( void ) {
                os_sys.curr_pcb = tmp_pcb;
 
                // register this auto-start activation
-               if (tmp_pcb->proc_type == PROC_BASIC) {
-                       assert(tmp_pcb->activations < tmp_pcb->activationLimit);
-                       tmp_pcb->activations++;
-               }
+               assert(tmp_pcb->activations < tmp_pcb->activationLimit);
+               tmp_pcb->activations++;
 
                // NOTE! We don't go for os_swap_context() here..
                // first arg(NULL) is dummy only
index 1788618e2aa938547af180629afbebf521d90019..de3bdd1914dadff6897169fdd83e2cb8f450ae21 100644 (file)
@@ -89,6 +89,17 @@ TaskType Os_Arc_CreateIsr( void (*entry)(void ), uint8_t prio, const char *name
        return Os_AddTask(pcb);
 }
 
+/**
+ * Before we have proper editor for ISR2 use this function to add resources
+ * to an ISR2
+ *
+ * @param isr
+ * @param resource
+ * @return
+ */
+StatusType Os_IsrAddResource( TaskType isr, ResourceType resource ) {
+       return E_OK;
+}
 
 #if defined(CFG_ARM_CM3)
 extern void Irq_EOI2( void );
@@ -101,95 +112,89 @@ extern void Irq_EOI2( void );
  * @param stack Ptr to the current stack
  * @param vector The vector that took the interrupt
  */
-void *Os_Isr( void *stack, void *pcb_p ) {
-       struct OsPcb *pcb;
-       struct OsPcb *preempted_pcb;
+void *Os_Isr( void *stack, void *isr_p ) {
+       struct OsPcb *isrPtr;
+       struct OsPcb *pPtr = NULL;
 
        os_sys.int_nest_cnt++;
 
-       // Save info for preempted pcb
-       preempted_pcb = get_curr_pcb();
-       preempted_pcb->stack.curr = stack;
-       preempted_pcb->state = ST_READY;
-       OS_DEBUG(D_TASK,"Preempted %s\n",preempted_pcb->name);
-
-       Os_StackPerformCheck(preempted_pcb);
+       /* Check if we interrupted a task or ISR */
+       if( os_sys.int_nest_cnt == 1 ) {
+               /* We interrupted a task */
+               POSTTASKHOOK();
 
-       POSTTASKHOOK();
+               /* Save info for preempted pcb */
+               pPtr = get_curr_pcb();
+               pPtr->stack.curr = stack;
+               pPtr->state = ST_READY;
+               OS_DEBUG(D_TASK,"Preempted %s\n",pPtr->name);
 
-       pcb = (struct OsPcb *)pcb_p;
-       pcb->state = ST_RUNNING;
-       set_curr_pcb(pcb);
+               Os_StackPerformCheck(pPtr);
+       } else {
+               /* We interrupted an ISR */
+       }
 
-       PRETASKHOOK();
+       /* Grab the ISR "pcb" */
+       isrPtr = (struct OsPcb *)isr_p;
+       isrPtr->state = ST_RUNNING;
 
-       // We should not get here if we're NON
-       if( pcb->scheduling == NON) {
-               // TODO:
-               // assert(0);
-               while(1);
+       if( isrPtr->proc_type & ( PROC_EXTENDED | PROC_BASIC ) ) {
+               assert(0);
        }
 
        Irq_SOI();
 
 #ifndef CFG_HCS12D
        Irq_Enable();
-       pcb->entry();
+       isrPtr->entry();
        Irq_Disable();
 #else
-       pcb->entry();
+       isrPtr->entry();
 #endif
 
+       /* Check so that ISR2 haven't disabled the interrupts */
        /** @req OS368 */
        if( Os_IrqAnyDisabled() ) {
                Os_IrqClearAll();
                ERRORHOOK(E_OS_DISABLEDINT);
        }
 
+       /* Check so that the ISR2 have called ReleaseResource() for each GetResource() */
        /** @req OS369 */
-       Os_ResourceCheckAndRelease(pcb);
+       if( Os_TaskOccupiesResources(isrPtr) ) {
+               Os_ResourceFreeAll(isrPtr);
+               ERRORHOOK(E_OS_RESOURCE);
+       }
 
-       pcb->state = ST_SUSPENDED;
-       POSTTASKHOOK();
+       isrPtr->state = ST_SUSPENDED;
 
        Irq_EOI();
 
        --os_sys.int_nest_cnt;
 
-       // TODO: Check stack check marker....
        // We have preempted a task
-       if( (os_sys.int_nest_cnt == 0) && (os_sys.scheduler_lock==0) ) { //&& is_idle_task() ) {
-               /* If we get here:
-                * - the preempted task is saved with large context.
-                * - We are on interrupt stack..( this function )
-                *
-                * if we find a new task:
-                * - just switch in the new context( don't save the old because
-                *   its already saved )
-                */
-               OsPcbType *new_pcb;
-               new_pcb = Os_TaskGetTop();
+       if( (os_sys.int_nest_cnt == 0) ) {
+
+               OsPcbType *new_pcb  = Os_TaskGetTop();
 
                Os_StackPerformCheck(new_pcb);
 
-               if( new_pcb != preempted_pcb ) {
+               if(     (new_pcb == os_sys.curr_pcb) ||
+                               (os_sys.curr_pcb->scheduling == NON) ||
+                               !Os_SchedulerResourceIsFree() )
+               {
+                       /* Just bring the preempted task back to running */
+                       os_sys.curr_pcb->state = ST_RUNNING;
+                       PRETASKHOOK();
+               } else {
                        OS_DEBUG(D_TASK,"Found candidate %s\n",new_pcb->name);
-//#warning Os_TaskSwapContextTo should call the pretaskswaphook
-// TODO: This shuould go away!!!!
 #if defined(CFG_ARM_CM3)
                        Irq_EOI2();
 #endif
                        Os_TaskSwapContextTo(NULL,new_pcb);
-               } else {
-                       if( new_pcb == NULL ) {
-                               assert(0);
-                       }
-                       preempted_pcb->state = ST_RUNNING;
-                       set_curr_pcb(preempted_pcb);
                }
        } else {
-               set_curr_pcb(preempted_pcb);
-               PRETASKHOOK();
+               /* We have a nested interrupt, do nothing */
        }
 
        return stack;
index 319217c72519ecc132d79fa620216404595aedb6..9ab1ff07cca41844e8197c5f8491e460f5c012fb 100644 (file)
@@ -2,7 +2,7 @@
 \r
 #VPATH += $(ROOTDIR)/arch/arm/arm_cm3/kernel\r
 vpath-y += $(ARCH_PATH-y)/kernel\r
-#obj-y += asm_sample.o\r
+obj-y += asm_sample.o\r
 #CFLAGS_asm_sample.o += -O3\r
 obj-y += arch_krn.o\r
 obj-$(CFG_HCS12D) += arch_irq.o\r
@@ -26,7 +26,7 @@ obj-y += sys_tick.o
 #obj-y += stack.o\r
 obj-y += isr.o\r
 obj-y += os_arctest.o\r
-#obj-y += application.o\r
+obj-y += application.o\r
 \r
 \r
 # These are VERY cpu dependent.. remove\r
index eb047948f9c2920d07d6d89f8dbe75a49b67e739..3c832b75c92f010c17f41b9413e6325dbd72b8b0 100644 (file)
 \r
 #include "Os.h"\r
 #include "internal.h"\r
+#include <assert.h>\r
+#include <string.h>\r
+\r
 \r
 #if !defined(MAX)\r
 #define MAX(_x,_y) (((_x) > (_y)) ? (_x) : (_y))\r
 #endif\r
 \r
+\r
+/*\r
+Resource management at interrupt level is NOT supported\r
+\r
+\r
+Testing\r
+RM:\r
+1. Priority ceiling: Call GetResource() from preemtive\r
+   task and activate a task with higher priority than the ceiling protocol.\r
+   The higher priority task should be swapped in.\r
+2. Verify that you cannot allocate an internal resource with\r
+   a) GetResource()\r
+   b) ReleaseResource()\r
+3. Internal resource. Allocate 1 internal resource to 3 tasks of different\r
+   priorities. Verify that\r
+   a) Higher priority tasks than the group can preement\r
+   b) For tasks which have the same or lower priority as the highest priority within a group,\r
+      the tasks within the group behave like non preemptable tasks ( OSEK 4.6.3)\r
+4. Attempt to release a resource which has a lower ceiling priority\r
+   than the statically assigned priority of the calling task or\r
+   interrupt routine, E_OS_ACCESS\r
+5. The  general  restriction  on  some  system  calls  that  they  are  not  to  be  called  with  resources\r
+  occupied (chapter 8.2) does not apply to internal resources, as internal resources are handled\r
+  within  those  calls.  However,  all  standard  resources  have  to  be  released  before  the  internal\r
+  resource can be released (see chapter 8.2, \93LIFO principle\94).\r
+6. Check LIFO order. Return E_OS_ACCESS if not in LIFO order..\r
+7. Test Os_IsrAddResource().\r
+\r
+\r
+task\r
+- GetResource(RES_SCHEDULER) will lock the scheduler even for ISR2\r
+\r
+TODO:\r
+1. task.resourceAccess is already calculated by BSW builder. This is the bitmask\r
+   of what resources is accessable by the task.\r
+2.\r
+\r
+  task.rsrcAccessMask & (1 << RES_SCHEDULER)\r
+\r
+ *
+ */\r
+\r
 /* INFO\r
  * - If OsTaskSchedule = NON, Task it not preemptable, no internal resource may be assigned to a task\r
  *                       (cause it already have one of prio 32)\r
 #define valid_internal_id() (rPtr->nr < Os_CfgGetResourceCnt()) //&& (rPtr->type == RESOURCE_TYPE_INTERNAL) )\r
 \r
 \r
-static StatusType GetResource_( OsResourceType * );\r
-StatusType ReleaseResource_( OsResourceType * );\r
+void Os_ResourceAlloc( OsResourceType *rPtr, OsPcbType *pcbPtr) {\r
+       /* Save old task prio in resource and set new task prio */\r
+       rPtr->owner = pcbPtr->pid;\r
+       rPtr->old_task_prio = pcbPtr->prio;\r
+       pcbPtr->prio = rPtr->ceiling_priority;\r
+\r
+       if( rPtr->type != RESOURCE_TYPE_INTERNAL ) {\r
+               TAILQ_INSERT_TAIL(&pcbPtr->resource_head, rPtr, listEntry);\r
+       }\r
+}\r
+\r
+void Os_ResourceFree( OsResourceType *rPtr , OsPcbType *pcbPtr) {\r
+       assert( rPtr->owner == pcbPtr->pid );\r
+       rPtr->owner = NO_TASK_OWNER;\r
+       pcbPtr->prio = rPtr->old_task_prio;\r
+\r
+       if( rPtr->type != RESOURCE_TYPE_INTERNAL ) {\r
+               /* The list can't be empty here */\r
+               assert( !TAILQ_EMPTY(&pcbPtr->resource_head) );\r
+\r
+               /* The list should be popped in LIFO order */\r
+               assert( TAILQ_LAST(&pcbPtr->resource_head, head) == rPtr );\r
+\r
+               /* Remove the entry */\r
+               TAILQ_REMOVE(&pcbPtr->resource_head, rPtr, listEntry);\r
+       }\r
+}\r
 \r
 /**\r
  * This call serves to enter critical sections in the code that are\r
@@ -88,26 +158,41 @@ StatusType ReleaseResource_( OsResourceType * );
  * @param ResID\r
  * @return\r
  */\r
+\r
+\r
 StatusType GetResource( ResourceType ResID ) {\r
        StatusType rv = E_OK;\r
+       OsPcbType *pcbPtr = Os_TaskGetCurrent();\r
+       OsResourceType *rPtr;\r
+       uint32_t flags;\r
+\r
+       Irq_Save(flags);\r
 \r
        if( ResID == RES_SCHEDULER ) {\r
-               if ( Os_SchedulerResourceIsOccupied() ) {\r
-                       rv = E_OS_ACCESS;\r
-                       goto err;\r
-               } else {\r
-                       Os_GetSchedulerResource();\r
-               }\r
+\r
+               rPtr = &os_sys.resScheduler;\r
        } else {\r
-               if (ResID >= Os_CfgGetResourceCnt()) {\r
+               /* Check we can access it */\r
+               if( (pcbPtr->resourceAccess & (1<< ResID)) == 0 ) {\r
                        rv = E_OS_ID;\r
                        goto err;\r
                }\r
 \r
-               OsResourceType *rPtr = Os_CfgGetResource(ResID);\r
-               rv = GetResource_(rPtr);\r
+               rPtr = Os_CfgGetResource(ResID);\r
+       }\r
+\r
+       /* Check for invalid configuration */\r
+       if( (rPtr->owner != NO_TASK_OWNER) ||\r
+               (pcbPtr->prio > rPtr->ceiling_priority) )\r
+       {\r
+               rv = E_OS_ACCESS;\r
+               Irq_Restore(flags);\r
+               goto err;\r
        }\r
 \r
+       Os_ResourceAlloc(rPtr,pcbPtr);\r
+       Irq_Restore(flags);\r
+\r
        if (rv != E_OK)\r
                goto err;\r
 \r
@@ -128,163 +213,81 @@ StatusType GetResource( ResourceType ResID ) {
  */\r
 \r
 StatusType ReleaseResource( ResourceType ResID) {\r
-    StatusType rv = E_OK;\r
+       StatusType rv = E_OK;\r
+       OsPcbType *pcbPtr = Os_TaskGetCurrent();\r
+       OsResourceType *rPtr;\r
+       uint32_t flags;\r
 \r
+       Irq_Save(flags);\r
        if( ResID == RES_SCHEDULER ) {\r
-               if ( Os_SchedulerResourceIsFree() ) {\r
-                       rv = E_OS_NOFUNC;\r
-                       goto err;\r
-               } else {\r
-                       Os_ReleaseSchedulerResource();\r
-               }\r
+               rPtr = &os_sys.resScheduler;\r
        } else {\r
-               if (ResID >= Os_CfgGetResourceCnt()) {\r
+               /* Check we can access it */\r
+               if( (pcbPtr->resourceAccess & (1<< ResID)) == 0 ) {\r
                        rv = E_OS_ID;\r
                        goto err;\r
                }\r
-\r
-           OsResourceType *rPtr = Os_CfgGetResource(ResID);\r
-           rv = ReleaseResource_(rPtr);\r
-       }\r
-\r
-       if (rv != E_OK)\r
-           goto err;\r
-\r
-       /* do a rescheduling (in some cases) (see OSEK OS 4.6.1) */\r
-       if ( (Os_TaskGetCurrent()->scheduling == FULL) &&\r
-                (os_sys.int_nest_cnt == 0) &&\r
-                (Os_SchedulerResourceIsFree()) ) {\r
-\r
-               OsPcbType* top_pcb = Os_TaskGetTop();\r
-\r
-               /* only dispatch if some other ready task has higher prio */\r
-               if (top_pcb->prio > Os_TaskGetCurrent()->prio) {\r
-                       long flags;\r
-                       Irq_Save(flags);\r
-                       Os_Dispatch(0);\r
-                       Irq_Restore(flags);\r
-               }\r
-       }\r
-\r
-       OS_STD_END_1(OSServiceId_ReleaseResource,ResID);\r
-}\r
-\r
-\r
-/**\r
- * Internal GetResource function...\r
- *\r
- * @param rPtr\r
- * @return\r
- */\r
-\r
-static StatusType GetResource_( OsResourceType * rPtr ) {\r
-       StatusType rv = E_OK;\r
-\r
-       if( rPtr->nr == RES_SCHEDULER ) {\r
-               // Lock the scheduler\r
-               os_sys.scheduler_lock = 1;\r
+               rPtr = Os_CfgGetResource(ResID);\r
        }\r
 \r
-       /* Check if valid resource */\r
-       if( !valid_standard_id() ) {\r
-               rv = E_OS_ID;\r
+       /* Check for invalid configuration */\r
+       if( rPtr->owner == NO_TASK_OWNER)\r
+       {\r
+               rv = E_OS_NOFUNC;\r
+               Irq_Restore(flags);\r
                goto err;\r
        }\r
 \r
-       /* check if we have access\r
-        * TODO: This gives access to all resources for ISR2s but we should respect the OsIsrResourceRef [0..*] here.\r
-        */\r
-       if ( Os_TaskGetCurrent()->proc_type != PROC_ISR2) {\r
-               if ( !(Os_TaskGetCurrent()->resourceAccess & (1 << rPtr->nr)) ) {\r
-                       rv = E_OS_ACCESS;\r
-                       goto err;\r
-               }\r
-       }\r
-\r
-       /* @req OSEK\r
-        * Attempt to get a resource which is already occupied by any task\r
-     * or ISR, or the statically assigned priority of the calling task or\r
-     * interrupt routine is higher than the calculated ceiling priority,\r
-     * E_OS_ACCESS\r
-        */\r
-       if( (Os_TaskGetCurrent()->prio > rPtr->ceiling_priority )\r
-#if ( OS_SC3 == STD_ON ) || ( OS_SC4 == STD_ON )\r
-               || ( get_curr_application_id() !=  rPtr->application_owner_id)\r
-#endif\r
-               || ( rPtr->owner != (TaskType)(-1)))\r
+       if( (pcbPtr->prio < rPtr->ceiling_priority))\r
        {\r
                rv = E_OS_ACCESS;\r
+               Irq_Restore(flags);\r
                goto err;\r
        }\r
 \r
-       rPtr->owner = get_curr_pid();\r
-       rPtr->old_task_prio = os_pcb_set_prio(Os_TaskGetCurrent() ,rPtr->ceiling_priority);\r
-\r
-       if( rPtr->type != RESOURCE_TYPE_INTERNAL ) {\r
-               TAILQ_INSERT_TAIL(&Os_TaskGetCurrent()->resource_head, rPtr, listEntry);\r
-       }\r
-\r
-       goto ok;\r
-err:\r
-       ERRORHOOK(rv);\r
-ok:\r
-       return rv;\r
-}\r
+       Os_ResourceFree(rPtr,pcbPtr);\r
 \r
+       /* do a rescheduling (in some cases) (see OSEK OS 4.6.1) */\r
+       if ( (pcbPtr->scheduling == FULL) &&\r
+                (os_sys.int_nest_cnt == 0) &&\r
+                (Os_SchedulerResourceIsFree()) ) {\r
 \r
-/**\r
- * Internal release resource..\r
- * @param rPtr\r
- * @return\r
- */\r
-StatusType ReleaseResource_( OsResourceType * rPtr ) {\r
-       if (!valid_standard_id()) {\r
-               return E_OS_ID;\r
-       }\r
+               OsPcbType* top_pcb = Os_TaskGetTop();\r
 \r
-       /* check if we have access\r
-        * TODO: This gives access to all resources for ISR2s but we should respect the OsIsrResourceRef [0..*] here.\r
-        */\r
-       if ( Os_TaskGetCurrent()->proc_type != PROC_ISR2) {\r
-               if ( !(Os_TaskGetCurrent()->resourceAccess & (1 << rPtr->nr)) ) {\r
-                       return E_OS_ACCESS;\r
+               /* only dispatch if some other ready task has higher prio */\r
+               if (top_pcb->prio > Os_TaskGetCurrent()->prio) {\r
+                       Os_Dispatch(OP_RELEASE_RESOURCE);\r
                }\r
        }\r
+       Irq_Restore(flags);\r
 \r
-       /* if we are not holding this resource */\r
-       if (rPtr->owner != Os_TaskGetCurrent()->pid) {\r
-               return E_OS_NOFUNC;\r
-       }\r
-\r
-       // Release it...\r
-       rPtr->owner = (TaskType) (-1);\r
-       TAILQ_REMOVE(&Os_TaskGetCurrent()->resource_head, rPtr, listEntry);\r
-       os_pcb_set_prio(Os_TaskGetCurrent(), rPtr->old_task_prio);\r
-       return E_OK;\r
+       OS_STD_END_1(OSServiceId_ReleaseResource,ResID);\r
 }\r
 \r
 \r
 void Os_ResourceGetInternal( void ) {\r
-       OsResourceType *rt = os_get_resource_int_p();\r
+       OsPcbType *pcbPtr = Os_TaskGetCurrent();\r
+       OsResourceType *rt = pcbPtr->resource_int_p;\r
 \r
        if( rt != NULL ) {\r
                OS_DEBUG(D_RESOURCE,"Get IR proc:%s prio:%u old_task_prio:%u\n",\r
                                get_curr_pcb()->name,\r
                                (unsigned)rt->ceiling_priority,\r
                                (unsigned)rt->old_task_prio);\r
-               GetResource_(rt);\r
+               Os_ResourceAlloc(rt,pcbPtr);\r
        }\r
 }\r
 \r
 void Os_ResourceReleaseInternal( void ) {\r
-       OsResourceType *rt = os_get_resource_int_p();\r
+       OsPcbType *pcbPtr = Os_TaskGetCurrent();\r
+       OsResourceType *rt = pcbPtr->resource_int_p;\r
 \r
        if(  rt != NULL ) {\r
                OS_DEBUG(D_RESOURCE,"Rel IR proc:%s prio:%u old_task_prio:%u\n",\r
                                get_curr_pcb()->name,\r
                                (unsigned)rt->ceiling_priority,\r
                                (unsigned)rt->old_task_prio);\r
-               ReleaseResource_(rt);\r
+               Os_ResourceFree(rt,pcbPtr);\r
        }\r
 }\r
 \r
@@ -301,10 +304,19 @@ void Os_ResourceInit( void ) {
        OsResourceType *rsrc_p;\r
        int topPrio;\r
 \r
+\r
+       /* For now, assign the scheduler resource here */\r
+       os_sys.resScheduler.ceiling_priority = OS_RES_SCHEDULER_PRIO;\r
+       strcpy(os_sys.resScheduler.id,"RES_SCHEDULER");\r
+       os_sys.resScheduler.nr = RES_SCHEDULER;\r
+       os_sys.resScheduler.owner = NO_TASK_OWNER;\r
+\r
        /* Calculate ceiling priority\r
         * We make this as simple as possible. The ceiling priority\r
         * is set to the same priority as the highest priority task that\r
         * access it.\r
+        *\r
+        * Note that this applies both internal and standard resources.\r
         * */\r
        for( int i=0; i < Os_CfgGetResourceCnt(); i++) {\r
                rsrc_p = Os_CfgGetResource(i);\r
@@ -313,33 +325,16 @@ void Os_ResourceInit( void ) {
                for( int pi = 0; pi < Os_CfgGetTaskCnt(); pi++) {\r
 \r
                        pcb_p = os_get_pcb(pi);\r
+\r
+\r
                        if(pcb_p->resourceAccess & (1<<i) ) {\r
                                topPrio = MAX(topPrio,pcb_p->prio);\r
                        }\r
-               }\r
-               rsrc_p->ceiling_priority = topPrio;\r
-       }\r
-\r
 \r
-\r
-       /* From OSEK:\r
-        * Non preemptable tasks are the most common usage of the concept\r
-        * of internal resources; they are tasks with a special internal\r
-        * resource of highest task priority assigned.\r
-        * --> Interpret this as we can set the priority to 32.\r
-        *\r
-        * Assign an internal resource with prio 32 to the tasks\r
-        * with scheduling=NON\r
-        *\r
-        *\r
-        */\r
-#if 0\r
-       for( int i=0; i < Os_CfgGetTaskCnt(); i++) {\r
-               pcb_p = os_get_pcb(i);\r
-               if(pcb_p->scheduling == NON ) {\r
-                       pcb_p->prio = OS_RES_SCHEDULER_PRIO;\r
+                       /* Generator fix, add RES_SCHEDULER */\r
+                       pcb_p->resourceAccess |= (1 << RES_SCHEDULER) ;\r
                }\r
+               rsrc_p->ceiling_priority = topPrio;\r
        }\r
-#endif\r
 }\r
 \r
index 2c0c3faaca59454fe5c33b70690ebe9720660d3a..13b5235272a86e9b8d82422842aa345f7c2bdeda 100644 (file)
@@ -34,23 +34,40 @@ _Bool os_pcb_pid_valid( OsPcbType *restrict pcb ) {
  *\r
  */\r
 void Os_TaskStartExtended( void ) {\r
+\r
        OsPcbType *pcb;\r
 \r
        pcb = Os_TaskGetCurrent();\r
+#if 0\r
        Os_ResourceGetInternal();\r
        Os_TaskMakeRunning(pcb);\r
+#endif\r
 \r
-       PRETASKHOOK();\r
+//     PRETASKHOOK();\r
 \r
        Os_ArchFirstCall();\r
 \r
+       /* We got back without any TerminateTask() or ChainTask()\r
+        *\r
+        * OSEK:\r
+        *    Each task shall terminate itself at the end of its code.\r
+        *    Ending the task without a call to TerminateTask or ChainTask\r
+        *    is strictly forbidden and causes undefined behaviour.\r
+        *\r
+        * Autosar:\r
+        *    OS052, OS069, OS070 and OS239\r
+        * */\r
+\r
        /** @req OS239 */\r
        Irq_Disable();\r
        if( Os_IrqAnyDisabled() ) {\r
                Os_IrqClearAll();\r
        }\r
 \r
-// TODO:Dont I have to check this at terminate task also?\r
+       /** @req OS070 */\r
+       if( Os_TaskOccupiesResources(pcb) ) {\r
+               Os_ResourceFreeAll(pcb);\r
+       }\r
 \r
        /** @req OS069 */\r
        ERRORHOOK(E_OS_MISSINGEND);\r
@@ -65,23 +82,30 @@ void Os_TaskStartExtended( void ) {
  */\r
 \r
 void Os_TaskStartBasic( void ) {\r
+\r
        OsPcbType *pcb;\r
 \r
        pcb = Os_TaskGetCurrent();\r
+#if 0\r
        Os_ResourceGetInternal();\r
        Os_TaskMakeRunning(pcb);\r
+#endif\r
 \r
-       PRETASKHOOK();\r
+//     PRETASKHOOK();\r
 \r
        Os_ArchFirstCall();\r
 \r
-\r
        /** @req OS239 */\r
        Irq_Disable();\r
        if( Os_IrqAnyDisabled() ) {\r
                Os_IrqClearAll();\r
        }\r
 \r
+       /** @req OS070 */\r
+       if( Os_TaskOccupiesResources(pcb) ) {\r
+               Os_ResourceFreeAll(pcb);\r
+       }\r
+\r
        /** @req OS069 */\r
        ERRORHOOK(E_OS_MISSINGEND);\r
 \r
@@ -221,7 +245,7 @@ OsPcbType *Os_TaskGetTop( void ){
        OsPcbType *top_prio_pcb = NULL;\r
        OsPriorityType top_prio = PRIO_ILLEGAL;\r
 \r
-       OS_DEBUG(D_TASK,"os_find_top_prio_proc\n");\r
+//     OS_DEBUG(D_TASK,"os_find_top_prio_proc\n");\r
 \r
        TAILQ_FOREACH(i_pcb,& os_sys.ready_head,ready_list) {\r
                // all ready task are canidates\r
@@ -290,26 +314,78 @@ OsPcbType *Os_FindTopPrioTask( void ) {
  * @param force Force a re-scheduling\r
  *\r
  */\r
-void Os_Dispatch( _Bool force ) {\r
+void Os_Dispatch( uint32_t op ) {\r
        OsPcbType *pcbPtr;\r
-       OsPcbType *currPcbPtr;\r
-       (void)force;\r
+       OsPcbType *currPcbPtr = Os_TaskGetCurrent();\r
 \r
        assert(os_sys.int_nest_cnt == 0);\r
-       assert(os_sys.scheduler_lock == 0 );\r
+       assert(Os_SchedulerResourceIsFree());\r
+\r
+       /* When calling post hook we must still be in ST_RUNNING */\r
+       assert( currPcbPtr->state & ST_RUNNING );\r
+       POSTTASKHOOK();\r
+\r
+       /* Go the correct state for running task */\r
+       if( op  & ( OP_SET_EVENT | OP_SCHEDULE | OP_RELEASE_RESOURCE )) {\r
+               Os_TaskRunningToReady(currPcbPtr);\r
+       } else if( op & OP_WAIT_EVENT ) {\r
+               Os_TaskMakeWaiting(currPcbPtr);\r
+       } else if( op & OP_ACTIVATE_TASK ) {\r
+               Os_TaskMakeReady(currPcbPtr);\r
+       } else if( op & OP_CHAIN_TASK ) {\r
+               assert( os_sys.chainedPcbPtr != NULL );\r
+\r
+               /*  #  from chain  top\r
+                * ----------------------------------------------------------\r
+                *  1    1     1     1    1->RUNNING\r
+                *  2    1     1     2    1->READY,            2->RUNNING\r
+                *  3    1     2     2    1->SUSPENDED/READY*, 2->RUNNING\r
+                *  4    1     2     3    1->SUSPENDED/READY*, 2->READY  , 3-RUNNING\r
+                *\r
+                *  *) Depends on the number of activations.\r
+                *\r
+                *  - Chained task is always READY when coming from ChainTask()\r
+                */\r
+               if( currPcbPtr != os_sys.chainedPcbPtr ) {\r
+                       /* #3 and #4 */\r
+                       --currPcbPtr->activations;\r
+                       if( currPcbPtr->activations <= 0 ) {\r
+                               currPcbPtr->activations = 0;\r
+                               Os_TaskMakeSuspended(currPcbPtr);\r
+                       } else {\r
+                               Os_TaskRunningToReady(currPcbPtr);\r
+                       }\r
+                       /* Chained task is already in READY */\r
+               }\r
+               os_sys.chainedPcbPtr = NULL;\r
+\r
+       } else if( op & OP_TERMINATE_TASK ) {\r
+               /*@req OSEK TerminateTask\r
+                * In case of tasks with multiple activation requests,\r
+                * terminating the current instance of the task automatically puts the next\r
+                * instance of the same task into the ready state\r
+                */\r
+               --currPcbPtr->activations;\r
+\r
+               if( currPcbPtr->activations <= 0 ) {\r
+                       currPcbPtr->activations = 0;\r
+                       Os_TaskMakeSuspended(currPcbPtr);\r
+               }\r
+       } else {\r
+               assert(0);\r
+       }\r
 \r
        pcbPtr = Os_TaskGetTop();\r
-       currPcbPtr = Os_TaskGetCurrent();\r
+\r
+\r
+\r
        /* Swap if we found any process or are forced (multiple activations)*/\r
        if( pcbPtr != currPcbPtr ) {\r
 \r
-               /* Add us to the ready list */\r
-               if( currPcbPtr->state & ST_RUNNING ) {\r
-                       /** @req OS052 */\r
-                       POSTTASKHOOK();\r
+               if( (op & OP_CHAIN_TASK) && ( currPcbPtr == os_sys.chainedPcbPtr ) ) {\r
+                       /* #2 */\r
                        Os_TaskRunningToReady(currPcbPtr);\r
                }\r
-\r
                /*\r
                 * Swap context\r
                 */\r
@@ -327,49 +403,67 @@ void Os_Dispatch( _Bool force ) {
 #endif\r
                }\r
 #endif\r
+               OS_DEBUG(D_TASK,"Swapping to: %s\n",pcbPtr->name);\r
+               Os_TaskSwapContext(currPcbPtr,pcbPtr);\r
 \r
-               Os_ArchSwapContext(currPcbPtr,pcbPtr);\r
+               /* ActivateTask, SetEvent, Schedule, .. */\r
+//             pcbPtr = Os_TaskGetCurrent();\r
+//             Os_TaskMakeRunning(pcbPtr);\r
+//             PRETASKHOOK();\r
 \r
-               pcbPtr = Os_TaskGetCurrent();\r
-               Os_TaskMakeRunning(pcbPtr);\r
-\r
-               Os_ResourceGetInternal();\r
-\r
-               PRETASKHOOK();\r
+//             Os_ResourceGetInternal();\r
 \r
        } else {\r
-               if( Os_GetOp() != OP_SET_EVENT ) {\r
-\r
-                       /* We want to run the same task, again. This only happens\r
-                        * when we have multiple activation of a basic task (\r
-                        * extended tasks have an activation limit of 1)\r
-                        */\r
-\r
-                       /* Setup the stack again, and just call the basic task */\r
-                       Os_StackSetup(pcbPtr);\r
-                       Os_ArchSetSpAndCall(pcbPtr->stack.curr,Os_TaskStartBasic);\r
-               } else {\r
-                       /* Two cases:\r
-                        * 1. SetEvent() on itself\r
-                        * 2. SetEvent()\r
-                        *\r
-                        *\r
-                        * */\r
-\r
-               }\r
+               OS_DEBUG(D_TASK,"Continuing task %s\n",pcbPtr->name);\r
+               /* Setup the stack again, and just call the basic task */\r
+               Os_StackSetup(pcbPtr);\r
+               /* TODO: release and get the internal resource ? */\r
+               Os_TaskMakeRunning(pcbPtr);\r
+               PRETASKHOOK();\r
+               Os_ArchSetSpAndCall(pcbPtr->stack.curr,Os_TaskStartBasic);\r
+               assert(0);\r
        }\r
 }\r
 \r
-// We come here from\r
-// - os_init\r
 \r
-/**\r
- * Called when a task is to be run for the first time.\r
+/*\r
+ * Thoughts on task switching and memory protection\r
+ *\r
+ * If we would have had memory protection:\r
+ * - Applications have their own MMU settings.\r
+ * - Swapping between tasks in same Application does NOT involve the MMU.\r
+ * - When running a non-trusted Application I need will have to:\r
+ *   - Run kernel in supervisor mode.\r
+ *   - Trap the start of each task\r
+ *   - All calls to the kernel will have a trap interface, i.e.  Os_ResourceGetInternal(ActivateTask(TASK_ID_foo);\r
+ *   - An ISR2:\r
+ *     - The interupt is taken, the kernel runs in supervisor mode\r
+ *     - If the ISR2 activates\r
+ *\r
+ * Stack design:\r
+ * ALT1: 1 kernel stack...\r
+ * ALT2:\r
+ *\r
+ *  Do we need virtual memory??\r
  */\r
-void Os_TaskSwapContextTo(OsPcbType *old_pcb, OsPcbType *new_pcb ) {\r
 \r
+void Os_TaskSwapContext(OsPcbType *old_pcb, OsPcbType *new_pcb ) {\r
+       set_curr_pcb(new_pcb);\r
+       Os_ResourceGetInternal();\r
+       Os_TaskMakeRunning(new_pcb);\r
+       /* TODO: The pretask hook is not called with the right stack\r
+        * (it's called on the old task stack, not the new ) */\r
+       PRETASKHOOK();\r
+       Os_ArchSwapContext(old_pcb,new_pcb);\r
+}\r
+\r
+void Os_TaskSwapContextTo(OsPcbType *old_pcb, OsPcbType *new_pcb ) {\r
+       set_curr_pcb(new_pcb);\r
+       Os_ResourceGetInternal();\r
+       Os_TaskMakeRunning(new_pcb);\r
+       PRETASKHOOK();\r
        Os_ArchSwapContextTo(old_pcb,new_pcb);\r
-       /* TODO: When do we return here ?? */\r
+       assert(0);\r
 }\r
 \r
 \r
@@ -384,6 +478,13 @@ void Os_Arc_GetStackInfo( TaskType task, StackInfoType *s) {
 }\r
 \r
 \r
+#define TASK_CHECK_ID(x)                               \\r
+       if( (x) > Os_CfgGetTaskCnt()) { \\r
+               rv = E_OS_ID;                                   \\r
+               goto err;                                               \\r
+       }\r
+\r
+\r
 /**\r
  * Returns the state of a task (running, ready, waiting, suspended)\r
  * at the time of calling GetTaskState.\r
@@ -393,9 +494,13 @@ void Os_Arc_GetStackInfo( TaskType task, StackInfoType *s) {
  */\r
 \r
 StatusType GetTaskState(TaskType TaskId, TaskStateRefType State) {\r
-       state_t curr_state = os_pcb_get_state(os_get_pcb(TaskId));\r
+       state_t curr_state;\r
        StatusType rv = E_OK;\r
 \r
+       TASK_CHECK_ID(TaskId);\r
+\r
+       curr_state = os_pcb_get_state(os_get_pcb(TaskId));\r
+\r
        // TODO: Lazy impl. for now */\r
        switch(curr_state) {\r
        case ST_RUNNING:        *State = TASK_STATE_RUNNING;    break;\r
@@ -418,9 +523,27 @@ StatusType GetTaskState(TaskType TaskId, TaskStateRefType State) {
  * @param task_id Reference to the task which is currently running\r
  * @return\r
  */\r
-StatusType GetTaskID( TaskRefType task_id ) {\r
-       *task_id = os_sys.curr_pcb->pid;\r
-       return E_OK;\r
+StatusType GetTaskID( TaskRefType TaskID ) {\r
+       StatusType rv = E_OK;\r
+       *TaskID = INVALID_TASK;\r
+\r
+\r
+       if( os_sys.curr_pcb->state & ST_RUNNING ) {\r
+               *TaskID = os_sys.curr_pcb->pid;\r
+       } else {\r
+               /* We have no running task, check level */\r
+\r
+               /* Call level is not from the OSEK specification but from the\r
+                * test specification */\r
+               if( os_sys.int_nest_cnt != 0 ) {\r
+                       rv =  E_OS_CALLEVEL;\r
+                       goto err;\r
+               }\r
+       }\r
+err:\r
+    os_error.serviceId= OSServiceId_GetTaskID;\r
+    os_error.param1 = (uint32_t)TaskID;\r
+    return rv;\r
 }\r
 \r
 \r
@@ -435,12 +558,6 @@ ISRType GetISRID( void ) {
        return (ISRType)Os_TaskGetCurrent()->pid;\r
 }\r
 \r
-#define TASK_CHECK_ID(x)                               \\r
-       if( (x) > Os_CfgGetTaskCnt()) { \\r
-               rv = E_OS_ID;                                   \\r
-               goto err;                                               \\r
-       }\r
-\r
 static inline void Os_Arc_SetCleanContext( OsPcbType *pcb ) {\r
        if (pcb->proc_type == PROC_EXTENDED) {\r
                /** @req OSEK ActivateTask Cleanup events\r
@@ -483,51 +600,45 @@ StatusType ActivateTask( TaskType TaskID ) {
        OsPcbType *pcb = os_get_pcb(TaskID);\r
        StatusType rv = E_OK;\r
 \r
-       OS_DEBUG(D_TASK,"ActivateTask %s\n",pcb->name);\r
+       OS_DEBUG(D_TASK,"ActivateTask %s\n",pcb->name);\r
 \r
 #if (OS_STATUS_EXTENDED == STD_ON )\r
+       /* extended */\r
        TASK_CHECK_ID(TaskID);\r
+#endif\r
 \r
+       Irq_Save(msr);\r
        /* @req OS093 ActivateTask */\r
        if( Os_IrqAnyDisabled() ) {\r
+               /* Standard */\r
                rv = E_OS_DISABLEDINT;\r
                goto err;\r
        }\r
-#endif\r
-\r
-       Irq_Save(msr);\r
-\r
-       if( os_pcb_get_state(pcb) == ST_SUSPENDED ) {\r
-               pcb->activations++;\r
-               Os_Arc_SetCleanContext(pcb);\r
-               Os_TaskMakeReady(pcb);\r
-       } else {\r
-\r
-               if( pcb->proc_type == PROC_EXTENDED ) {\r
-                       /** @req OSEK Activate task.\r
-                        * An extended task be activated once. See Chapter 4.3 in OSEK\r
-                        */\r
-                       rv = E_OS_LIMIT;\r
-                       goto err;\r
-               }\r
 \r
+       pcb->activations++;\r
+       if( os_pcb_get_state(pcb) != ST_SUSPENDED ) {\r
                /** @req OSEK_? Too many task activations */\r
-               if( pcb->activations == pcb->activationLimit ) {\r
+               if( pcb->activations >= (pcb->activationLimit + 1) ) {\r
+                       /* Standard */\r
                        rv=E_OS_LIMIT;\r
+                       Irq_Restore(msr);\r
+                       --pcb->activations;\r
                        goto err;\r
-               } else {\r
-                       pcb->activations++;\r
                }\r
+       } else {\r
+               /* We have a suspended task, make it ready for use */\r
+               assert( pcb->activations == 1 );\r
+               Os_Arc_SetCleanContext(pcb);\r
+               Os_TaskMakeReady(pcb);\r
        }\r
 \r
-\r
        /* Preempt only if we are preemptable and target has higher prio than us */\r
        if(     (Os_TaskGetCurrent()->scheduling == FULL) &&\r
                (os_sys.int_nest_cnt == 0) &&\r
                (pcb->prio > Os_TaskGetCurrent()->prio) &&\r
                (Os_SchedulerResourceIsFree()))\r
        {\r
-               Os_Dispatch(0);\r
+               Os_Dispatch(OP_ACTIVATE_TASK);\r
        }\r
 \r
        Irq_Restore(msr);\r
@@ -569,7 +680,7 @@ StatusType TerminateTask( void ) {
        StatusType rv = E_OK;\r
        uint32_t flags;\r
 \r
-       OS_DEBUG(D_TASK,"TerminateTask %s\n",curr_pcb->name);\r
+       OS_DEBUG(D_TASK,"TerminateTask %s\n",curr_pcb->name);\r
 \r
 #if (OS_STATUS_EXTENDED == STD_ON )\r
 \r
@@ -579,60 +690,27 @@ StatusType TerminateTask( void ) {
                goto err;\r
        }\r
 \r
+#if 0\r
        if ( Os_SchedulerResourceIsOccupied() ) {\r
                rv =  E_OS_RESOURCE;\r
                goto err;\r
        }\r
+#endif\r
 \r
-       /** @req OS070 */\r
-       if( Os_ResourceCheckAndRelease(curr_pcb) == 1 ) {\r
+       if( Os_TaskOccupiesResources(curr_pcb) ) {\r
+               /* Note! Do NOT release the resource here */\r
                rv =  E_OS_RESOURCE;\r
                goto err;\r
-\r
        }\r
 \r
-\r
 #endif\r
-\r
-\r
        Irq_Save(flags);\r
 \r
-       --curr_pcb->activations;\r
-\r
-\r
-//     assert(curr_pcb->activations>=0);\r
-\r
-       /*@req OSEK TerminateTask\r
-        * In case of tasks with multiple activation requests,\r
-        * terminating the current instance of the task automatically puts the next\r
-        * instance of the same task into the ready state\r
-        */\r
-       if( curr_pcb->activations <= 0 ) {\r
-               curr_pcb->activations = 0;\r
-               POSTTASKHOOK();\r
-               Os_TaskMakeSuspended(curr_pcb);\r
-       } else {\r
-               /* We need to add ourselves to the ready list again,\r
-                * with a startup context. */\r
-\r
-               /* We are already in ready list..\r
-                * This should give us a clean start /tojo */\r
-               Os_Arc_SetCleanContext(curr_pcb);\r
-       }\r
-\r
-//     Os_ContextReInit(curr_pcb);\r
-\r
        /* Force the dispatcher to find something, even if its us */\r
-       Os_Dispatch(1);\r
+       Os_Dispatch(OP_TERMINATE_TASK);\r
 \r
-       Irq_Restore(flags);\r
-       // It must find something here...otherwise something is very wrong..\r
        assert(0);\r
 \r
-       rv = E_NOT_OK;\r
-       goto err;\r
-\r
-\r
        OS_STD_END(OSServiceId_TerminateTask);\r
 }\r
 \r
@@ -640,74 +718,69 @@ StatusType ChainTask( TaskType TaskId ) {
        OsPcbType *curr_pcb = Os_TaskGetCurrent();\r
        StatusType rv = E_OK;\r
        uint32_t flags;\r
+       OsPcbType *pcb = os_get_pcb(TaskId);\r
+\r
+\r
+       OS_DEBUG(D_TASK,"# ChainTask %s\n",curr_pcb->name);\r
 \r
 #if (OS_STATUS_EXTENDED == STD_ON )\r
+       /* extended */\r
        TASK_CHECK_ID(TaskId);\r
 \r
        if( os_sys.int_nest_cnt != 0 ) {\r
-               rv =  E_OS_CALLEVEL;\r
+               /* extended */\r
+               rv = E_OS_CALLEVEL;\r
+               Irq_Restore(flags);\r
                goto err;\r
        }\r
 \r
+#endif\r
+\r
+       Irq_Save(flags);\r
+\r
+#if (OS_STATUS_EXTENDED == STD_ON )\r
+#if 0\r
        if ( Os_SchedulerResourceIsOccupied() ) {\r
-               rv =  E_OS_RESOURCE;\r
+               /* extended */\r
+               rv = E_OS_RESOURCE;\r
+               Irq_Restore(flags);\r
                goto err;\r
        }\r
+#endif\r
 \r
-       if( Os_ResourceCheckAndRelease(curr_pcb) == 1 ) {\r
-               rv =  E_OS_RESOURCE;\r
+       if( Os_TaskOccupiesResources(curr_pcb) ) {\r
+               /* extended */\r
+               rv = E_OS_RESOURCE;\r
+               Irq_Restore(flags);\r
                goto err;\r
        }\r
 #endif\r
-       OsPcbType *pcb = os_get_pcb(TaskId);\r
-\r
-       Irq_Save(flags);\r
-\r
-       if (curr_pcb == pcb) {\r
-               /* If we are chaining same task just make a clean start */\r
-               /* TODO: Is it allowed to chain same task if extended? */\r
-               Os_Arc_SetCleanContext(curr_pcb);\r
-\r
-               /* Force the dispatcher to find something, even if its us */\r
-               Os_Dispatch(1);\r
-\r
-               Irq_Restore(flags);\r
-               /* It must find something here...otherwise something is very wrong.. */\r
-               assert(0);\r
-\r
-       } else {\r
-               /* We are chaining another task\r
-                * We need to make sure it is in valid state */\r
-               if( os_pcb_get_state(pcb) != ST_SUSPENDED ) {\r
-                       if( pcb->proc_type == PROC_EXTENDED ) {\r
-                               /** @req OSEK Activate task.\r
-                                * An extended task be activated once. See Chapter 4.3 in OSEK */\r
-                               rv = E_OS_LIMIT;\r
-                               goto err;\r
-                       }\r
 \r
-                       /** @req OSEK_? Too many task activations */\r
-                       if( pcb->activations == pcb->activationLimit ) {\r
-                               rv=E_OS_LIMIT;\r
-                               goto err;\r
-                       }\r
+//     if( os_pcb_get_state(pcb) != ST_SUSPENDED ) {\r
+       if (curr_pcb != pcb) {\r
+               /** @req OSEK_? Too many task activations */\r
+               if( (pcb->activations + 1) >  pcb->activationLimit ) {\r
+                       /* standard */\r
+                       rv = E_OS_LIMIT;\r
+                       Irq_Restore(flags);\r
+                       goto err;\r
                }\r
 \r
-               // Terminate current task\r
-               --curr_pcb->activations;\r
-               if( curr_pcb->activations <= 0 ) {\r
-                       curr_pcb->activations = 0;\r
-                       POSTTASKHOOK();\r
-                       Os_TaskMakeSuspended(curr_pcb);\r
+               if( os_pcb_get_state(pcb) == ST_SUSPENDED ) {\r
+                       assert( pcb->activations == 0 );\r
+                       Os_Arc_SetCleanContext(pcb);\r
+                       Os_TaskMakeReady(pcb);\r
                }\r
 \r
-               rv = ActivateTask(TaskId);\r
-               // we return here only if something is wrong\r
+               pcb->activations++;\r
+\r
        }\r
 \r
-       Irq_Restore(flags);\r
+       os_sys.chainedPcbPtr = pcb;\r
+\r
+       Os_Dispatch(OP_CHAIN_TASK);\r
 \r
-       if (rv != E_OK) goto err;\r
+       assert( 0 );\r
 \r
        OS_STD_END_1(OSServiceId_ChainTask,TaskId);\r
 }\r
@@ -725,10 +798,11 @@ StatusType ChainTask( TaskType TaskId ) {
  *\r
  */\r
 StatusType Schedule( void ) {\r
-//     OsPcbType *pcb;\r
-//     OsPcbType *curr_pcb = get_curr_pcb();\r
        StatusType rv = E_OK;\r
        uint32_t flags;\r
+       OsPcbType *curr_pcb = get_curr_pcb();\r
+\r
+       OS_DEBUG(D_TASK,"# Schedule %s\n",Os_TaskGetCurrent()->name);\r
 \r
        /* Check that we are not calling from interrupt context */\r
        if( os_sys.int_nest_cnt != 0 ) {\r
@@ -736,6 +810,13 @@ StatusType Schedule( void ) {
                goto err;\r
        }\r
 \r
+       if ( Os_TaskOccupiesResources(curr_pcb) ) {\r
+               rv = E_OS_RESOURCE;\r
+               goto err;\r
+       }\r
+\r
+       assert( Os_TaskGetCurrent()->state & ST_RUNNING );\r
+\r
        /* We need to figure out if we have an internal resource,\r
         * otherwise no re-scheduling.\r
         * NON  - Have internal resource prio OS_RES_SCHEDULER_PRIO (32+)\r
@@ -746,21 +827,14 @@ StatusType Schedule( void ) {
                return E_OK;\r
        }\r
 \r
-#if 0\r
-       if( os_get_resource_int_p() == NULL ) {\r
-               /* We do nothing */\r
-               return E_OK;\r
-       }\r
-#endif\r
-\r
+       Irq_Save(flags);\r
        OsPcbType* top_pcb = Os_TaskGetTop();\r
        /* only dispatch if some other ready task has higher prio */\r
        if (top_pcb->prio > Os_TaskGetCurrent()->prio) {\r
-               Irq_Save(flags);\r
-               Os_Dispatch(0);\r
-               Irq_Restore(flags);\r
+               Os_Dispatch(OP_SCHEDULE);\r
        }\r
 \r
+       Irq_Restore(flags);\r
        // Prevent label warning. Remove this when proper error handling is implemented.\r
        if (0) goto err;\r
 \r
index 20c9b7693118f43aa311183ea7198a144eccafd0..2149d2d561f3be257f97c85dbfd44f786895cec1 100644 (file)
@@ -2,7 +2,7 @@
 # Figure out the most of the modules to use.\r
 \r
 OPTIMAL_USE = RAMLOG\r
-MOD_USE+=KERNEL MCU  DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+MOD_USE+=KERNEL MCU DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
 $(warning $(MOD_USE)) \r
 #MOD_USE+=KERNEL MCU T32_TERM SIMPLE_PRINTF RAMLOG\r
 \r
diff --git a/system/kernel/testsystem/osek_01_tm/Os_Cfg.c b/system/kernel/testsystem/osek_01_tm/Os_Cfg.c
new file mode 100644 (file)
index 0000000..1942d39
--- /dev/null
@@ -0,0 +1,206 @@
+/* 
+* Configuration of module Os (Os_Cfg.c)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.10
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Sun Oct 10 21:14:06 CEST 2010
+*/
+
+       \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h"                                // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ###############################    DEBUG OUTPUT     #############################\r
+uint32 os_dbg_mask = 0;\r
\r
+\r
+\r
+// #################################    COUNTERS     ###############################\r
+GEN_COUNTER_HEAD {\r
+       GEN_COUNTER(    COUNTER_ID_Counter1,\r
+                                       "Counter1",\r
+                                       COUNTER_TYPE_HARD,\r
+                                       COUNTER_UNIT_NANO,\r
+                                       0xffff,\r
+                                       1,\r
+                                       0,\r
+                                       0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ##################################    ALARMS     ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################    RESOURCES     ###############################\r
+GEN_RESOURCE_HEAD {\r
+       GEN_RESOURCE(\r
+               RES_ID_std_1,\r
+               RESOURCE_TYPE_STANDARD,\r
+               0\r
+       ),\r
+};\r
+\r
+// ##############################    STACKS (TASKS)     ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(btask_m_non,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+DECLARE_STACK(etask_m_full_2,2048);\r
+\r
+// ##################################    TASKS     #################################\r
+GEN_TASK_HEAD {\r
+       GEN_ETASK(      OsIdle,\r
+                               0,\r
+                               FULL,\r
+                               TRUE,\r
+                               NULL,\r
+                               0 \r
+       ),\r
+       GEN_BTASK(\r
+               btask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_ll_non,\r
+               3,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_m_full,\r
+               5,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_m_non,\r
+               1,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_ETASK(\r
+               etask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full,\r
+               5,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               RES_MASK_std_1 | 0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full_2,\r
+               5,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+};\r
+\r
+// ##################################    HOOKS     #################################\r
+GEN_HOOKS( \r
+       StartupHook, \r
+       NULL, \r
+       ShutdownHook, \r
+       ErrorHook,\r
+       PreTaskHook, \r
+       PostTaskHook \r
+);\r
+\r
+// ##################################    ISRS     ##################################\r
+\r
+\r
+// ############################    SCHEDULE TABLES     #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
diff --git a/system/kernel/testsystem/osek_01_tm/Os_Cfg.h b/system/kernel/testsystem/osek_01_tm/Os_Cfg.h
new file mode 100644 (file)
index 0000000..8c65441
--- /dev/null
@@ -0,0 +1,95 @@
+/* 
+* Configuration of module Os (Os_Cfg.h)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.10
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Sun Oct 10 21:14:06 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2) 
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1    0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go  1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_std_1   0\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_std_1 (1 << 0)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full   1\r
+#define TASK_ID_btask_l_full   2\r
+#define TASK_ID_btask_ll_non   3\r
+#define TASK_ID_btask_m_full   4\r
+#define TASK_ID_btask_m_non    5\r
+#define TASK_ID_etask_h_full   6\r
+#define TASK_ID_etask_l_full   7\r
+#define TASK_ID_etask_m_full   8\r
+#define TASK_ID_etask_m_full_2 9\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void btask_m_non( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+void etask_m_full_2( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE        2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT                   0 \r
+#define OS_TASK_CNT                            10\r
+#define OS_SCHTBL_CNT                  0\r
+#define OS_COUNTER_CNT                 1\r
+#define OS_EVENTS_CNT                  1\r
+#define OS_ISRS_CNT                            0\r
+#define OS_RESOURCE_CNT                        1\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG                           STD_OFF\r
+\r
+#define OS_SC1                                                 STD_ON     \r
+#define OS_STACK_MONITORING                    STD_ON\r
+#define OS_STATUS_EXTENDED                     STD_ON\r
+#define OS_USE_GET_SERVICE_ID          STD_ON\r
+#define OS_USE_PARAMETER_ACCESS                STD_ON\r
+#define OS_RES_SCHEDULER                       STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
diff --git a/system/kernel/testsystem/osek_01_tm/build_config.mk b/system/kernel/testsystem/osek_01_tm/build_config.mk
new file mode 100644 (file)
index 0000000..b574ebe
--- /dev/null
@@ -0,0 +1,5 @@
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
diff --git a/system/kernel/testsystem/osek_01_tm/config_tm_01.arxml b/system/kernel/testsystem/osek_01_tm/config_tm_01.arxml
new file mode 100644 (file)
index 0000000..6b2e361
--- /dev/null
@@ -0,0 +1,433 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.2">\r
+  <TOP-LEVEL-PACKAGES>\r
+    <AR-PACKAGE UUID="e56d23e8-11ff-4651-ae2a-9f83a280d47c">\r
+      <SHORT-NAME>config_tm_01</SHORT-NAME>\r
+      <CATEGORY>EcuConfiguration</CATEGORY>\r
+      <ADMIN-DATA>\r
+        <DOC-REVISIONS>\r
+          <DOC-REVISION>\r
+            <ISSUED-BY />\r
+          </DOC-REVISION>\r
+        </DOC-REVISIONS>\r
+      </ADMIN-DATA>\r
+      <ELEMENTS>\r
+        <ECU-CONFIGURATION UUID="29046d7d-db8b-4f92-afcf-525554458435">\r
+          <SHORT-NAME>config_tm_01</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <DOC-REVISIONS>\r
+              <DOC-REVISION />\r
+            </DOC-REVISIONS>\r
+            <SDGS>\r
+              <SDG GID="Arccore::EcuOptions">\r
+                <SD GID="MCU">Undefined MCU</SD>\r
+                <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_01_tm</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <MODULE-REFS>\r
+            <MODULE-REF DEST="MODULE-CONFIGURATION">/config_tm_01/Os</MODULE-REF>\r
+          </MODULE-REFS>\r
+        </ECU-CONFIGURATION>\r
+        <MODULE-CONFIGURATION UUID="e3a90a5a-3a2c-4b90-82fa-498d4bf14895">\r
+          <SHORT-NAME>Os</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <SDGS>\r
+              <SDG />\r
+              <SDG GID="Arccore::ModuleOptions">\r
+                <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+                <SD GID="ARCCORE_EDITOR_VERSION">2.0.7</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+          <CONTAINERS>\r
+            <CONTAINER UUID="46e7afa2-40d4-4969-9216-dbb68fd7dc71">\r
+              <SHORT-NAME>OsOS</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+                  <VALUE>1000</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+                  <VALUE>512</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="5c123a65-e644-421a-be3b-62886c189f46">\r
+                  <SHORT-NAME>OsHooks</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="179b1eed-bae4-4ff9-8101-c81794d849be">\r
+              <SHORT-NAME>etask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>6</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="c7934bf2-d3cf-4df2-822a-c872121dcd2b">\r
+              <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_tm_01/Os/std_1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="b1f99972-b3c7-41ec-a1ec-0d4dbe6b2e73">\r
+                  <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="2f0895f3-1d8a-4169-8fe1-105ff68a3a5a">\r
+              <SHORT-NAME>etask_l_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="f120ab09-188b-463b-a9e4-94f60e84f125">\r
+              <SHORT-NAME>btask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>6</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="c3213aac-578d-4870-9e2a-7b0a731f9ae3">\r
+              <SHORT-NAME>btask_m_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="9de6649a-e85b-4a49-a9f4-5055e02480ca">\r
+              <SHORT-NAME>btask_l_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="47b32026-3fe6-4fd5-b26e-fb0faa6bdac3">\r
+              <SHORT-NAME>btask_ll_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>3</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="de75266a-d9ea-4225-803f-b8bc02a446bf">\r
+              <SHORT-NAME>go</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="83c2a703-f295-4d91-b3c7-46bc6913e80e">\r
+              <SHORT-NAME>Counter1</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+                  <VALUE>65535</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+                  <VALUE>OS_TICK</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="92cc71da-7618-4431-90e4-f8451031d2e7">\r
+              <SHORT-NAME>btask_m_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="7f3d401c-7ca7-48e6-8686-bcb663fd878c">\r
+              <SHORT-NAME>etask_m_full_2</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="84a2cc88-79f3-45cd-bc3b-afcd525ba482">\r
+              <SHORT-NAME>std_1</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+                  <VALUE>STANDARD</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+          </CONTAINERS>\r
+        </MODULE-CONFIGURATION>\r
+      </ELEMENTS>\r
+    </AR-PACKAGE>\r
+  </TOP-LEVEL-PACKAGES>\r
+</AUTOSAR>\r
+\r
diff --git a/system/kernel/testsystem/osek_01_tm/makefile b/system/kernel/testsystem/osek_01_tm/makefile
new file mode 100644 (file)
index 0000000..9f51dbe
--- /dev/null
@@ -0,0 +1,60 @@
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += test_tm_01.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/system/kernel/testsystem/osek_01_tm/test_tm_01.c b/system/kernel/testsystem/osek_01_tm/test_tm_01.c
new file mode 100644 (file)
index 0000000..05101a2
--- /dev/null
@@ -0,0 +1,1053 @@
+/*\r
+ * test.c\r
+ *\r
+ *  Created on: 4 aug 2010\r
+ *      Author: mahi\r
+ */\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+/*\r
+ * This file tests test requirements OSEK_TM_XX for non-\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l  - low prio\r
+ * m  - medium\r
+ * h  - high prio\r
+ */\r
+\r
+\r
+enum OsekFixtureNr {\r
+       OSEK_TM_01 = 1,\r
+       OSEK_TM_02,\r
+       OSEK_TM_03,\r
+       OSEK_TM_04,\r
+       OSEK_TM_05,\r
+       OSEK_TM_06,\r
+       OSEK_TM_07,\r
+       OSEK_TM_08,\r
+       OSEK_TM_09,\r
+       OSEK_TM_10,\r
+       OSEK_TM_11,\r
+       OSEK_TM_12,\r
+       OSEK_TM_13,\r
+       OSEK_TM_14,\r
+       OSEK_TM_15,\r
+       OSEK_TM_16,\r
+       OSEK_TM_17,\r
+       OSEK_TM_18,\r
+       OSEK_TM_19,\r
+       OSEK_TM_20,\r
+       OSEK_TM_21,\r
+       OSEK_TM_22,\r
+       OSEK_TM_23,\r
+       OSEK_TM_24,\r
+       OSEK_TM_25,\r
+       OSEK_TM_26,\r
+       OSEK_TM_27,\r
+       OSEK_TM_28,\r
+       OSEK_TM_29,\r
+       OSEK_TM_30,\r
+       OSEK_TM_31,\r
+       OSEK_TM_32,\r
+       OSEK_TM_33,\r
+       OSEK_TM_34,\r
+       OSEK_TM_35,\r
+       OSEK_TM_36,\r
+       OSEK_TM_37,\r
+       OSEK_TM_38,\r
+       OSEK_TM_39,\r
+       OSEK_TM_40,\r
+       OSEK_TM_41,\r
+       OSEK_TM_42,\r
+       OSEK_TM_43,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static uint8_t activations = 0;\r
+\r
+\r
+static void isrSoftInt0( void ) {\r
+       StatusType rv;\r
+       TaskType taskId;\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_20:\r
+               TEST_SET_FIXTURE(OSEK_TM_20, SEQ_NR_02);\r
+               rv = TerminateTask();\r
+               TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+               TEST_SET_FIXTURE(OSEK_TM_20, SEQ_NR_03);\r
+               break;\r
+       case OSEK_TM_25:\r
+               TEST_SET_FIXTURE(OSEK_TM_25, SEQ_NR_02);\r
+               rv = ChainTask(TASK_ID_OsIdle);\r
+               TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+               TEST_SET_FIXTURE(OSEK_TM_25, SEQ_NR_03);\r
+               break;\r
+       case OSEK_TM_35:\r
+               TEST_SET_FIXTURE(OSEK_TM_35, SEQ_NR_02);\r
+               rv = Schedule();\r
+               TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+               TEST_SET_FIXTURE(OSEK_TM_35, SEQ_NR_03);\r
+               break;\r
+       case OSEK_TM_37:\r
+               TEST_SET_FIXTURE(OSEK_TM_37, SEQ_NR_02);\r
+               rv = GetTaskID(&taskId);\r
+               TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+               TEST_SET_FIXTURE(OSEK_TM_37, SEQ_NR_03);\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+\r
+void OsIdle(void) {\r
+       while(1);\r
+}\r
+\r
+void etask_m_none ( void ) {\r
+       StatusType rv;\r
+       // 2. Call ActivateTask() from non-preemptive task on basic task\r
+       rv = ActivateTask(TASK_ID_btask_m_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+}\r
+\r
+/*\r
+ * ActivationLimit = 2
+ */\r
+void btask_l_full(void) {\r
+       StatusType rv;\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_04:\r
+               TEST_SET_FIXTURE(OSEK_TM_04, SEQ_NR_03);\r
+               break;\r
+       case OSEK_TM_10:\r
+               activations++;\r
+               switch( activations ) {\r
+               case 1:\r
+                       TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_02);\r
+                       break;\r
+               case 2:\r
+                       TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_03);\r
+                       break;\r
+               default:\r
+                       TEST_ASSERT( 0 );\r
+               }\r
+               break;\r
+       case OSEK_TM_13:\r
+       {       /* 2 activations */\r
+               activations++;\r
+               break;\r
+       }\r
+       case OSEK_TM_28:\r
+               TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_05 );\r
+               rv = SetEvent( TASK_ID_etask_m_full,EVENT_MASK_go );\r
+               break;\r
+       case OSEK_TM_30:\r
+               activations++;\r
+               if( activations == 1) {\r
+                       TEST_SET_FIXTURE(OSEK_TM_30, SEQ_NR_02);\r
+               } else if( activations == 2) {\r
+                       TEST_SET_FIXTURE(OSEK_TM_30, SEQ_NR_03);\r
+               } else {\r
+                       TEST_ASSERT( 0 );\r
+               }\r
+               break;\r
+       case OSEK_TM_32:\r
+               activations++;\r
+               if( activations == 1) {\r
+                       TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_05);\r
+               } else if( activations == 2) {\r
+                       TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_06);\r
+               } else {\r
+                       TEST_ASSERT( 0 );\r
+               }\r
+               break;\r
+       case OSEK_TM_33:\r
+               TEST_SET_FIXTURE(OSEK_TM_33, SEQ_NR_02);\r
+               rv = ChainTask( TASK_ID_etask_m_full );\r
+               TEST_ASSERT( rv == E_OS_LIMIT );\r
+               TEST_SET_FIXTURE(OSEK_TM_33, SEQ_NR_03);\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+       TerminateTask();\r
+}\r
+\r
+/*\r
+ * ActivationLimit = 2
+ */\r
+void btask_m_full( void ) {\r
+       StatusType rv;\r
+       TaskType taskId;\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_05:\r
+               TEST_SET_FIXTURE(OSEK_TM_05, SEQ_NR_03);\r
+               break;\r
+\r
+       case OSEK_TM_14:\r
+               activations++;\r
+               switch(activations) {\r
+               case 1:\r
+                       TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_03 );\r
+                       break;\r
+               case 2:\r
+                       TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_04 );\r
+                       break;\r
+               default:\r
+                       TEST_ASSERT( 0 );\r
+               }\r
+               break;\r
+       case OSEK_TM_15:\r
+               activations++;\r
+               switch(activations) {\r
+               case 1:\r
+                       rv = GetTaskID(&taskId);\r
+                       TEST_ASSERT(rv == E_OK);\r
+                       /* Activate ourself */\r
+                       rv = ActivateTask(taskId);\r
+                       TEST_ASSERT(rv == E_OK);\r
+\r
+                       rv = ActivateTask(taskId);\r
+                       TEST_ASSERT(rv == E_OS_LIMIT);\r
+                       TEST_SET_FIXTURE(OSEK_TM_15, SEQ_NR_02);\r
+                       break;\r
+\r
+               case 2:\r
+                       TEST_SET_FIXTURE(OSEK_TM_15, SEQ_NR_03);\r
+\r
+                       /* back to test task */\r
+                       rv = SetEvent(TASK_ID_etask_m_full, EVENT_MASK_go );\r
+                       TEST_ASSERT( rv == E_OK );\r
+                       break;\r
+\r
+               default:\r
+                       TEST_ASSERT( 0 );\r
+                       break;\r
+               }\r
+               break;\r
+       case OSEK_TM_28:\r
+               TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+       TerminateTask();\r
+}\r
+\r
+void etask_h_full( void ) {\r
+       StatusType rv;\r
+       switch(TestWorld.fixtureNr) {\r
+       case OSEK_TM_06:\r
+               TEST_SET_FIXTURE(OSEK_TM_06, SEQ_NR_02 );\r
+               break;\r
+       case OSEK_TM_07:\r
+               TEST_SET_FIXTURE(OSEK_TM_07, SEQ_NR_02 );\r
+               break;\r
+       case OSEK_TM_19:\r
+               TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_02 );\r
+               rv = WaitEvent(EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+               rv = ClearEvent(EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       }\r
+       TerminateTask();\r
+}\r
+\r
+void etask_l_full( void ) {\r
+\r
+       switch(TestWorld.fixtureNr) {\r
+       case OSEK_TM_08:\r
+               TEST_SET_FIXTURE(OSEK_TM_08, SEQ_NR_03 );\r
+               break;\r
+       case OSEK_TM_11:\r
+               TEST_SET_FIXTURE(OSEK_TM_11, SEQ_NR_03 );\r
+               break;\r
+       case OSEK_TM_31:\r
+               TEST_SET_FIXTURE(OSEK_TM_31, SEQ_NR_03 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       }\r
+       TerminateTask();\r
+}\r
+\r
+void btask_h_full( void ) {\r
+       StatusType rv;\r
+       TaskType taskId;\r
+\r
+       switch(TestWorld.fixtureNr) {\r
+       case OSEK_TM_02:\r
+               TEST_SET_FIXTURE(OSEK_TM_02, SEQ_NR_02 );\r
+               break;\r
+       case OSEK_TM_03:\r
+               TEST_SET_FIXTURE(OSEK_TM_03, SEQ_NR_02 );\r
+               break;\r
+       case OSEK_TM_10:\r
+               TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_02 );\r
+               break;\r
+       case OSEK_TM_12:\r
+               TEST_SET_FIXTURE(OSEK_TM_12, SEQ_NR_03 );\r
+               break;\r
+       case OSEK_TM_28:\r
+               TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_02 );\r
+               rv = ActivateTask( TASK_ID_btask_m_full);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_03 );\r
+               /* Terminate this task an:\r
+                * 1. run m task\r
+                * 2. run l task\r
+                */\r
+               rv = ChainTask( TASK_ID_btask_l_full );\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       case OSEK_TM_29:\r
+               activations++;\r
+               if( activations == 1) {\r
+                       TEST_SET_FIXTURE(OSEK_TM_29, SEQ_NR_02 );\r
+                       rv = GetTaskID(&taskId);\r
+                       TEST_ASSERT( rv == E_OK );\r
+                       rv = ChainTask( taskId );\r
+                       TEST_ASSERT( 0 );\r
+               } else if(activations == 2) {\r
+                       TEST_SET_FIXTURE(OSEK_TM_29, SEQ_NR_03 );\r
+               } else {\r
+                       TEST_ASSERT( 0 );\r
+               }\r
+               break;\r
+       case OSEK_TM_32:\r
+               TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+       TerminateTask();\r
+}\r
+\r
+void etask_m_full_2( void ) {\r
+\r
+       switch(TestWorld.fixtureNr) {\r
+       case OSEK_TM_09:\r
+               TEST_SET_FIXTURE(OSEK_TM_09, SEQ_NR_03 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       }\r
+\r
+       TerminateTask();\r
+}\r
+\r
+\r
+/**\r
+ * Task used for scheduling only.
+ */\r
+void btask_ll_non( void ) {\r
+       StatusType rv;\r
+       /* Used for scheduling ONLY */\r
+       rv = SetEvent(TASK_ID_etask_m_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+/* Terminate a lower-priority task.\r
+ *\r
+ *\r
+ * */\r
+void TestTaskRunLowerPrio( void ) {\r
+       StatusType rv;\r
+       /* Activate lowest prioriy task */\r
+       rv = ActivateTask(TASK_ID_btask_ll_non);\r
+       TEST_ASSERT( rv == E_OK );\r
+       /* Let the low prio task run */\r
+       rv = WaitEvent(EVENT_MASK_go);\r
+       rv = ClearEvent(EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+void TestActivateAndWait( TaskType task ) {\r
+       StatusType rv;\r
+       rv = ActivateTask(task);\r
+       TEST_ASSERT( rv == E_OK );\r
+       /* Let the low prio task run */\r
+       rv = WaitEvent(EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent(EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_m_non( void ) {\r
+       StatusType rv;\r
+       EventMaskType mask;\r
+       testNrNon = TestWorld.testNr;\r
+       TaskType taskId;\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_02:\r
+\r
+               /** @treq OSEK_TM_02\r
+                *\r
+                * Call ActivateTask() from non-preemptive task on suspended basic task\r
+                *\r
+                * No preemption of running task. Activated task becomes ready.\r
+                * Service returns E_OK\r
+                */\r
+               rv = ActivateTask(TASK_ID_btask_h_full);\r
+               TEST_ASSERT( rv == E_OK );\r
+               /* Run the higher prio task */\r
+               rv = Schedule();\r
+               TEST_ASSERT( rv == E_OK );\r
+               break;\r
+\r
+       case OSEK_TM_06:\r
+               /** @treq OSEK_TM_06\r
+                *\r
+                * Call ActivateTask() from non-preemptive task on suspended extended task\r
+                *\r
+                * No preemption of running task. Activated task becomes ready and its\r
+                * events are cleared. Service returns E_OK
+                */\r
+\r
+               rv = ActivateTask(TASK_ID_etask_h_full);\r
+               rv = GetEvent(TASK_ID_etask_h_full,&mask);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( mask == 0);\r
+               /* Run the higher prio task */\r
+               rv = Schedule();\r
+               TEST_ASSERT( rv == E_OK );\r
+               break;\r
+\r
+       case OSEK_TM_12:\r
+               /** @treq OSEK_TM_12\r
+                *\r
+                * Call ActivateTask() from non-preemptive task on ready basic task\r
+                * which has not reached max number of activations\r
+                *\r
+                * No preemption of running task. Activation request is queued in ready\r
+                * list. Service returns E_OK\r
+                */\r
+               rv = ActivateTask(TASK_ID_btask_h_full);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_TM_12, SEQ_NR_02 );\r
+               /* Run the higher prio task */\r
+               rv = Schedule();\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_TM_12, SEQ_NR_04 );\r
+               break;\r
+\r
+       case OSEK_TM_17:\r
+       {\r
+\r
+               /** @treq OSEK_TM_17\r
+                *\r
+                * Call ActivateTask() from non-preemptive task on running basic\r
+                * task which has not reached max number of activations\r
+                *\r
+                * No preemption of running task. Activation request is queued in ready list.\r
+                * Service returns E_OK\r
+                */\r
+               activations++;\r
+               switch( activations ) {\r
+               case 1:\r
+                       rv = GetTaskID(&taskId);\r
+                       TEST_ASSERT(rv == E_OK);\r
+                       /* Run us again */\r
+                       rv = ActivateTask(taskId);\r
+                       TEST_ASSERT( rv == E_OK );\r
+                       TEST_SET_FIXTURE(OSEK_TM_17, SEQ_NR_02 );\r
+                       TerminateTask();\r
+                       break;\r
+               case 2:\r
+                       TEST_SET_FIXTURE(OSEK_TM_17, SEQ_NR_03 );\r
+                       break;\r
+               default:\r
+                       TEST_ASSERT( 0 );\r
+               }\r
+\r
+       }\r
+               break;\r
+\r
+       case OSEK_TM_32:\r
+\r
+               /** @treq OSEK_TM_32\r
+                *\r
+                * Call ChainTask() from non-preemptive task on ready basic task\r
+                * which has not reached max. Number of activations\r
+                *\r
+                * Running task is terminated, activation request is queued in\r
+                * ready list and ready task with highest priority is executed\r
+                */\r
+               activations = 0;\r
+               TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_02 );\r
+               /* Activate higher prio task */\r
+               rv = SetEvent(TASK_ID_etask_m_full,EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+\r
+               TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_03 );\r
+               /* Make it READY */\r
+               rv = ActivateTask( TASK_ID_btask_l_full );\r
+               TEST_ASSERT( rv == E_OK );\r
+\r
+               rv = ChainTask( TASK_ID_btask_l_full );\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+       /* Back to etask_m_full */\r
+       rv = SetEvent(TASK_ID_etask_m_full,EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TerminateTask();\r
+       TEST_ASSERT( 0 );\r
+}\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+       StatusType rv;\r
+       TaskType taskId;\r
+       TaskType isrTask;\r
+       TaskStateType taskState;\r
+\r
+       /** @treq OSEK_TM_01\r
+        *\r
+        * Call ActivateTask() from task-level with invalid task ID\r
+        * (task does not exist)\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_01, SEQ_NR_01 );\r
+       rv = ActivateTask(TASK_ID_ILL);\r
+       TEST_ASSERT( rv == E_OS_ID);\r
+\r
+       /* OSEK_TM_02 is in another task */\r
+       TEST_SET_FIXTURE(OSEK_TM_02, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_m_non);\r
+\r
+       /** @treq OSEK_TM_03\r
+        *\r
+        * Call ActivateTask() from     preemptive task on basic task which\r
+        * has higher priority than running task.\r
+        *\r
+        * Running task is preempted. Activated task becomes running.\r
+        * Service returns E_OK\r
+        * */\r
+       TEST_SET_FIXTURE(OSEK_TM_03, SEQ_NR_01 );\r
+       rv = ActivateTask(TASK_ID_btask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+       /* The higher prio task is run prior to getting here */\r
+       TEST_SET_FIXTURE(OSEK_TM_03, SEQ_NR_03 );\r
+\r
+       /** @treq OSEK_TM_04\r
+        *\r
+        * Call ActivateTask() from preemptive task on suspended basic\r
+     * task which has lower priority than running task.\r
+     *\r
+     * No preemption of running task. Activated task becomes ready.\r
+     * Service returns E_OK */\r
+\r
+       TEST_SET_FIXTURE(OSEK_TM_04, SEQ_NR_01 );\r
+       rv = ActivateTask(TASK_ID_btask_l_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_TM_04, SEQ_NR_02 );\r
+\r
+       /* Cleanup, let btask_l_full run */\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_TM_04, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_TM_05\r
+        *  Call ActivateTask() from preemptive task on suspended basic\r
+        * task which has equal priority as running task.\r
+        *\r
+        * No preemption of running task. Activated task becomes ready.\r
+     * Service returns E_OK\r
+     */\r
+       TEST_SET_FIXTURE(OSEK_TM_05, SEQ_NR_01 );\r
+       rv = ActivateTask(TASK_ID_btask_m_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_TM_05, SEQ_NR_02 );\r
+\r
+       /* Cleanup, let btask_m_full run */\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_TM_05, SEQ_NR_04 );\r
+\r
+\r
+       /* OSEK_TM_06 is in another task */\r
+       TEST_SET_FIXTURE(OSEK_TM_06, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_m_non);\r
+\r
+       /** @treq OSEK_TM_07\r
+        *\r
+        * Call ActivateTask() from preemptive task on suspended\r
+     * extended task which has higher priority than running task.\r
+     *\r
+     * Running task is preempted. Activated task becomes running and\r
+     * its events are cleared. Service returns E_OK
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_07, SEQ_NR_01 );\r
+       rv =  ActivateTask(TASK_ID_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_TM_07, SEQ_NR_03 );\r
+\r
+       /** @treq OSEK_TM_08\r
+        * Call ActivateTask() from preemptive task on suspended\r
+     * extended task which has lower priority than running task.\r
+        *\r
+        * No preemption of running task. Activated task becomes ready\r
+        * and its events are cleared. Service returns E_OK
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_08, SEQ_NR_01 );\r
+       rv =  ActivateTask(TASK_ID_etask_l_full);\r
+       TEST_SET_FIXTURE(OSEK_TM_08, SEQ_NR_02 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_TM_08, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_TM_09\r
+        *\r
+        * Call ActivateTask() from preemptive task on suspended\r
+        * extended task which has equal priority as running task.\r
+        *\r
+        * No preemption of running task. Activated task becomes\r
+        * ready and its events are cleared. Service returns E_OK.
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_TM_09, SEQ_NR_01 );\r
+       rv =  ActivateTask(TASK_ID_etask_m_full_2);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_TM_09, SEQ_NR_02 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_TM_09, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_TM_10\r
+        *\r
+        * Call ActivateTask() on ready basic task which has reached max\r
+        * number of activations\r
+        *\r
+        * Service returns E_OS_LIMIT\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_01 );\r
+       activations = 0;\r
+       rv =  ActivateTask(TASK_ID_btask_l_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv =  ActivateTask(TASK_ID_btask_l_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv =  ActivateTask(TASK_ID_btask_l_full);\r
+       TEST_ASSERT( rv == E_OS_LIMIT);\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_TM_10, SEQ_NR_04);\r
+\r
+       /** @treq OSEK_TM_11\r
+        *\r
+        * Call ActivateTask() on ready extended task\r
+        *\r
+        * Service returns E_OS_LIMIT\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_11, SEQ_NR_01 );\r
+       /* Make ready */\r
+       rv =  ActivateTask(TASK_ID_etask_l_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_TM_11, SEQ_NR_02 );\r
+       rv =  ActivateTask(TASK_ID_etask_l_full);\r
+       TEST_ASSERT( rv == E_OS_LIMIT);\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_TM_11, SEQ_NR_04 );\r
+\r
+       /* OSEK_TM_12 is in another task */\r
+       TEST_SET_FIXTURE(OSEK_TM_12, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_m_non);\r
+\r
+\r
+       /** @treq OSEK_TM_13\r
+        *\r
+        * Call ActivateTask() from preemptive task on ready basic task which has\r
+        * not reached max number of activations and has lower priority than\r
+        * running task\r
+        *\r
+        * No preemption of running task. Activation request is queued in ready\r
+        * list. Service returns E_OK\r
+        */\r
+       activations = 0;\r
+       TEST_SET_FIXTURE(OSEK_TM_13, SEQ_NR_01 );\r
+       /* make ready */\r
+       rv =  ActivateTask(TASK_ID_btask_l_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       /* Activate ready basic task */\r
+       rv =  ActivateTask(TASK_ID_btask_l_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TestTaskRunLowerPrio();\r
+       TEST_ASSERT( activations == 2 );\r
+\r
+\r
+       /** @treq OSEK_TM_14\r
+        *\r
+        * Call ActivateTask() from preemptive task on ready basic task\r
+        * which has not reached max number of activations and has equal\r
+        * priority as running task\r
+        *\r
+        * No preemption of running task.Activation request is queued in ready\r
+        * list. Service returns E_OK\r
+        */\r
+       activations = 0;\r
+       TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_01 );\r
+       /* make ready */\r
+       rv =  ActivateTask(TASK_ID_btask_m_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       /* Activate ready basic task */\r
+       rv =  ActivateTask(TASK_ID_btask_m_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_02 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_ASSERT( activations == 2 );\r
+       TEST_SET_FIXTURE(OSEK_TM_14, SEQ_NR_05 );\r
+\r
+\r
+       /** @treq OSEK_TM_15\r
+        *\r
+        * Call ActivateTask() on running basic task which has reached max\r
+        * number of activations\r
+        *\r
+        * Service returns E_OS_LIMIT\r
+        */\r
+       /* OSEK_TM_15 is in another task */\r
+       activations = 0;\r
+       TEST_SET_FIXTURE(OSEK_TM_15, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_m_full);\r
+\r
+       /** @treq OSEK_TM_16\r
+        *\r
+        * Call ActivateTask() on running extended task\r
+        *\r
+        * Service returns E_OS_LIMIT\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_16, SEQ_NR_01 );\r
+       rv = GetTaskID(&taskId);\r
+       TEST_ASSERT(rv == E_OK);\r
+       /* Activate ourself */\r
+       rv = ActivateTask(taskId);\r
+       TEST_ASSERT(rv == E_OS_LIMIT);\r
+\r
+       /* OSEK_TM_17 is in another task */\r
+       activations = 0;\r
+       TEST_SET_FIXTURE(OSEK_TM_17, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_m_non);\r
+       TEST_SET_FIXTURE(OSEK_TM_17, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_TM_18\r
+        *\r
+        * Call ActivateTask() from preemptive task on running basic task\r
+        * which has not reached max number of activations\r
+        *\r
+        * No preemption of running task. Activation request is queued in\r
+        * ready list. Service returns E_OK\r
+        */\r
+\r
+       /* This is done in OSEK_TM_15, just record that that the test is OK */\r
+       TEST_SET_FIXTURE(OSEK_TM_18, SEQ_NR_01 );\r
+\r
+       /** @treq OSEK_TM_19\r
+        *\r
+        * Call ActivateTask() on waiting extended task\r
+        *\r
+        * Service returns E_OS_LIMIT\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_h_full );\r
+       /* etask_h_full should now be waiting */\r
+       TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_03 );\r
+\r
+       rv = ActivateTask( TASK_ID_etask_h_full );\r
+       TEST_ASSERT( rv == E_OS_LIMIT );\r
+\r
+       /* Make it terminate */\r
+       rv = SetEvent( TASK_ID_etask_h_full,EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+       TEST_SET_FIXTURE(OSEK_TM_19, SEQ_NR_05 );\r
+\r
+       /** @treq OSEK_TM_20\r
+        *\r
+        * Call TerminateTask() from ISR category 2\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        *\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_TM_20, SEQ_NR_01 );\r
+\r
+       /* Create an ISR2 */\r
+       isrTask = Os_Arc_CreateIsr( isrSoftInt0, 8/*prio*/,"soft_0");\r
+       Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_0);\r
+\r
+       Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+\r
+       TEST_SET_FIXTURE(OSEK_TM_20, SEQ_NR_04);\r
+\r
+       /* OSEK_TM_21 not in Autosar */\r
+       TEST_SET_FIXTURE(OSEK_TM_21, SEQ_NR_01 );\r
+\r
+       /** @treq OSEK_TM_22\r
+        *\r
+        * Call TerminateTask() while still occupying a resource\r
+        *\r
+        * Running task is not terminated.\r
+        * Service returns E_OS_RESOURCE\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_TM_22, SEQ_NR_01 );\r
+       rv = GetResource( RES_ID_std_1 );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OS_RESOURCE );\r
+       rv = ReleaseResource( RES_ID_std_1 );\r
+       TEST_SET_FIXTURE(OSEK_TM_22, SEQ_NR_02 );\r
+\r
+       /** @treq OSEK_TM_23\r
+        *\r
+        * Call TerminateTask()\r
+        *\r
+        * Running task is terminated and ready task with highest priority\r
+        * is executed\r
+        */\r
+\r
+       /* This is already verified by the test-system */\r
+       TEST_SET_FIXTURE(OSEK_TM_23, SEQ_NR_01 );\r
+\r
+       /** @treq OSEK_TM_24\r
+        *\r
+        * Call ChainTask() from task-level. Task-ID is invalid (does not exist).\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_TM_24, SEQ_NR_01 );\r
+       rv = ChainTask(TASK_ID_ILL);\r
+       TEST_ASSERT( rv == E_OS_ID );\r
+       TEST_SET_FIXTURE(OSEK_TM_24, SEQ_NR_02 );\r
+\r
+       /** @treq OSEK_TM_25\r
+        *\r
+        * Call ChainTask() from ISR category 2\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_25, SEQ_NR_01 );\r
+       Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+       TEST_SET_FIXTURE(OSEK_TM_25, SEQ_NR_04 );\r
+\r
+       /* OSEK_TM_26 not in Autosar */\r
+       TEST_SET_FIXTURE(OSEK_TM_26, SEQ_NR_01 );\r
+\r
+       /** @treq OSEK_TM_27\r
+        *\r
+        * Call ChainTask() while still occupying a resource\r
+        *\r
+        * Running task is not terminated. Service returns E_OS_RESOURCE\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_TM_27, SEQ_NR_01 );\r
+       rv = GetResource( RES_ID_std_1 );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ChainTask(TASK_ID_OsIdle);\r
+       TEST_ASSERT( rv == E_OS_RESOURCE );\r
+       rv = ReleaseResource( RES_ID_std_1 );\r
+       TEST_SET_FIXTURE(OSEK_TM_27, SEQ_NR_02 );\r
+\r
+\r
+       /** @treq OSEK_TM_28\r
+        *\r
+        * Call ChainTask() on suspended task\r
+        *\r
+        * Running task is terminated, chained task becomes ready and ready task\r
+        * with highest priority is executed\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_h_full);\r
+       TEST_SET_FIXTURE(OSEK_TM_28, SEQ_NR_06 );\r
+       /* Cleanup */\r
+       TestTaskRunLowerPrio();\r
+\r
+       /** @treq OSEK_TM_29\r
+        *\r
+        * Call ChainTask() on running task\r
+        *\r
+        * Running task is terminated, chained task becomes ready and ready task\r
+        * with highest priority is executed\r
+        */\r
+       activations = 0;\r
+       TEST_SET_FIXTURE(OSEK_TM_29, SEQ_NR_01 );\r
+       rv = ActivateTask(TASK_ID_btask_h_full);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_TM_29, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_TM_30\r
+        *\r
+        * Call ChainTask() on ready basic task which has reached max number of\r
+        * activations.\r
+        *\r
+        * Running task is not terminated. Service returns E_OS_LIMIT\r
+        */\r
+\r
+       activations = 0;\r
+       TEST_SET_FIXTURE(OSEK_TM_30, SEQ_NR_01 );\r
+       /* First activation */\r
+       rv = ActivateTask(TASK_ID_btask_l_full);\r
+       TEST_ASSERT( rv == E_OK );\r
+       /* second activation */\r
+       rv = ActivateTask(TASK_ID_btask_l_full);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       rv = ChainTask(TASK_ID_btask_l_full);\r
+       TEST_ASSERT( rv == E_OS_LIMIT );\r
+       /* Cleanup */\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_TM_30, SEQ_NR_04);\r
+\r
+       /** @treq OSEK_TM_31\r
+        *\r
+        * Call ChainTask() on ready extended task\r
+        *\r
+        * Running task is not terminated. Service returns E_OS_LIMIT\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_31, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_l_full );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ChainTask( TASK_ID_etask_l_full );\r
+       TEST_ASSERT( rv == E_OS_LIMIT );\r
+       TEST_SET_FIXTURE(OSEK_TM_31, SEQ_NR_02 );\r
+       /* Cleanup */\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_TM_31, SEQ_NR_04);\r
+\r
+       /** @treq OSEK_TM_32\r
+        *\r
+        * Call ChainTask() from non-preemptive task on ready basic task which\r
+        * has not reached max  number of activations\r
+        *\r
+        * Running task is terminated, activation request is queued in ready list\r
+        * and ready task with highest priority is executed\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_m_non);\r
+       TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_04 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_TM_32, SEQ_NR_07);\r
+\r
+       /** @treq OSEK_TM_33\r
+        *\r
+        * Call ChainTask() on waiting extended task\r
+        *\r
+        * Service returns E_OS_LIMIT\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_33, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_l_full);\r
+       TEST_SET_FIXTURE(OSEK_TM_33, SEQ_NR_04);\r
+       TestTaskRunLowerPrio();\r
+\r
+       /** @treq OSEK_TM_34\r
+        *\r
+        * Call Schedule() from task.\r
+        *\r
+        * Ready task with highest priority is executed. Service returns E_OK\r
+        */\r
+       /* Already tested in OSEK_TM_02 */\r
+       TEST_SET_FIXTURE(OSEK_TM_34, SEQ_NR_01 );\r
+\r
+       /** @treq OSEK_TM_35\r
+        *\r
+        * Call Schedule() from ISR category 2\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_35, SEQ_NR_01 );\r
+       Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+       TEST_SET_FIXTURE(OSEK_TM_35, SEQ_NR_04 );\r
+\r
+       /* OSEK_TM_36 not an OSEK/Autosar requirement */\r
+       TEST_SET_FIXTURE(OSEK_TM_36, SEQ_NR_01 );\r
+\r
+       /** @treq OSEK_TM_37\r
+        *\r
+        * Call GetTaskID() from ISR category 2\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_37, SEQ_NR_01 );\r
+       Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+       TEST_SET_FIXTURE(OSEK_TM_37, SEQ_NR_04 );\r
+\r
+       /* @treq OSEK_TM_38 not an OSEK/Autosar requirement */\r
+       TEST_SET_FIXTURE(OSEK_TM_38, SEQ_NR_01 );\r
+\r
+       /** @treq OSEK_TM_39\r
+        *\r
+        * Call GetTaskID() from task\r
+        *\r
+        * Return task ID of currently running task. Service returns E_OK\r
+        */\r
+       /* Already tested in numerous earlier testcases */\r
+       TEST_SET_FIXTURE(OSEK_TM_39, SEQ_NR_01 );\r
+\r
+\r
+       /** @treq OSEK_TM_40\r
+        *\r
+        * Call GetTaskState() with invalid task ID (task does not exist)\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_TM_40, SEQ_NR_01 );\r
+       rv = GetTaskState(TASK_ID_ILL,&taskState);\r
+       TEST_ASSERT( rv == E_OS_ID );\r
+       TEST_SET_FIXTURE(OSEK_TM_40, SEQ_NR_02 );\r
+\r
+\r
+       /** @treq OSEK_TM_41\r
+        *\r
+        * Call GetTaskState()\r
+        *\r
+        *  Return state of queried task. Service returns E_OK\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_TM_41, SEQ_NR_01 );\r
+       rv = GetTaskState(TASK_ID_etask_h_full,&taskState);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_ASSERT( taskState  == TASK_STATE_SUSPENDED );\r
+       TEST_SET_FIXTURE(OSEK_TM_41, SEQ_NR_02 );\r
+\r
+       rv = GetTaskState(TASK_ID_etask_l_full,&taskState);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_ASSERT( taskState  == TASK_STATE_SUSPENDED );\r
+       TEST_SET_FIXTURE(OSEK_TM_41, SEQ_NR_03 );\r
+\r
+       rv = GetTaskState(taskId,&taskState);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_ASSERT( taskState  == TASK_STATE_RUNNING );\r
+       TEST_SET_FIXTURE(OSEK_TM_41, SEQ_NR_04 );\r
+\r
+//     TestActivateAndWait( TASK_ID_btask_m_non );\r
+\r
+       TestExit(0);\r
+}\r
diff --git a/system/kernel/testsystem/osek_02_ip/Os_Cfg.c b/system/kernel/testsystem/osek_02_ip/Os_Cfg.c
new file mode 100644 (file)
index 0000000..87db27e
--- /dev/null
@@ -0,0 +1,116 @@
+/* 
+* Configuration of module Os (Os_Cfg.c)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Tue Sep 28 14:22:25 CEST 2010
+*/
+
+       \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h"                                // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ###############################    DEBUG OUTPUT     #############################\r
+uint32 os_dbg_mask = 0;\r
\r
+\r
+\r
+// #################################    COUNTERS     ###############################\r
+GEN_COUNTER_HEAD {\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = -1;\r
+\r
+// ##################################    ALARMS     ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################    RESOURCES     ###############################\r
+GEN_RESOURCE_HEAD {\r
+};\r
+\r
+// ##############################    STACKS (TASKS)     ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_l_non,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+\r
+// ##################################    TASKS     #################################\r
+GEN_TASK_HEAD {\r
+       GEN_ETASK(      OsIdle,\r
+                               0,\r
+                               FULL,\r
+                               TRUE,\r
+                               NULL,\r
+                               0 \r
+       ),\r
+       GEN_BTASK(\r
+               btask_l_non,\r
+               3,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full,\r
+               4,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+};\r
+\r
+// ##################################    HOOKS     #################################\r
+GEN_HOOKS( \r
+       StartupHook, \r
+       NULL, \r
+       ShutdownHook, \r
+       ErrorHook,\r
+       PreTaskHook, \r
+       PostTaskHook \r
+);\r
+\r
+// ##################################    ISRS     ##################################\r
+\r
+\r
+// ############################    SCHEDULE TABLES     #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
diff --git a/system/kernel/testsystem/osek_02_ip/Os_Cfg.h b/system/kernel/testsystem/osek_02_ip/Os_Cfg.h
new file mode 100644 (file)
index 0000000..4b2be9b
--- /dev/null
@@ -0,0 +1,77 @@
+/* 
+* Configuration of module Os (Os_Cfg.h)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Tue Sep 28 14:22:25 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2) 
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+\r
+// Counter macros\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go  1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_l_non    1\r
+#define TASK_ID_etask_m_full   2\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_l_non( void );\r
+void etask_m_full( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE        2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT                   0 \r
+#define OS_TASK_CNT                            3\r
+#define OS_SCHTBL_CNT                  0\r
+#define OS_COUNTER_CNT                 0\r
+#define OS_EVENTS_CNT                  1\r
+#define OS_ISRS_CNT                            0\r
+#define OS_RESOURCE_CNT                        0\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG                           STD_OFF\r
+\r
+#define OS_SC1                                                 STD_ON     \r
+#define OS_STACK_MONITORING                    STD_ON\r
+#define OS_STATUS_EXTENDED                     STD_ON\r
+#define OS_USE_GET_SERVICE_ID          STD_ON\r
+#define OS_USE_PARAMETER_ACCESS                STD_ON\r
+#define OS_RES_SCHEDULER                       STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
diff --git a/system/kernel/testsystem/osek_02_ip/build_config.mk b/system/kernel/testsystem/osek_02_ip/build_config.mk
new file mode 100644 (file)
index 0000000..b574ebe
--- /dev/null
@@ -0,0 +1,5 @@
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
diff --git a/system/kernel/testsystem/osek_02_ip/config_osek_ip.arxml b/system/kernel/testsystem/osek_02_ip/config_osek_ip.arxml
new file mode 100644 (file)
index 0000000..ae39cad
--- /dev/null
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+    <AR-PACKAGE>\r
+      <SHORT-NAME>config_osek_ip</SHORT-NAME>\r
+      <ELEMENTS>\r
+        <ECU-CONFIGURATION UUID="d30db794-36ce-42ce-8658-deb9cfbfc18a">\r
+          <SHORT-NAME>config_osek_ip</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <DOC-REVISIONS>\r
+              <DOC-REVISION/>\r
+            </DOC-REVISIONS>\r
+            <SDGS>\r
+              <SDG GID="Arccore::EcuOptions">\r
+                <SD GID="MCU">Undefined MCU</SD>\r
+                <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_02_ip</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/NewEcu/SwComposition_NewEcu</ECU-SW-COMPOSITION-REF>\r
+          <MODULE-REFS>\r
+            <MODULE-REF DEST="MODULE-CONFIGURATION">/NewEcu/Os</MODULE-REF>\r
+          </MODULE-REFS>\r
+        </ECU-CONFIGURATION>\r
+        <ECU-SW-COMPOSITION UUID="aab85286-8442-4d60-bf6d-a8cdea2f4f7c">\r
+          <SHORT-NAME>SwComposition_NewEcu</SHORT-NAME>\r
+        </ECU-SW-COMPOSITION>\r
+        <MODULE-CONFIGURATION UUID="fb96b9f7-d486-4956-bcf5-03ac6c6e5f78">\r
+          <SHORT-NAME>Os</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <SDGS>\r
+              <SDG/>\r
+              <SDG GID="Arccore::ModuleOptions">\r
+                <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+                <SD GID="ARCCORE_EDITOR_VERSION">2.0.11</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+          <CONTAINERS>\r
+            <CONTAINER UUID="e38c4f96-a8c1-4489-b907-03eb4441b231">\r
+              <SHORT-NAME>OsOS</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+                  <VALUE>1000</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+                  <VALUE>512</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="a7839b8f-1ed1-4f24-b05f-06850836ea32">\r
+                  <SHORT-NAME>OsHooks</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="074c4c94-0aa1-4158-9223-7136a526fac0">\r
+              <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="c17d3508-e67f-49bd-92fb-8a3a51531b49">\r
+                  <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="ba3c0023-17f0-46d5-9894-05bf9d6b816d">\r
+              <SHORT-NAME>etask_m_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="2779564f-96d6-4d30-b88b-cb1f7291fb76">\r
+              <SHORT-NAME>btask_l_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="86e6d692-1859-4a9e-a625-ab04d091fa8f">\r
+              <SHORT-NAME>btask_l_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="8d6c6b17-d4c3-4495-98b6-defe04215c41">\r
+              <SHORT-NAME>etask_l_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="b0512773-1a8c-4155-b4a7-67e915370404">\r
+              <SHORT-NAME>go</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="5a412088-bb62-49c2-aeb7-12eee9b6fd66">\r
+              <SHORT-NAME>go2</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+          </CONTAINERS>\r
+        </MODULE-CONFIGURATION>\r
+      </ELEMENTS>\r
+    </AR-PACKAGE>\r
+  </TOP-LEVEL-PACKAGES></AUTOSAR>\r
diff --git a/system/kernel/testsystem/osek_02_ip/makefile b/system/kernel/testsystem/osek_02_ip/makefile
new file mode 100644 (file)
index 0000000..0181bcb
--- /dev/null
@@ -0,0 +1,60 @@
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += osek_ip.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/system/kernel/testsystem/osek_02_ip/osek_ip.c b/system/kernel/testsystem/osek_02_ip/osek_ip.c
new file mode 100644 (file)
index 0000000..8f4eb50
--- /dev/null
@@ -0,0 +1,234 @@
+/*\r
+ *  Created on: 4 aug 2010\r
+ *      Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_IP_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l  - low prio\r
+ * m  - medium\r
+ * h  - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+       OSEK_IP_01 = 1,\r
+       OSEK_IP_02,\r
+       OSEK_IP_03,\r
+       OSEK_IP_04,\r
+       OSEK_IP_05,\r
+       OSEK_IP_06,\r
+       OSEK_IP_07,\r
+       OSEK_IP_08,\r
+       OSEK_IP_09,\r
+       OSEK_IP_10,\r
+       OSEK_IP_11,\r
+       OSEK_IP_12,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static void isrSoftInt1( void ) {\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_IP_07:\r
+               TEST_SET_FIXTURE(OSEK_IP_07, SEQ_NR_03 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_IP_07:\r
+               TEST_SET_FIXTURE(OSEK_IP_07, SEQ_NR_02 );\r
+               Irq_GenerateSoftInt( IRQ_SOFTINT_1 );\r
+               break;\r
+       case OSEK_IP_09:\r
+               TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+\r
+\r
+\r
+void OsIdle(void) {\r
+       while(1);\r
+}\r
+\r
+\r
+void btask_l_non ( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_IP_09:\r
+               TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_02 );\r
+               /* Make higher prio task ready */\r
+               rv = SetEvent( TASK_ID_etask_m_full,EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK ) ;\r
+               TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_03 );\r
+               Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+               TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_05 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+       StatusType rv;\r
+       TaskType isrTask;\r
+\r
+       /** @treq OSEK_IP_01\r
+        *\r
+        * Call EnableInterrupt(). All requested interrupts are disabled\r
+        *\r
+        * Enable interrupts. Service returns E_OK\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_IP_01, SEQ_NR_01 );\r
+       /* The API is no longer available in Autosar or OSEK */\r
+\r
+       /** @treq OSEK_IP_02\r
+        *\r
+        * Call EnableInterrupt(). At least one of the requested interrupts is already enabled.\r
+        *\r
+        * Enable interrupts. Service returns E_OS_NOFUNC\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_IP_02, SEQ_NR_01 );\r
+       /* The API is no longer available in Autosar or OSEK */\r
+\r
+       /** @treq OSEK_IP_03\r
+        *\r
+        * Call DisableInterrupt(). All requested interrupts are enabled\r
+        *\r
+        * Disable interrupts. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_03, SEQ_NR_01 );\r
+       /* The API is no longer available in Autosar or OSEK */\r
+\r
+       /** @treq OSEK_IP_04\r
+        *\r
+        * "Call DisableInterrupt(). At least one of the requested interrupts\r
+        * is already disabled"\r
+        *\r
+        * Disable interrupts. Service returns E_OS_NOFUNC\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_04, SEQ_NR_01 );\r
+       /* The API is no longer available in Autosar or OSEK */\r
+\r
+       /** @treq OSEK_IP_05\r
+        *\r
+        * Call GetInterruptDescriptor()\r
+        *\r
+        * "Returns current interrupt descriptor. Service returns E_OK"\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_05, SEQ_NR_01 );\r
+       /* The API is no longer available in Autosar or OSEK */\r
+\r
+       /** @treq OSEK_IP_06\r
+        *\r
+        * Interruption of running task\r
+        *\r
+        * Interrupt is executed\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_06, SEQ_NR_01 );\r
+       /* Already tested in a number of cases in tm suite */\r
+\r
+       /** @treq OSEK_IP_07\r
+        *\r
+        * Interruption of ISR2\r
+        *\r
+        * Interrupt is executed\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_07, SEQ_NR_01 );\r
+       /* Create an ISR2 */\r
+       isrTask = Os_Arc_CreateIsr( isrSoftInt0, 8/*prio*/,"soft_0");\r
+       Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_0);\r
+\r
+       /* Create an ISR2 */\r
+       isrTask = Os_Arc_CreateIsr( isrSoftInt1, 9/*prio*/,"soft_1");\r
+       Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_1);\r
+\r
+       Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+       TEST_SET_FIXTURE(OSEK_IP_07, SEQ_NR_04 );\r
+\r
+\r
+       /** @treq OSEK_IP_08\r
+        *\r
+        * Interruption of ISR3\r
+        *\r
+        * Interrupt is executed\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_08, SEQ_NR_01 );\r
+       /* ISR3 is not applicable */\r
+\r
+       /** @treq OSEK_IP_09\r
+        *\r
+        * Return from ISR2. Interrupted task is non-preemptive\r
+        *\r
+        * Execution of interrupted task is continued\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_01 );\r
+       rv = ActivateTask(TASK_ID_btask_l_non );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_IP_09, SEQ_NR_06 );\r
+\r
+       /** @treq OSEK_IP_10\r
+        *\r
+        * Return from ISR3. Interrupted task is non-preemptive\r
+     *\r
+        * Execution of interrupted task is continued\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_10, SEQ_NR_01 );\r
+       /* ISR3 is not applicable */\r
+\r
+       /** @treq OSEK_IP_11\r
+        *\r
+        * Return from ISR2. Interrupted task is preemptive\r
+     *\r
+        * Ready task with highest priority is executed (Rescheduling)\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_11, SEQ_NR_01 );\r
+\r
+\r
+\r
+       /** @treq OSEK_IP_12\r
+        *\r
+        * Return from ISR3. Interrupted task is preemptive\r
+     *\r
+        * Ready task with highest priority is executed (Rescheduling)\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_IP_12, SEQ_NR_01 );\r
+       /* ISR3 is not applicable */\r
+\r
+\r
+       TestExit(0);\r
+}\r
diff --git a/system/kernel/testsystem/osek_03_ev/Os_Cfg.c b/system/kernel/testsystem/osek_03_ev/Os_Cfg.c
new file mode 100644 (file)
index 0000000..e1fbce0
--- /dev/null
@@ -0,0 +1,195 @@
+/* 
+* Configuration of module Os (Os_Cfg.c)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Thu Sep 30 13:27:37 CEST 2010
+*/
+
+       \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h"                                // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ###############################    DEBUG OUTPUT     #############################\r
+uint32 os_dbg_mask = D_RESOURCE |D_SCHTBL |D_EVENT |D_TASK |D_ALARM;\r
\r
+\r
+\r
+// #################################    COUNTERS     ###############################\r
+GEN_COUNTER_HEAD {\r
+       GEN_COUNTER(    COUNTER_ID_Counter1,\r
+                                       "Counter1",\r
+                                       COUNTER_TYPE_HARD,\r
+                                       COUNTER_UNIT_NANO,\r
+                                       0xffff,\r
+                                       1,\r
+                                       0,\r
+                                       0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ##################################    ALARMS     ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################    RESOURCES     ###############################\r
+GEN_RESOURCE_HEAD {\r
+       GEN_RESOURCE(\r
+               RES_ID_std_1,\r
+               RESOURCE_TYPE_STANDARD,\r
+               0\r
+       ),\r
+};\r
+\r
+// ##############################    STACKS (TASKS)     ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+DECLARE_STACK(etask_m_non,2048);\r
+\r
+// ##################################    TASKS     #################################\r
+GEN_TASK_HEAD {\r
+       GEN_ETASK(      OsIdle,\r
+                               0,\r
+                               FULL,\r
+                               TRUE,\r
+                               NULL,\r
+                               0 \r
+       ),\r
+       GEN_BTASK(\r
+               btask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_ll_non,\r
+               3,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_m_full,\r
+               5,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_ETASK(\r
+               etask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full,\r
+               5,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               RES_MASK_std_1 | 0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_non,\r
+               5,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+};\r
+\r
+// ##################################    HOOKS     #################################\r
+GEN_HOOKS( \r
+       StartupHook, \r
+       NULL, \r
+       ShutdownHook, \r
+       ErrorHook,\r
+       PreTaskHook, \r
+       PostTaskHook \r
+);\r
+\r
+// ##################################    ISRS     ##################################\r
+\r
+\r
+// ############################    SCHEDULE TABLES     #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
diff --git a/system/kernel/testsystem/osek_03_ev/Os_Cfg.h b/system/kernel/testsystem/osek_03_ev/Os_Cfg.h
new file mode 100644 (file)
index 0000000..ac48ac8
--- /dev/null
@@ -0,0 +1,94 @@
+/* 
+* Configuration of module Os (Os_Cfg.h)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Thu Sep 30 13:27:37 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2) 
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1    0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go  1\r
+#define EVENT_MASK_go2 2\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_std_1   0\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_std_1 (1 << 0)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full   1\r
+#define TASK_ID_btask_l_full   2\r
+#define TASK_ID_btask_ll_non   3\r
+#define TASK_ID_btask_m_full   4\r
+#define TASK_ID_etask_h_full   5\r
+#define TASK_ID_etask_l_full   6\r
+#define TASK_ID_etask_m_full   7\r
+#define TASK_ID_etask_m_non    8\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+void etask_m_non( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE        2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT                   0 \r
+#define OS_TASK_CNT                            9\r
+#define OS_SCHTBL_CNT                  0\r
+#define OS_COUNTER_CNT                 1\r
+#define OS_EVENTS_CNT                  2\r
+#define OS_ISRS_CNT                            0\r
+#define OS_RESOURCE_CNT                        1\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG                           STD_ON\r
+\r
+#define OS_SC1                                                 STD_ON     \r
+#define OS_STACK_MONITORING                    STD_ON\r
+#define OS_STATUS_EXTENDED                     STD_ON\r
+#define OS_USE_GET_SERVICE_ID          STD_ON\r
+#define OS_USE_PARAMETER_ACCESS                STD_ON\r
+#define OS_RES_SCHEDULER                       STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
diff --git a/system/kernel/testsystem/osek_03_ev/build_config.mk b/system/kernel/testsystem/osek_03_ev/build_config.mk
new file mode 100644 (file)
index 0000000..b574ebe
--- /dev/null
@@ -0,0 +1,5 @@
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
diff --git a/system/kernel/testsystem/osek_03_ev/config_osek_ev.arxml b/system/kernel/testsystem/osek_03_ev/config_osek_ev.arxml
new file mode 100644 (file)
index 0000000..9fae377
--- /dev/null
@@ -0,0 +1,452 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+    <AR-PACKAGE>\r
+      <SHORT-NAME>config_osek_ev</SHORT-NAME>\r
+      <ELEMENTS>\r
+        <ECU-CONFIGURATION UUID="5ae9c5b8-fba6-4913-a886-cdb86dc2b884">\r
+          <SHORT-NAME>config_osek_ev</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <DOC-REVISIONS>\r
+              <DOC-REVISION/>\r
+            </DOC-REVISIONS>\r
+            <SDGS>\r
+              <SDG GID="Arccore::EcuOptions">\r
+                <SD GID="MCU">Undefined MCU</SD>\r
+                <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_03_ev</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/config_osek_ev/SwComposition_config_osek_ev</ECU-SW-COMPOSITION-REF>\r
+          <MODULE-REFS>\r
+            <MODULE-REF DEST="MODULE-CONFIGURATION">/config_osek_ev/Os</MODULE-REF>\r
+          </MODULE-REFS>\r
+        </ECU-CONFIGURATION>\r
+        <ECU-SW-COMPOSITION UUID="4bf548b2-edc6-436d-a4df-98a43df64955">\r
+          <SHORT-NAME>SwComposition_config_osek_ev</SHORT-NAME>\r
+        </ECU-SW-COMPOSITION>\r
+        <MODULE-CONFIGURATION UUID="e3a90a5a-3a2c-4b90-82fa-498d4bf14895">\r
+          <SHORT-NAME>Os</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <SDGS>\r
+              <SDG/>\r
+              <SDG GID="Arccore::ModuleOptions">\r
+                <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+                <SD GID="ARCCORE_EDITOR_VERSION">2.0.7</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+          <CONTAINERS>\r
+            <CONTAINER UUID="46e7afa2-40d4-4969-9216-dbb68fd7dc71">\r
+              <SHORT-NAME>OsOS</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+                  <VALUE>1000</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+                  <VALUE>512</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="5c123a65-e644-421a-be3b-62886c189f46">\r
+                  <SHORT-NAME>OsHooks</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="179b1eed-bae4-4ff9-8101-c81794d849be">\r
+              <SHORT-NAME>etask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>6</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="c7934bf2-d3cf-4df2-822a-c872121dcd2b">\r
+              <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_ev/Os/std_1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="b1f99972-b3c7-41ec-a1ec-0d4dbe6b2e73">\r
+                  <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="2f0895f3-1d8a-4169-8fe1-105ff68a3a5a">\r
+              <SHORT-NAME>etask_l_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="f120ab09-188b-463b-a9e4-94f60e84f125">\r
+              <SHORT-NAME>btask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>6</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="c3213aac-578d-4870-9e2a-7b0a731f9ae3">\r
+              <SHORT-NAME>btask_m_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="9de6649a-e85b-4a49-a9f4-5055e02480ca">\r
+              <SHORT-NAME>btask_l_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="de75266a-d9ea-4225-803f-b8bc02a446bf">\r
+              <SHORT-NAME>go</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="83c2a703-f295-4d91-b3c7-46bc6913e80e">\r
+              <SHORT-NAME>Counter1</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+                  <VALUE>65535</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+                  <VALUE>OS_TICK</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="92cc71da-7618-4431-90e4-f8451031d2e7">\r
+              <SHORT-NAME>etask_m_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="647b5042-793f-4f1c-bf5f-94e1bfd38bb0">\r
+              <SHORT-NAME>go2</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="5173867e-16a5-460a-acdf-1ddd6faeed00">\r
+              <SHORT-NAME>btask_ll_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>3</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="2daf3826-ed29-470d-bbb7-73cf44e2bb24">\r
+              <SHORT-NAME>std_1</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+                  <VALUE>STANDARD</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+          </CONTAINERS>\r
+        </MODULE-CONFIGURATION>\r
+      </ELEMENTS>\r
+      <SUB-PACKAGES>\r
+        <AR-PACKAGE UUID="95a91a77-4b4b-49b2-81af-71ed5700871a">\r
+          <SHORT-NAME>GeneratedSystemSignals</SHORT-NAME>\r
+          <SUB-PACKAGES>\r
+            <AR-PACKAGE>\r
+              <SHORT-NAME>Data</SHORT-NAME>\r
+              <ELEMENTS>\r
+                <INTEGER-TYPE>\r
+                  <SHORT-NAME>UInt8</SHORT-NAME>\r
+                  <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0</LOWER-LIMIT>\r
+                  <UPPER-LIMIT INTERVAL-TYPE="CLOSED">256</UPPER-LIMIT>\r
+                </INTEGER-TYPE>\r
+                <INTEGER-TYPE>\r
+                  <SHORT-NAME>UInt16</SHORT-NAME>\r
+                  <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0</LOWER-LIMIT>\r
+                  <UPPER-LIMIT INTERVAL-TYPE="CLOSED">65535</UPPER-LIMIT>\r
+                </INTEGER-TYPE>\r
+                <INTEGER-TYPE>\r
+                  <SHORT-NAME>UInt32</SHORT-NAME>\r
+                  <LOWER-LIMIT INTERVAL-TYPE="CLOSED">-2147483648</LOWER-LIMIT>\r
+                  <UPPER-LIMIT INTERVAL-TYPE="CLOSED">2147483647</UPPER-LIMIT>\r
+                </INTEGER-TYPE>\r
+                <INTEGER-TYPE>\r
+                  <SHORT-NAME>SInt8</SHORT-NAME>\r
+                  <LOWER-LIMIT INTERVAL-TYPE="CLOSED">-128</LOWER-LIMIT>\r
+                  <UPPER-LIMIT INTERVAL-TYPE="CLOSED">127</UPPER-LIMIT>\r
+                </INTEGER-TYPE>\r
+                <INTEGER-TYPE>\r
+                  <SHORT-NAME>SInt16</SHORT-NAME>\r
+                  <LOWER-LIMIT INTERVAL-TYPE="CLOSED">-32768</LOWER-LIMIT>\r
+                  <UPPER-LIMIT INTERVAL-TYPE="CLOSED">32767</UPPER-LIMIT>\r
+                </INTEGER-TYPE>\r
+              </ELEMENTS>\r
+              <SUB-PACKAGES>\r
+                <AR-PACKAGE>\r
+                  <SHORT-NAME>IntegerLiterals</SHORT-NAME>\r
+                </AR-PACKAGE>\r
+              </SUB-PACKAGES>\r
+            </AR-PACKAGE>\r
+          </SUB-PACKAGES>\r
+        </AR-PACKAGE>\r
+      </SUB-PACKAGES>\r
+    </AR-PACKAGE>\r
+  </TOP-LEVEL-PACKAGES></AUTOSAR>\r
diff --git a/system/kernel/testsystem/osek_03_ev/makefile b/system/kernel/testsystem/osek_03_ev/makefile
new file mode 100644 (file)
index 0000000..4e1ace3
--- /dev/null
@@ -0,0 +1,60 @@
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += osek_ev.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/system/kernel/testsystem/osek_03_ev/osek_ev.c b/system/kernel/testsystem/osek_03_ev/osek_ev.c
new file mode 100644 (file)
index 0000000..c0a73e6
--- /dev/null
@@ -0,0 +1,655 @@
+/*\r
+ *  Created on: 4 aug 2010\r
+ *      Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_EV_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l  - low prio\r
+ * m  - medium\r
+ * h  - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+       OSEK_EV_01 = 1,\r
+       OSEK_EV_02,\r
+       OSEK_EV_03,\r
+       OSEK_EV_04,\r
+       OSEK_EV_05,\r
+       OSEK_EV_06,\r
+       OSEK_EV_07,\r
+       OSEK_EV_08,\r
+       OSEK_EV_09,\r
+       OSEK_EV_10,\r
+       OSEK_EV_11,\r
+       OSEK_EV_12,\r
+       OSEK_EV_13,\r
+       OSEK_EV_14,\r
+       OSEK_EV_15,\r
+       OSEK_EV_16,\r
+       OSEK_EV_17,\r
+       OSEK_EV_18,\r
+       OSEK_EV_19,\r
+       OSEK_EV_20,\r
+       OSEK_EV_21,\r
+       OSEK_EV_22,\r
+       OSEK_EV_23,\r
+       OSEK_EV_24,\r
+       OSEK_EV_25,\r
+       OSEK_EV_26,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static uint8_t activations = 0;\r
+\r
+static void isrSoftInt1( void ) {\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_EV_07:\r
+               TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_03 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+       StatusType rv;\r
+       TaskType taskId;\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_EV_12:\r
+               TEST_SET_FIXTURE(OSEK_EV_12, SEQ_NR_02 );\r
+               rv = ClearEvent( EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+               break;\r
+       case OSEK_EV_23:\r
+               TEST_SET_FIXTURE(OSEK_EV_23, SEQ_NR_02 );\r
+               rv = WaitEvent( EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OS_CALLEVEL );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+\r
+void TestTaskRunLowerPrio( void ) {\r
+       StatusType rv;\r
+       /* Activate lowest prioriy task */\r
+       rv = ActivateTask(TASK_ID_btask_ll_non);\r
+       TEST_ASSERT( rv == E_OK );\r
+       /* Let the low prio task run */\r
+       rv = WaitEvent(EVENT_MASK_go);\r
+       rv = ClearEvent(EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void TestActivateAndWait( TaskType task ) {\r
+       StatusType rv;\r
+       rv = ActivateTask(task);\r
+       TEST_ASSERT( rv == E_OK );\r
+       /* Let the low prio task run */\r
+       rv = WaitEvent(EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent(EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+void btask_h_full( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_EV_11:\r
+               TEST_SET_FIXTURE(OSEK_EV_11, SEQ_NR_02 );\r
+               rv = ClearEvent(EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OS_ACCESS );\r
+               break;\r
+       case OSEK_EV_21:\r
+               TEST_SET_FIXTURE(OSEK_EV_21, SEQ_NR_02 );\r
+               rv = WaitEvent(EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OS_ACCESS );\r
+               TEST_SET_FIXTURE(OSEK_EV_21, SEQ_NR_03 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void etask_h_full( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_EV_08:\r
+               TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_02 );\r
+               rv = WaitEvent( EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               rv = ClearEvent( EVENT_MASK_go | EVENT_MASK_go2 );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_05 );\r
+               break;\r
+       case OSEK_EV_09:\r
+               TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_04 );\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_m_full( void ) {\r
+\r
+}\r
+\r
+void btask_ll_non( void ) {\r
+       StatusType rv;\r
+       /* Used for scheduling ONLY */\r
+       rv = SetEvent(TASK_ID_etask_m_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+void OsIdle(void) {\r
+       while(1);\r
+}\r
+\r
+\r
+void btask_l_non ( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+\r
+void etask_m_non ( void ) {\r
+       StatusType rv;\r
+       TaskStateType taskState;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_EV_04:\r
+               TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_03 );\r
+               /* Verify that task is in waiting */\r
+               rv = GetTaskState(TASK_ID_etask_m_full,&taskState);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( taskState == TASK_STATE_WAITING);\r
+               /* Set the Event */\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               /* Verify state, again */\r
+               rv = GetTaskState(TASK_ID_etask_m_full,&taskState);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( taskState == TASK_STATE_READY);\r
+               TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_04 );\r
+               break;\r
+       case OSEK_EV_05:\r
+               TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_03 );\r
+               /* Set event in etask_m_full that it is NOT waiting for */\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go2 );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_04 );\r
+               /* Cleanup, and let it run */\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_05 );\r
+               break;\r
+       case OSEK_EV_09:\r
+               TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_02 );\r
+               /* make higher prio task ready */\r
+               rv = ActivateTask( TASK_ID_etask_h_full );\r
+               TEST_ASSERT( rv == E_OK );\r
+               /* Do the actual SetEvent() test */\r
+               rv = SetEvent( TASK_ID_etask_h_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_03 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_l_full ( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_EV_09:\r
+               break;\r
+       default:\r
+               break;\r
+       }\r
+}\r
+\r
+void etask_l_full ( void ) {\r
+       StatusType rv;\r
+       EventMaskType mask;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_EV_06:\r
+               TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_03 );\r
+               /* Set event preempt us */\r
+               rv = SetEvent(TASK_ID_etask_m_full,EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_05 );\r
+               break;\r
+       case OSEK_EV_07:\r
+               TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_03 );\r
+               rv = WaitEvent(EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+               rv = ClearEvent(EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_06 );\r
+               break;\r
+       case OSEK_EV_10:\r
+               TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_03 );\r
+               break;\r
+       case OSEK_EV_19:\r
+               TEST_SET_FIXTURE(OSEK_EV_19, SEQ_NR_03 );\r
+               rv = ClearEvent( EVENT_MASK_go2 );\r
+               break;\r
+       case OSEK_EV_20:\r
+               TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_02 );\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go2 );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_03 );\r
+               rv = GetEvent( TASK_ID_etask_m_full, &mask );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( mask == EVENT_MASK_go2 );\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+       default:\r
+               break;\r
+       }\r
+       TerminateTask();\r
+}\r
+\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+       StatusType rv;\r
+       TaskType taskId;\r
+       TaskType isrTask;\r
+       TaskStateType taskState;\r
+       EventMaskType mask;\r
+\r
+       /** @treq OSEK_EV_01\r
+        *\r
+        * Call SetEvent() with invalid Task ID\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_EV_01, SEQ_NR_01 );\r
+       rv = SetEvent(TASK_ID_ILL,EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OS_ID );\r
+\r
+       /** @treq OSEK_EV_02\r
+        *\r
+        * Call SetEvent() for basic task\r
+        *\r
+        * Service returns E_OS_ACCESS\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_EV_02, SEQ_NR_01 );\r
+       rv = SetEvent( TASK_ID_btask_l_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OS_ACCESS );\r
+\r
+\r
+       // --------------------------------------------------------------------\r
+\r
+       /** @treq OSEK_EV_03\r
+        *\r
+        * Call SetEvent() for suspended extended task\r
+        *\r
+        * Service returns E_OS_STATE\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_03, SEQ_NR_01 );\r
+       rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OS_STATE );\r
+\r
+       /** @treq OSEK_EV_04\r
+        *\r
+        * Call SetEvent() from non-preemptive task on waiting extended\r
+     * task which is waiting for at least one of the requested events\r
+        *\r
+        * Requested events are set. Running task is not preempted.\r
+        * Waiting task becomes ready  Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_m_non );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_02 );\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_05 );\r
+\r
+       /** @treq OSEK_EV_05\r
+        *\r
+        * Call SetEvent() from non-preemptive task on waiting extended\r
+        * task which is not waiting for any of the requested events\r
+        *\r
+        * Requested events are set. Running task is not preempted.\r
+        * Waiting task doesn\92t become ready. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_m_non );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_02 );\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go | EVENT_MASK_go2 );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_06 );\r
+\r
+       /** @treq OSEK_EV_06\r
+        *\r
+        * Call SetEvent() from preemptive task on waiting extended task which\r
+        * is waiting for at least one of the requested events and has higher\r
+        * priority than running task\r
+        *\r
+        * Requested events are set. Running task becomes ready (is preempted)\r
+        * Waiting task becomes running. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_l_full );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_02 );\r
+       /* Let etask__l_full */\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_04 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_06 );\r
+\r
+\r
+       /** @treq OSEK_EV_07\r
+        *\r
+        * Call SetEvent() from preemptive task on waiting extended\r
+        * task which is waiting for at least one of the requested\r
+        * events and has equal or lower priority than running task\r
+        *\r
+        * Requested events are set. Running task is not preempted.\r
+        * Waiting task becomes ready. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_l_full );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_02 );\r
+       /* Let the lowerprio task hit WaitEvent() */\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_04 );\r
+       /* Set the Event, no preempt */\r
+       rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_05 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_07 );\r
+\r
+       /** @treq OSEK_EV_08\r
+        *\r
+        * Call SetEvent() from preemptive task on waiting extended\r
+        * task which is not waiting for any of the requested events\r
+        *\r
+        * Requested events are set. Running task is not preempted.\r
+        * Waiting task doesn\92t become ready. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_h_full );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_03 );\r
+       rv = SetEvent( TASK_ID_etask_h_full, EVENT_MASK_go2 );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_04 );\r
+       /* Cleanup, Let it run */\r
+       rv = SetEvent( TASK_ID_etask_h_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_06 );\r
+\r
+       /** @treq OSEK_EV_09\r
+        *\r
+        * Call SetEvent() from non-preemptive task on ready extended\r
+        * task.\r
+        *\r
+        * Requested events are set. Running task is not preempted.\r
+        * Service returns E_OK
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_etask_m_non);\r
+       TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_05 );\r
+\r
+\r
+       /** @treq OSEK_EV_10\r
+        *\r
+        * Call SetEvent() from preemptive task on ready extended task\r
+        *\r
+        * Requested events are set. Running task is not  preempted.\r
+        * Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_l_full );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_02 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_EV_11\r
+        *\r
+        * Call ClearEvent() from basic task\r
+        *\r
+        * Service returns E_OS_ACCESS\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_11, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_btask_h_full );\r
+       TEST_SET_FIXTURE(OSEK_EV_11, SEQ_NR_03 );\r
+\r
+\r
+       /** @treq OSEK_EV_12\r
+        *\r
+        * Call ClearEvent() from ISR2\r
+        *\r
+        *  Service returns E_OS_CALLEVEL\r
+        */\r
+       /* Create an ISR2 */\r
+       TEST_SET_FIXTURE(OSEK_EV_12, SEQ_NR_01 );\r
+       isrTask = Os_Arc_CreateIsr( isrSoftInt0, 8/*prio*/,"soft_0");\r
+       Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_0);\r
+       Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+       TEST_SET_FIXTURE(OSEK_EV_12, SEQ_NR_03 );\r
+\r
+\r
+       /** @treq OSEK_EV_13\r
+        *\r
+        * Call ClearEvent() from ISR3\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        *\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_13, SEQ_NR_01 );\r
+       /* Not applicatable */\r
+\r
+       /** @treq OSEK_EV_14\r
+        *\r
+        * Call ClearEvent() from extended task\r
+        *\r
+        * Requested events are cleared. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_14, SEQ_NR_01 );\r
+       /* This is already covered in this testsystem */\r
+\r
+       /** @treq OSEK_EV_15\r
+        *\r
+        * Call GetEvent() with invalid Task ID\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_15, SEQ_NR_01 );\r
+       rv = GetEvent(TASK_ID_ILL, &mask);\r
+       TEST_ASSERT( rv == E_OS_ID );\r
+\r
+       /** @treq OSEK_EV_16\r
+        *\r
+        * Call GetEvent() for basic task\r
+        *\r
+        * Service returns E_OS_ACCESS\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_16, SEQ_NR_01 );\r
+       rv = GetEvent(TASK_ID_btask_h_full, &mask);\r
+       TEST_ASSERT( rv == E_OS_ACCESS);\r
+\r
+       /** @treq OSEK_EV_17\r
+        *\r
+        * Call GetEvent() for suspended extended task\r
+        *\r
+        * Service returns E_OS_STATE\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_17, SEQ_NR_01 );\r
+       rv = GetEvent(TASK_ID_etask_h_full, &mask);\r
+       TEST_ASSERT( rv == E_OS_STATE);\r
+\r
+       /** @treq OSEK_EV_18\r
+        *\r
+        * Call GetEvent() for running extended task\r
+        *\r
+        * Return current state of all event bits. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_18, SEQ_NR_01 );\r
+       rv = GetTaskID(&taskId);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = GetEvent(taskId, &mask);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_ASSERT( mask == 0 );\r
+\r
+       /** @treq OSEK_EV_19\r
+        *\r
+        * Call GetEvent() for ready extended task\r
+        *\r
+        * Return current state of all event bits. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_19, SEQ_NR_01 );\r
+       /* Make it ready */\r
+       rv = ActivateTask(TASK_ID_etask_l_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       /* Set an event */\r
+       rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go2 );\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+       rv = GetEvent( TASK_ID_etask_l_full, &mask );\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_ASSERT( mask == EVENT_MASK_go2 );\r
+\r
+       TEST_SET_FIXTURE(OSEK_EV_19, SEQ_NR_02 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_EV_19, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_EV_20\r
+        *\r
+        * Call GetEvent() for waiting extended task\r
+        *\r
+        * Return current state of all event bits. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_etask_l_full);\r
+       TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_04 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_EV_20, SEQ_NR_05 );\r
+\r
+\r
+       /** @treq OSEK_EV_21\r
+        *\r
+        * Call WaitEvent() from basic task\r
+        *\r
+        * Service returns E_OS_ACCESS\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_21, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_btask_h_full );\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_EV_21, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_EV_22\r
+        *\r
+        * Call WaitEvent() from extended task which occupies a resource\r
+        *\r
+        * Service returns E_OS_RESOURCE\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_22, SEQ_NR_01 );\r
+       rv = GetResource(RES_ID_std_1);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OS_RESOURCE);\r
+       rv = ReleaseResource(RES_ID_std_1);\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+       /** @treq OSEK_EV_23\r
+        *\r
+        * Call WaitEvent() from ISR2\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_23, SEQ_NR_01 );\r
+       Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+       TEST_SET_FIXTURE(OSEK_EV_23, SEQ_NR_03 );\r
+\r
+\r
+       /** @treq OSEK_EV_24\r
+        * Call WaitEvent() from ISR3\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_24, SEQ_NR_01 );\r
+       /* Not applicable */\r
+\r
+       /** @treq OSEK_EV_25\r
+        *\r
+        * Call WaitEvent() from extended task. None of the events waited for is set\r
+        *\r
+        * Running task becomes waiting and ready task with highest priority is executed  Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_25, SEQ_NR_01 );\r
+       /* Already by using TestActivateAndWait()  */\r
+\r
+       /** @treq OSEK_EV_26\r
+        *\r
+        * Call WaitEvent() from extended task. At least one event waited for is already set\r
+        *\r
+        * No preemption of running task Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_26, SEQ_NR_01 );\r
+       rv = SetEvent( taskId, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_EV_26, SEQ_NR_02 );\r
+\r
+       TestExit(0);\r
+}\r
diff --git a/system/kernel/testsystem/osek_04_rm/Os_Cfg.c b/system/kernel/testsystem/osek_04_rm/Os_Cfg.c
new file mode 100644 (file)
index 0000000..a171e89
--- /dev/null
@@ -0,0 +1,221 @@
+/* 
+* Configuration of module Os (Os_Cfg.c)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Mon Oct 04 08:11:07 CEST 2010
+*/
+
+       \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h"                                // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ###############################    DEBUG OUTPUT     #############################\r
+uint32 os_dbg_mask = D_RESOURCE |D_SCHTBL |D_EVENT |D_TASK |D_ALARM;\r
\r
+\r
+\r
+// #################################    COUNTERS     ###############################\r
+GEN_COUNTER_HEAD {\r
+       GEN_COUNTER(    COUNTER_ID_Counter1,\r
+                                       "Counter1",\r
+                                       COUNTER_TYPE_HARD,\r
+                                       COUNTER_UNIT_NANO,\r
+                                       0xffff,\r
+                                       1,\r
+                                       0,\r
+                                       0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ##################################    ALARMS     ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################    RESOURCES     ###############################\r
+GEN_RESOURCE_HEAD {\r
+       GEN_RESOURCE(\r
+               RES_ID_int_1,\r
+               RESOURCE_TYPE_INTERNAL,\r
+               0\r
+       ),\r
+       GEN_RESOURCE(\r
+               RES_ID_int_2,\r
+               RESOURCE_TYPE_INTERNAL,\r
+               0\r
+       ),\r
+       GEN_RESOURCE(\r
+               RES_ID_std_1,\r
+               RESOURCE_TYPE_STANDARD,\r
+               0\r
+       ),\r
+       GEN_RESOURCE(\r
+               RES_ID_std_h,\r
+               RESOURCE_TYPE_STANDARD,\r
+               0\r
+       ),\r
+};\r
+\r
+// ##############################    STACKS (TASKS)     ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_l_non,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(btask_m_non,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+\r
+// ##################################    TASKS     #################################\r
+GEN_TASK_HEAD {\r
+       GEN_ETASK(      OsIdle,\r
+                               0,\r
+                               FULL,\r
+                               TRUE,\r
+                               NULL,\r
+                               0 \r
+       ),\r
+       GEN_BTASK(\r
+               btask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               RES_MASK_std_h | 0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_l_non,\r
+               4,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               RES_MASK_std_h | 0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_ll_non,\r
+               3,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_m_full,\r
+               5,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               RES_MASK_std_h | 0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_m_non,\r
+               5,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_ETASK(\r
+               etask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               RES_MASK_std_h | 0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full,\r
+               5,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               RES_MASK_std_1 | 0\r
+       ),\r
+               \r
+                               \r
+};\r
+\r
+// ##################################    HOOKS     #################################\r
+GEN_HOOKS( \r
+       StartupHook, \r
+       NULL, \r
+       ShutdownHook, \r
+       ErrorHook,\r
+       PreTaskHook, \r
+       PostTaskHook \r
+);\r
+\r
+// ##################################    ISRS     ##################################\r
+\r
+\r
+// ############################    SCHEDULE TABLES     #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
diff --git a/system/kernel/testsystem/osek_04_rm/Os_Cfg.h b/system/kernel/testsystem/osek_04_rm/Os_Cfg.h
new file mode 100644 (file)
index 0000000..55dc346
--- /dev/null
@@ -0,0 +1,101 @@
+/* 
+* Configuration of module Os (Os_Cfg.h)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Mon Oct 04 08:11:07 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2) 
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1    0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go  1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_int_1   0\r
+#define RES_ID_int_2   1\r
+#define RES_ID_std_1   2\r
+#define RES_ID_std_h   3\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_int_1 (1 << 0)\r
+#define RES_MASK_int_2 (1 << 1)\r
+#define RES_MASK_std_1 (1 << 2)\r
+#define RES_MASK_std_h (1 << 3)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full   1\r
+#define TASK_ID_btask_l_full   2\r
+#define TASK_ID_btask_l_non    3\r
+#define TASK_ID_btask_ll_non   4\r
+#define TASK_ID_btask_m_full   5\r
+#define TASK_ID_btask_m_non    6\r
+#define TASK_ID_etask_h_full   7\r
+#define TASK_ID_etask_l_full   8\r
+#define TASK_ID_etask_m_full   9\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_l_non( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void btask_m_non( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE        2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT                   0 \r
+#define OS_TASK_CNT                            10\r
+#define OS_SCHTBL_CNT                  0\r
+#define OS_COUNTER_CNT                 1\r
+#define OS_EVENTS_CNT                  1\r
+#define OS_ISRS_CNT                            0\r
+#define OS_RESOURCE_CNT                        4\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG                           STD_ON\r
+\r
+#define OS_SC1                                                 STD_ON     \r
+#define OS_STACK_MONITORING                    STD_ON\r
+#define OS_STATUS_EXTENDED                     STD_ON\r
+#define OS_USE_GET_SERVICE_ID          STD_ON\r
+#define OS_USE_PARAMETER_ACCESS                STD_OFF\r
+#define OS_RES_SCHEDULER                       STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
diff --git a/system/kernel/testsystem/osek_04_rm/build_config.mk b/system/kernel/testsystem/osek_04_rm/build_config.mk
new file mode 100644 (file)
index 0000000..b574ebe
--- /dev/null
@@ -0,0 +1,5 @@
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
diff --git a/system/kernel/testsystem/osek_04_rm/config_osek_rm.arxml b/system/kernel/testsystem/osek_04_rm/config_osek_rm.arxml
new file mode 100644 (file)
index 0000000..6519d05
--- /dev/null
@@ -0,0 +1,480 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+    <AR-PACKAGE>\r
+      <SHORT-NAME>config_osek_rm</SHORT-NAME>\r
+      <ELEMENTS>\r
+        <ECU-CONFIGURATION UUID="1cc76430-48de-4bcf-ba4b-b31323e01607">\r
+          <SHORT-NAME>config_osek_rm</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <DOC-REVISIONS>\r
+              <DOC-REVISION/>\r
+            </DOC-REVISIONS>\r
+            <SDGS>\r
+              <SDG GID="Arccore::EcuOptions">\r
+                <SD GID="MCU">Undefined MCU</SD>\r
+                <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_04_rm</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/config_osek_rm/SwComposition_config_osek_rm</ECU-SW-COMPOSITION-REF>\r
+          <MODULE-REFS>\r
+            <MODULE-REF DEST="MODULE-CONFIGURATION">/config_osek_rm/Os</MODULE-REF>\r
+          </MODULE-REFS>\r
+        </ECU-CONFIGURATION>\r
+        <ECU-SW-COMPOSITION UUID="68ecea8c-16c5-4723-bfcc-fc11f4f72291">\r
+          <SHORT-NAME>SwComposition_config_osek_rm</SHORT-NAME>\r
+        </ECU-SW-COMPOSITION>\r
+        <MODULE-CONFIGURATION UUID="e3a90a5a-3a2c-4b90-82fa-498d4bf14895">\r
+          <SHORT-NAME>Os</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <SDGS>\r
+              <SDG/>\r
+              <SDG GID="Arccore::ModuleOptions">\r
+                <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+                <SD GID="ARCCORE_EDITOR_VERSION">2.0.7</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+          <CONTAINERS>\r
+            <CONTAINER UUID="46e7afa2-40d4-4969-9216-dbb68fd7dc71">\r
+              <SHORT-NAME>OsOS</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+                  <VALUE>1000</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+                  <VALUE>512</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="5c123a65-e644-421a-be3b-62886c189f46">\r
+                  <SHORT-NAME>OsHooks</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="179b1eed-bae4-4ff9-8101-c81794d849be">\r
+              <SHORT-NAME>etask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>6</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="c7934bf2-d3cf-4df2-822a-c872121dcd2b">\r
+              <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="b1f99972-b3c7-41ec-a1ec-0d4dbe6b2e73">\r
+                  <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="2f0895f3-1d8a-4169-8fe1-105ff68a3a5a">\r
+              <SHORT-NAME>etask_l_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_h</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="f120ab09-188b-463b-a9e4-94f60e84f125">\r
+              <SHORT-NAME>btask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>6</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_h</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="c3213aac-578d-4870-9e2a-7b0a731f9ae3">\r
+              <SHORT-NAME>btask_m_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_h</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="9de6649a-e85b-4a49-a9f4-5055e02480ca">\r
+              <SHORT-NAME>btask_l_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="47b32026-3fe6-4fd5-b26e-fb0faa6bdac3">\r
+              <SHORT-NAME>btask_ll_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>3</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="de75266a-d9ea-4225-803f-b8bc02a446bf">\r
+              <SHORT-NAME>go</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="83c2a703-f295-4d91-b3c7-46bc6913e80e">\r
+              <SHORT-NAME>Counter1</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+                  <VALUE>65535</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+                  <VALUE>OS_TICK</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="92cc71da-7618-4431-90e4-f8451031d2e7">\r
+              <SHORT-NAME>btask_m_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="84a2cc88-79f3-45cd-bc3b-afcd525ba482">\r
+              <SHORT-NAME>std_1</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+                  <VALUE>STANDARD</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="6cec9cf6-c09c-4f41-b460-8d2229152b1a">\r
+              <SHORT-NAME>std_h</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+                  <VALUE>STANDARD</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="a7582418-2f8e-4267-ad5a-cfb69d908787">\r
+              <SHORT-NAME>btask_l_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>BASIC</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskResourceRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_rm/Os/std_h</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="b54a2fdc-aa48-4397-a4af-9128f3721470">\r
+              <SHORT-NAME>int_1</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+                  <VALUE>INTERNAL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="c2429cd6-2b8d-4351-bacc-6b2003b6f05b">\r
+              <SHORT-NAME>int_2</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+                  <VALUE>INTERNAL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+          </CONTAINERS>\r
+        </MODULE-CONFIGURATION>\r
+      </ELEMENTS>\r
+    </AR-PACKAGE>\r
+  </TOP-LEVEL-PACKAGES></AUTOSAR>\r
diff --git a/system/kernel/testsystem/osek_04_rm/makefile b/system/kernel/testsystem/osek_04_rm/makefile
new file mode 100644 (file)
index 0000000..0d07e87
--- /dev/null
@@ -0,0 +1,60 @@
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += test_osek_rm.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/system/kernel/testsystem/osek_04_rm/test_osek_rm.c b/system/kernel/testsystem/osek_04_rm/test_osek_rm.c
new file mode 100644 (file)
index 0000000..152ba30
--- /dev/null
@@ -0,0 +1,410 @@
+/*\r
+ *  Created on: 4 aug 2010\r
+ *      Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_RM_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l  - low prio\r
+ * m  - medium\r
+ * h  - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+       OSEK_RM_01 = 1,\r
+       OSEK_RM_02,\r
+       OSEK_RM_03,\r
+       OSEK_RM_04,\r
+       OSEK_RM_05,\r
+       OSEK_RM_06,\r
+       OSEK_RM_07,\r
+       OSEK_RM_08,\r
+       OSEK_RM_09,\r
+       OSEK_RM_10,\r
+       OSEK_RM_11,\r
+       OSEK_RM_12,\r
+       OSEK_RM_13,\r
+       OSEK_RM_14,\r
+       OSEK_RM_15,\r
+       OSEK_RM_16,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+\r
+void TestTaskRunLowerPrio( void ) {\r
+       StatusType rv;\r
+       /* Activate lowest prioriy task */\r
+       rv = ActivateTask(TASK_ID_btask_ll_non);\r
+       TEST_ASSERT( rv == E_OK );\r
+       /* Let the low prio task run */\r
+       rv = WaitEvent(EVENT_MASK_go);\r
+       rv = ClearEvent(EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void TestActivateAndWait( TaskType task ) {\r
+       StatusType rv;\r
+       rv = ActivateTask(task);\r
+       TEST_ASSERT( rv == E_OK );\r
+       /* Let the low prio task run */\r
+       rv = WaitEvent(EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent(EVENT_MASK_go);\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+#if 0\r
+static void isrSoftInt1( void ) {\r
+       switch ( TestWorld.fixtureNr ) {\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+       StatusType rv;\r
+       TaskType taskId;\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+#endif\r
+\r
+void OsIdle(void) {\r
+       while(1);\r
+}\r
+\r
+\r
+void btask_l_non ( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_RM_06:\r
+               TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_02 );\r
+               rv = GetResource(RES_ID_std_h);\r
+               TEST_ASSERT( rv == E_OK);\r
+               rv = ActivateTask( TASK_ID_btask_m_non );\r
+               TEST_ASSERT( rv == E_OK);\r
+               rv = Schedule();\r
+               TEST_ASSERT( rv == E_OS_RESOURCE);\r
+               TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_03 );\r
+               rv = ReleaseResource(RES_ID_std_h);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_04 );\r
+               break;\r
+       case OSEK_RM_15:\r
+               TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_02 );\r
+               rv = GetResource(RES_SCHEDULER);\r
+               TEST_ASSERT( rv == E_OK);\r
+               rv = ActivateTask( TASK_ID_btask_m_non );\r
+               TEST_ASSERT( rv == E_OK);\r
+               rv = Schedule();\r
+               TEST_ASSERT( rv == E_OS_RESOURCE);\r
+               TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_03 );\r
+               rv = ReleaseResource(RES_SCHEDULER);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_m_non ( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_RM_06:\r
+               TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_05 );\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK);\r
+               break;\r
+       case OSEK_RM_07:\r
+               TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_04 );\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK);\r
+               break;\r
+       case OSEK_RM_15:\r
+               TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_05 );\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK);\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+void btask_h_full ( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_RM_08:\r
+               TEST_SET_FIXTURE(OSEK_RM_08, SEQ_NR_03 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+}\r
+\r
+void btask_l_full ( void ) {\r
+\r
+}\r
+\r
+void btask_ll_non( void ) {\r
+       StatusType rv;\r
+       /* Used for scheduling ONLY */\r
+       rv = SetEvent(TASK_ID_etask_m_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void btask_m_full ( void ) {\r
+\r
+}\r
+\r
+void etask_h_full( void ) {\r
+\r
+}\r
+\r
+void etask_l_full( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_RM_07:\r
+               TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_02 );\r
+               rv = GetResource(RES_ID_std_h);\r
+               TEST_ASSERT( rv == E_OK);\r
+               rv = ActivateTask( TASK_ID_btask_m_non );\r
+               TEST_ASSERT( rv == E_OK);\r
+               TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_03 );\r
+               /* reshedule to btask_m_non */\r
+               rv = ReleaseResource(RES_ID_std_h);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_06 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+       StatusType rv;\r
+\r
+       /** @treq OSEK_RM_01\r
+        *\r
+        * Call GetResource() from task which has no access to this resource\r
+        *\r
+        * Service returns E_OS_ACCESS\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_01, SEQ_NR_01 );\r
+       rv = GetResource( RES_ID_std_h);\r
+       TEST_ASSERT( rv = E_OS_ACCESS )\r
+\r
+       /** @treq OSEK_RM_02\r
+        *\r
+        * Call GetResource() from task with invalid resource ID\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_02, SEQ_NR_01 );\r
+       rv = GetResource( RES_ID_ILL);\r
+       TEST_ASSERT( rv = E_OS_ID );\r
+\r
+       /** @treq OSEK_RM_03\r
+        *\r
+        * Call GetResource() from ISR2\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_03, SEQ_NR_01 );\r
+       /* This test is not applicable since it is allowed in OSEK\r
+        * to do GetResource() from ISR2
+        */\r
+\r
+       /** @treq OSEK_RM_04\r
+        *\r
+        * Call GetResource() from ISR3\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_04, SEQ_NR_01 );\r
+       /* Not applicable */\r
+\r
+       /** @treq OSEK_RM_05\r
+        *\r
+        * Call GetResource() from task with too many resources occupied in parallel\r
+        *\r
+        * Service returns E_OS_LIMIT\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_05, SEQ_NR_01 );\r
+       /* Not applicable */\r
+\r
+       /** @treq OSEK_RM_06\r
+        *\r
+        * Test Priority Ceiling Protocol:\r
+        * Call GetResource() from non-preemptive task, activate task with priority\r
+        * higher than running task but lower than ceiling priority, and force\r
+        * rescheduling\r
+        *\r
+        * Resource is occupied and running task\92s priority is set to resource\92s\r
+        * ceiling priority. Service returns E_OK. No preemption occurs after\r
+        * activating the task with higher priority and rescheduling\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_l_non);\r
+       TEST_SET_FIXTURE(OSEK_RM_06, SEQ_NR_06 );\r
+\r
+       /** @treq OSEK_RM_07\r
+        *\r
+        * Test Priority Ceiling Protocol:\r
+        * Call GetResource()from preemptive task, and activate task with priority\r
+        * higher than running task but lower than ceiling priority\r
+        *\r
+        * Resource is occupied and running task\92s priority is set to resource\92s\r
+        * ceiling priority. Service returns E_OK. No preemption occurs after\r
+        * activating the task with higher priority\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_etask_l_full);\r
+       TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_05 );\r
+       TestTaskRunLowerPrio();\r
+       TEST_SET_FIXTURE(OSEK_RM_07, SEQ_NR_07 );\r
+\r
+       /** @treq OSEK_RM_08\r
+        *\r
+        *      Call GetResource() for resource RES_SCHEDULER\r
+        *\r
+        * Resource is occupied and running task\92s priority is set to resource\92s\r
+        * ceiling priority. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_08, SEQ_NR_01 );\r
+       rv = GetResource( RES_SCHEDULER );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ActivateTask( TASK_ID_btask_h_full);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_RM_08, SEQ_NR_02 );\r
+       rv = ReleaseResource( RES_SCHEDULER);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_RM_08, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_RM_09\r
+        *\r
+        * Call ReleaseResource() from task with invalid resource ID\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_09, SEQ_NR_01 );\r
+       rv = ReleaseResource( RES_ID_ILL);\r
+       TEST_ASSERT( rv == E_OS_ID);\r
+\r
+       /** @treq OSEK_RM_10\r
+        *\r
+        * Call ReleaseResource() from ISR2\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_10, SEQ_NR_01 );\r
+       /* This test is not applicable since it is allowed in OSEK\r
+        * to do GetResource() from ISR2\r
+        */\r
+\r
+       /** @treq OSEK_RM_11\r
+        *\r
+        * Call ReleaseResource() from ISR3\r
+        *\r
+        * Service returns E_OS_CALLEVEL\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_RM_11, SEQ_NR_01 );\r
+       /* Not applicable */\r
+\r
+       /** @treq OSEK_RM_12\r
+        *\r
+        * Call ReleaseResource() from task with resource which is not occupied\r
+        *\r
+        * Service returns E_OS_NOFUNC\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_12, SEQ_NR_01 );\r
+       rv = ReleaseResource( RES_ID_std_1 );\r
+       TEST_ASSERT( rv == E_OS_NOFUNC );\r
+\r
+       /** @treq OSEK_RM_13\r
+        *\r
+        * Call ReleaseResource() from non-preemptive task\r
+        *\r
+        * Resource is released and running task\92s priority is reset.\r
+        * No preemption of running task. Service returns E_OK\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_RM_13, SEQ_NR_01 );\r
+       /* Already covered in OSEK_RM_06 */\r
+\r
+       /** @treq OSEK_RM_14\r
+        *\r
+        * Call ReleaseResource() from preemptive task\r
+        *\r
+        * Resource is released and running task\92s priority is reset.\r
+        * Ready task with highest priority is executed(Rescheduling).\r
+        * Service returns E_OK"\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_14, SEQ_NR_01 );\r
+       /* Already covered in OSEK_RM_07 */\r
+\r
+       /** @treq OSEK_RM_15\r
+        *\r
+        * Call ReleaseResource()from non-preemptive task for resource\r
+        * RES_SCHEDULER\r
+        *\r
+        * Resource is released and running task\92s priority is reset.\r
+        * No preemption of running task. Service returns E_OK\r
+        *\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_01 );\r
+       TestActivateAndWait(TASK_ID_btask_l_non);\r
+       TEST_SET_FIXTURE(OSEK_RM_15, SEQ_NR_06 );\r
+\r
+       /** @treq OSEK_RM_16\r
+        *\r
+        * Call ReleaseResource()from preemptive task for resource\r
+        * RES_SCHEDULER\r
+        *\r
+        * Resource is released and running task\92s priority is reset.\r
+        * Ready task with highest priority is executed (Rescheduling).\r
+        * Service returns E_OK"\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_RM_16, SEQ_NR_01 );\r
+       /* Already covered in OSEK_RM_08 */\r
+\r
+       TestExit(0);\r
+}\r
diff --git a/system/kernel/testsystem/osek_05_al/Os_Cfg.c b/system/kernel/testsystem/osek_05_al/Os_Cfg.c
new file mode 100644 (file)
index 0000000..1fe2450
--- /dev/null
@@ -0,0 +1,175 @@
+/* 
+* Configuration of module Os (Os_Cfg.c)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Sun Oct 10 18:57:50 CEST 2010
+*/
+
+       \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h"                                // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ###############################    DEBUG OUTPUT     #############################\r
+uint32 os_dbg_mask = 0;\r
\r
+\r
+\r
+// #################################    COUNTERS     ###############################\r
+GEN_COUNTER_HEAD {\r
+       GEN_COUNTER(    COUNTER_ID_soft1,\r
+                                       "soft1",\r
+                                       COUNTER_TYPE_SOFT,\r
+                                       COUNTER_UNIT_NANO,\r
+                                       65535,\r
+                                       1,\r
+                                       2,\r
+                                       0),\r
+       GEN_COUNTER(    COUNTER_ID_system_tick,\r
+                                       "system_tick",\r
+                                       COUNTER_TYPE_HARD,\r
+                                       COUNTER_UNIT_NANO,\r
+                                       0xffff,\r
+                                       1,\r
+                                       1,\r
+                                       0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_system_tick;\r
+\r
+// ##################################    ALARMS     ################################\r
+\r
+GEN_ALARM_HEAD {\r
+       GEN_ALARM(      ALARM_ID_act_etask_h_full,\r
+                               "act_etask_h_full",\r
+                               COUNTER_ID_soft1,\r
+                               NULL,\r
+                               ALARM_ACTION_ACTIVATETASK,\r
+                               TASK_ID_etask_h_full,\r
+                               NULL,\r
+                               NULL ),\r
+       GEN_ALARM(      ALARM_ID_act_etask_l_non,\r
+                               "act_etask_l_non",\r
+                               COUNTER_ID_soft1,\r
+                               NULL,\r
+                               ALARM_ACTION_ACTIVATETASK,\r
+                               TASK_ID_etask_l_non,\r
+                               NULL,\r
+                               NULL ),\r
+       GEN_ALARM(      ALARM_ID_setev_go_etask_h_full,\r
+                               "setev_go_etask_h",\r
+                               COUNTER_ID_soft1,\r
+                               NULL,\r
+                               ALARM_ACTION_SETEVENT,\r
+                               TASK_ID_etask_h_full,\r
+                               EVENT_MASK_go,\r
+                               NULL ),\r
+       GEN_ALARM(      ALARM_ID_sys_tick_act_etask_h_full,\r
+                               "sys_tick_act_eta",\r
+                               COUNTER_ID_system_tick,\r
+                               NULL,\r
+                               ALARM_ACTION_ACTIVATETASK,\r
+                               TASK_ID_etask_h_full,\r
+                               NULL,\r
+                               NULL ),\r
+};\r
+\r
+// ################################    RESOURCES     ###############################\r
+GEN_RESOURCE_HEAD {\r
+};\r
+\r
+// ##############################    STACKS (TASKS)     ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_non,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+\r
+// ##################################    TASKS     #################################\r
+GEN_TASK_HEAD {\r
+       GEN_ETASK(      OsIdle,\r
+                               0,\r
+                               FULL,\r
+                               TRUE,\r
+                               NULL,\r
+                               0 \r
+       ),\r
+       GEN_ETASK(\r
+               etask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_l_non,\r
+               4,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full,\r
+               5,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+};\r
+\r
+// ##################################    HOOKS     #################################\r
+GEN_HOOKS( \r
+       StartupHook, \r
+       NULL, \r
+       ShutdownHook, \r
+       ErrorHook,\r
+       PreTaskHook, \r
+       PostTaskHook \r
+);\r
+\r
+// ##################################    ISRS     ##################################\r
+\r
+\r
+// ############################    SCHEDULE TABLES     #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
diff --git a/system/kernel/testsystem/osek_05_al/Os_Cfg.h b/system/kernel/testsystem/osek_05_al/Os_Cfg.h
new file mode 100644 (file)
index 0000000..d0fd6a6
--- /dev/null
@@ -0,0 +1,88 @@
+/* 
+* Configuration of module Os (Os_Cfg.h)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Sun Oct 10 18:57:50 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2) 
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+#define ALARM_ID_act_etask_h_full      0\r
+#define ALARM_ID_act_etask_l_non       1\r
+#define ALARM_ID_setev_go_etask_h_full 2\r
+#define ALARM_ID_sys_tick_act_etask_h_full     3\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_soft1       0\r
+#define COUNTER_ID_system_tick 1\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_soft1 65535\r
+#define OSMAXALLOWEDVALUE_system_tick 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go  1\r
+#define EVENT_MASK_go2 2\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_etask_h_full   1\r
+#define TASK_ID_etask_l_non    2\r
+#define TASK_ID_etask_m_full   3\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void etask_h_full( void );\r
+void etask_l_non( void );\r
+void etask_m_full( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE        2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT                   4 \r
+#define OS_TASK_CNT                            4\r
+#define OS_SCHTBL_CNT                  0\r
+#define OS_COUNTER_CNT                 2\r
+#define OS_EVENTS_CNT                  2\r
+#define OS_ISRS_CNT                            0\r
+#define OS_RESOURCE_CNT                        0\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG                           STD_OFF\r
+\r
+#define OS_SC1                                                 STD_ON     \r
+#define OS_STACK_MONITORING                    STD_ON\r
+#define OS_STATUS_EXTENDED                     STD_ON\r
+#define OS_USE_GET_SERVICE_ID          STD_ON\r
+#define OS_USE_PARAMETER_ACCESS                STD_ON\r
+#define OS_RES_SCHEDULER                       STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
diff --git a/system/kernel/testsystem/osek_05_al/build_config.mk b/system/kernel/testsystem/osek_05_al/build_config.mk
new file mode 100644 (file)
index 0000000..b574ebe
--- /dev/null
@@ -0,0 +1,5 @@
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
diff --git a/system/kernel/testsystem/osek_05_al/config_osek_al.arxml b/system/kernel/testsystem/osek_05_al/config_osek_al.arxml
new file mode 100644 (file)
index 0000000..ee68a5a
--- /dev/null
@@ -0,0 +1,378 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+    <AR-PACKAGE>\r
+      <SHORT-NAME>config_osek_al</SHORT-NAME>\r
+      <ELEMENTS>\r
+        <ECU-CONFIGURATION UUID="5e838401-6c7f-4cc4-a310-85bfa3093061">\r
+          <SHORT-NAME>config_osek_al</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <DOC-REVISIONS>\r
+              <DOC-REVISION/>\r
+            </DOC-REVISIONS>\r
+            <SDGS>\r
+              <SDG GID="Arccore::EcuOptions">\r
+                <SD GID="MCU">Undefined MCU</SD>\r
+                <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_05_al</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/config_osek_al/SwComposition_config_osek_al</ECU-SW-COMPOSITION-REF>\r
+          <MODULE-REFS>\r
+            <MODULE-REF DEST="MODULE-CONFIGURATION">/config_osek_al/Os</MODULE-REF>\r
+          </MODULE-REFS>\r
+        </ECU-CONFIGURATION>\r
+        <ECU-SW-COMPOSITION UUID="4620a8eb-0826-482d-a426-0fddd23516bb">\r
+          <SHORT-NAME>SwComposition_config_osek_al</SHORT-NAME>\r
+        </ECU-SW-COMPOSITION>\r
+        <MODULE-CONFIGURATION UUID="2ddd0584-ca02-4843-8a4b-6ce49338b3b5">\r
+          <SHORT-NAME>Os</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <SDGS>\r
+              <SDG/>\r
+              <SDG GID="Arccore::ModuleOptions">\r
+                <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+                <SD GID="ARCCORE_EDITOR_VERSION">2.0.11</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+          <CONTAINERS>\r
+            <CONTAINER UUID="dae4ccf8-5356-4f92-99f9-8a7bd8036544">\r
+              <SHORT-NAME>OsOS</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+                  <VALUE>1000</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+                  <VALUE>512</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="80901634-8bf3-4ce8-8561-420ea79862b9">\r
+                  <SHORT-NAME>OsHooks</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="a382117b-e08f-421f-9c92-761545351b56">\r
+              <SHORT-NAME>act_etask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm</DEFINITION-REF>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/soft1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="b3336daf-4158-43cb-95ca-a0ef89eb4d09">\r
+                  <SHORT-NAME>OsAlarmActivateTask</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask</DEFINITION-REF>\r
+                  <REFERENCE-VALUES>\r
+                    <REFERENCE-VALUE>\r
+                      <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask/OsAlarmActivateTaskRef</DEFINITION-REF>\r
+                      <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/etask_h_full</VALUE-REF>\r
+                    </REFERENCE-VALUE>\r
+                  </REFERENCE-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="c85af5eb-5f12-471d-b16c-7915cd495426">\r
+              <SHORT-NAME>soft1</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+                  <VALUE>65535</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+                  <VALUE>SOFTWARE</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="36def18a-71ba-4f50-a4c5-02bc69c6e1a5">\r
+              <SHORT-NAME>etask_m_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="17733da9-ba24-49e1-971e-da4353b48aa0">\r
+                  <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="218dc9e2-9a93-41c5-8b84-062c1cd6c703">\r
+              <SHORT-NAME>etask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>6</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="43ce4e8d-ca73-44de-bad4-3e8253be43e8">\r
+              <SHORT-NAME>setev_go_etask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm</DEFINITION-REF>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/soft1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="4aeb20ed-5c69-4158-9117-b4de360aa22b">\r
+                  <SHORT-NAME>OsAlarmSetEvent</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmSetEvent</DEFINITION-REF>\r
+                  <REFERENCE-VALUES>\r
+                    <REFERENCE-VALUE>\r
+                      <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmSetEvent/OsAlarmSetEventRef</DEFINITION-REF>\r
+                      <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/go</VALUE-REF>\r
+                    </REFERENCE-VALUE>\r
+                    <REFERENCE-VALUE>\r
+                      <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmSetEvent/OsAlarmSetEventTaskRef</DEFINITION-REF>\r
+                      <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/etask_h_full</VALUE-REF>\r
+                    </REFERENCE-VALUE>\r
+                  </REFERENCE-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="d5f6e102-70af-4857-96fb-46808d1e6050">\r
+              <SHORT-NAME>go</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="176f4b96-0f87-4b4e-87fd-ca8fd2af0d9e">\r
+              <SHORT-NAME>system_tick</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+                  <VALUE>65535</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+                  <VALUE>OS_TICK</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="ca1a3f14-2a6b-4982-9433-2caa410de571">\r
+              <SHORT-NAME>sys_tick_act_etask_h_full</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm</DEFINITION-REF>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/system_tick</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="a915bd71-4685-46c4-94c0-07d9962d8fd4">\r
+                  <SHORT-NAME>OsAlarmActivateTask</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask</DEFINITION-REF>\r
+                  <REFERENCE-VALUES>\r
+                    <REFERENCE-VALUE>\r
+                      <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask/OsAlarmActivateTaskRef</DEFINITION-REF>\r
+                      <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/etask_h_full</VALUE-REF>\r
+                    </REFERENCE-VALUE>\r
+                  </REFERENCE-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="a93c6291-acbd-439f-b4f8-391fc898bcc5">\r
+              <SHORT-NAME>etask_l_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>NON</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="e3bfa880-abbd-4a51-9fea-48d5e335182b">\r
+              <SHORT-NAME>act_etask_l_non</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm</DEFINITION-REF>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/soft1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="54afe69a-571f-47c1-95ba-f1fa96b2ca8c">\r
+                  <SHORT-NAME>OsAlarmActivateTask</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask</DEFINITION-REF>\r
+                  <REFERENCE-VALUES>\r
+                    <REFERENCE-VALUE>\r
+                      <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask/OsAlarmActivateTaskRef</DEFINITION-REF>\r
+                      <VALUE-REF DEST="CONTAINER">/config_osek_al/Os/etask_l_non</VALUE-REF>\r
+                    </REFERENCE-VALUE>\r
+                  </REFERENCE-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="758b10b6-58a5-42bc-af51-76dd42f82990">\r
+              <SHORT-NAME>go2</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsEvent/OsEventMask</DEFINITION-REF>\r
+                  <VALUE>2</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+          </CONTAINERS>\r
+        </MODULE-CONFIGURATION>\r
+      </ELEMENTS>\r
+    </AR-PACKAGE>\r
+  </TOP-LEVEL-PACKAGES></AUTOSAR>\r
diff --git a/system/kernel/testsystem/osek_05_al/makefile b/system/kernel/testsystem/osek_05_al/makefile
new file mode 100644 (file)
index 0000000..da26eca
--- /dev/null
@@ -0,0 +1,60 @@
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += test_osek_al.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/system/kernel/testsystem/osek_05_al/test_osek_al.c b/system/kernel/testsystem/osek_05_al/test_osek_al.c
new file mode 100644 (file)
index 0000000..72ad427
--- /dev/null
@@ -0,0 +1,843 @@
+/*\r
+ *  Created on: 4 aug 2010\r
+ *      Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_AL_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l  - low prio\r
+ * m  - medium\r
+ * h  - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+       OSEK_AL_01 = 1,\r
+       OSEK_AL_02,\r
+       OSEK_AL_03,\r
+       OSEK_AL_04,\r
+       OSEK_AL_05,\r
+       OSEK_AL_06,\r
+       OSEK_AL_07,\r
+       OSEK_AL_08,\r
+       OSEK_AL_09,\r
+       OSEK_AL_10,\r
+       OSEK_AL_11,\r
+       OSEK_AL_12,\r
+       OSEK_AL_13,\r
+       OSEK_AL_14,\r
+       OSEK_AL_15,\r
+       OSEK_AL_16,\r
+       OSEK_AL_17,\r
+       OSEK_AL_18,\r
+       OSEK_AL_19,\r
+       OSEK_AL_20,\r
+       OSEK_AL_21,\r
+       OSEK_AL_22,\r
+       OSEK_AL_23,\r
+       OSEK_AL_24,\r
+       OSEK_AL_25,\r
+       OSEK_AL_26,\r
+       OSEK_AL_27,\r
+       OSEK_AL_28,\r
+       OSEK_AL_29,\r
+       OSEK_AL_30,\r
+       OSEK_AL_31,\r
+       OSEK_AL_32,\r
+       OSEK_AL_33,\r
+       OSEK_AL_34,\r
+       OSEK_AL_35,\r
+       OSEK_AL_36,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static uint8_t activations = 0;\r
+\r
+#if 0\r
+static void isrSoftInt1( void ) {\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_07:\r
+               TEST_SET_FIXTURE(OSEK_AL_07, SEQ_NR_03 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+       StatusType rv;\r
+       TaskType taskId;\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_07:\r
+               TEST_SET_FIXTURE(OSEK_AL_07, SEQ_NR_02 );\r
+               Irq_GenerateSoftInt( IRQ_SOFTINT_1 );\r
+               break;\r
+       case OSEK_TM_09:\r
+               TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+\r
+#endif\r
+\r
+void OsIdle(void) {\r
+       while(1);\r
+}\r
+\r
+#if 0\r
+void btask_l_non ( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_09:\r
+               TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_02 );\r
+               /* Make higher prio task ready */\r
+               rv = SetEvent( TASK_ID_etask_m_full,EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK ) ;\r
+               TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_03 );\r
+               Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+               TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_05 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+\r
+void etask_m_non ( void ) {\r
+       StatusType rv;\r
+       TaskStateType taskState;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_AL_04:\r
+               TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_03 );\r
+               /* Verify that task is in waiting */\r
+               rv = GetTaskState(etask_m_full,&taskState);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( taskState == TASK_STATE_WAITING);\r
+               /* Set the Event */\r
+               rv = SetEvent( etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               /* Verify state, again */\r
+               rv = GetTaskState(etask_m_full,&taskState);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( taskState == TASK_STATE_READY);\r
+               TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_04 );\r
+               break;\r
+       case OSEK_AL_04:\r
+               TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_03 );\r
+               rv = SetEvent( etask_m_full, EVENT_MASK_go2 );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+#endif\r
+\r
+void etask_l_non( void ) {\r
+\r
+       StatusType rv;\r
+       TaskStateType taskState;\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_AL_30:\r
+               TEST_SET_FIXTURE(OSEK_AL_30, SEQ_NR_02 );\r
+               rv = IncrementCounter(COUNTER_ID_soft1);\r
+               TEST_ASSERT( rv == E_OK );\r
+               rv = IncrementCounter(COUNTER_ID_soft1);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_30, SEQ_NR_03 );\r
+               break;\r
+       case OSEK_AL_32:\r
+               TEST_SET_FIXTURE(OSEK_AL_32, SEQ_NR_03 );\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               break;\r
+       case OSEK_AL_33:\r
+               TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_03 );\r
+               rv = IncrementCounter(COUNTER_ID_soft1);\r
+               TEST_ASSERT( rv == E_OK );\r
+               /* Set event go in etask_h_full, nothing should happen */\r
+               rv = IncrementCounter(COUNTER_ID_soft1);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_04 );\r
+\r
+               rv = GetTaskState(TASK_ID_etask_h_full,&taskState);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( taskState == TASK_STATE_WAITING );\r
+\r
+               /* Wake up etask_m_full for cleanup */\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_05 );\r
+               break;\r
+       case OSEK_AL_34:\r
+               TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_03 );\r
+               rv = IncrementCounter(COUNTER_ID_soft1);\r
+               TEST_ASSERT( rv == E_OK );\r
+               /* Set event go in etask_h_full  */\r
+               rv = IncrementCounter(COUNTER_ID_soft1);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_04 );\r
+\r
+               rv = GetTaskState(TASK_ID_etask_h_full,&taskState);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( taskState == TASK_STATE_READY );\r
+\r
+               /* Wake up etask_m_full for cleanup */\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_05 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+void etask_h_full( void ) {\r
+\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_AL_14:\r
+               TEST_SET_FIXTURE(OSEK_AL_14, SEQ_NR_03 );\r
+               break;\r
+       case OSEK_AL_15:\r
+               TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_02 );\r
+               rv = WaitEvent(EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_04 );\r
+               rv = ClearEvent( EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               break;\r
+       case OSEK_AL_23:\r
+               TEST_SET_FIXTURE(OSEK_AL_23, SEQ_NR_03 );\r
+               break;\r
+       case OSEK_AL_24:\r
+               TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_02 );\r
+               rv = WaitEvent(EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_04 );\r
+               rv = ClearEvent( EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               break;\r
+       case OSEK_AL_29:\r
+               TEST_SET_FIXTURE(OSEK_AL_29, SEQ_NR_03 );\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               break;\r
+       case OSEK_AL_30:\r
+               TEST_SET_FIXTURE(OSEK_AL_30, SEQ_NR_04 );\r
+               rv = SetEvent( TASK_ID_etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               break;\r
+       case OSEK_AL_31:\r
+               TEST_SET_FIXTURE(OSEK_AL_31, SEQ_NR_02 );\r
+               break;\r
+       case OSEK_AL_33:\r
+               TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_02 );\r
+               rv = WaitEvent( EVENT_MASK_go2 );\r
+               TEST_ASSERT( rv == E_OK );\r
+               rv = ClearEvent( EVENT_MASK_go2 | EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_07 );\r
+               break;\r
+       case OSEK_AL_34:\r
+               TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_02 );\r
+               rv = WaitEvent( EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               rv = ClearEvent( EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_06 );\r
+               break;\r
+       case OSEK_AL_35:\r
+               TEST_SET_FIXTURE(OSEK_AL_35, SEQ_NR_02 );\r
+               rv = WaitEvent( EVENT_MASK_go2 );\r
+               TEST_ASSERT( rv == E_OK );\r
+               rv = ClearEvent( EVENT_MASK_go2 | EVENT_MASK_go );\r
+               break;\r
+       case OSEK_AL_36:\r
+               TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_02 );\r
+               rv = WaitEvent( EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               rv = ClearEvent( EVENT_MASK_go );\r
+               TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+       StatusType rv;\r
+       TaskType taskId;\r
+       TaskType isrTask;\r
+       TaskStateType taskState;\r
+       TickType tick;\r
+       AlarmBaseType alarmBase;\r
+       EventMaskType eventMask;\r
+\r
+       /** @treq OSEK_AL_01\r
+        *\r
+        * Call GetAlarmBase() with invalid alarm ID\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_01, SEQ_NR_01 );\r
+       rv = GetAlarmBase(ALARM_ID_ILL,&alarmBase);\r
+       TEST_ASSERT( rv == E_OS_ID);\r
+\r
+       /** @treq OSEK_AL_02\r
+        *\r
+        * Call GetAlarmBase()\r
+        *\r
+        * Return alarm base characteristics. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_02, SEQ_NR_01 );\r
+       rv = GetAlarmBase(ALARM_ID_act_etask_h_full,&alarmBase);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_ASSERT( alarmBase.maxallowedvalue == 65535 );\r
+       TEST_ASSERT( alarmBase.mincycle == 2 );\r
+       TEST_ASSERT( alarmBase.tickperbase == 1 );\r
+\r
+       /** @treq OSEK_AL_03\r
+        *\r
+        * Call GetAlarm() with invalid alarm ID\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_03, SEQ_NR_01 );\r
+       rv = GetAlarm(ALARM_ID_ILL,&tick);\r
+       TEST_ASSERT( rv == E_OS_ID);\r
+\r
+       /** @treq OSEK_AL_04\r
+        *\r
+        * Call GetAlarm() for alarm which is currently not in use\r
+        *\r
+        * Service returns E_OS_NOFUNC\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_04, SEQ_NR_01 );\r
+       rv = GetAlarm(ALARM_ID_act_etask_h_full,&tick);\r
+       TEST_ASSERT( rv == E_OS_NOFUNC);\r
+\r
+       /** @treq OSEK_AL_05\r
+        *\r
+        * Call GetAlarm() for alarm which will activate a task on expiration\r
+        *\r
+        * Returns number of ticks until expiration. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_05, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_act_etask_h_full,10,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = GetAlarm(ALARM_ID_act_etask_h_full,&tick);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_ASSERT( tick == 10 );\r
+       rv = CancelAlarm(ALARM_ID_act_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+       /** @treq OSEK_AL_06\r
+        *\r
+        * Call GetAlarm() for alarm which will set an event on expiration\r
+        *\r
+        * Returns number of ticks until expiration. Service returns E_OK
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_06, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = GetAlarm(ALARM_ID_setev_go_etask_h_full,&tick);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_ASSERT( tick == 10 );\r
+       rv = CancelAlarm(ALARM_ID_setev_go_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+       /** @treq OSEK_AL_07\r
+        *\r
+        *      Call SetRelAlarm() with invalid alarm ID\r
+        *\r
+        *      Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_07, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_ILL,10,0);\r
+       TEST_ASSERT( rv == E_OS_ID );\r
+\r
+       /** @treq OSEK_AL_08\r
+        *\r
+        * Call SetRelAlarm() for already activated alarm which will activate a task on expiration\r
+        *\r
+        * Service returns E_OS_STATE
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_08, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_act_etask_h_full,10,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = SetRelAlarm(ALARM_ID_act_etask_h_full,10,0);\r
+       TEST_ASSERT( rv == E_OS_STATE);\r
+       rv = CancelAlarm(ALARM_ID_act_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+       /** @treq OSEK_AL_09\r
+        *\r
+        * Call SetRelAlarm() for already activated alarm which will set an\r
+        * event on expiration\r
+        *\r
+        * Service returns E_OS_STATE
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_09, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,0);\r
+       TEST_ASSERT( rv == E_OS_STATE);\r
+       rv = CancelAlarm(ALARM_ID_setev_go_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+\r
+       /** @treq OSEK_AL_10\r
+        *\r
+        * Call SetRelAlarm() with increment value lower than zero\r
+        *\r
+        * Service returns E_OS_VALUE\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_10, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,-1,0);\r
+       TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+       /** @treq OSEK_AL_11\r
+        *\r
+        * Call SetRelAlarm() with increment value greater than maxallowedvalue\r
+        *\r
+        * Service returns E_OS_VALUE\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_11, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,UINT16_MAX+1,0);\r
+       TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+       /** @treq OSEK_AL_12\r
+        *\r
+        * Call SetRelAlarm() with cycle value lower than mincycle\r
+        *\r
+        * Service returns E_OS_VALUE\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_12, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,1);\r
+       TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+\r
+       /** @treq OSEK_AL_13\r
+        *\r
+        * Call SetRelAlarm() with cycle value greater than maxallowedvalue\r
+        *\r
+        * Service returns E_OS_VALUE
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_13, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,10,UINT16_MAX+1);\r
+       TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+       /** @treq OSEK_AL_14\r
+        *\r
+        * Call SetRelAlarm() for alarm which will activate a task on expiration\r
+        *\r
+        * Alarm is activated. Service returns  E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_14, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_AL_14, SEQ_NR_02 );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_AL_14, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_AL_15\r
+        *\r
+        * Call SetRelAlarm() for alarm which will set an event on expiration\r
+        *\r
+        * Alarm is activated. Service returns E_OK
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       /* The task may not be suspended */\r
+       rv = ActivateTask(TASK_ID_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_03 );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_AL_15, SEQ_NR_05 );\r
+\r
+       /** @treq OSEK_AL_16\r
+        *\r
+        * Call SetAbsAlarm() with invalid alarm ID\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_16, SEQ_NR_01 );\r
+       rv = SetAbsAlarm(ALARM_ID_ILL,2,0);\r
+       TEST_ASSERT( rv == E_OS_ID);\r
+\r
+       /** @treq OSEK_AL_17\r
+        *\r
+        * Call SetAbsAlarm() for already activated alarm which will activate a task on expiration\r
+        *\r
+        * Service returns E_OS_STATE
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_17, SEQ_NR_01 );\r
+       rv = SetAbsAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = SetAbsAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OS_STATE);\r
+       rv = CancelAlarm(ALARM_ID_act_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+       /** @treq OSEK_AL_18\r
+        *\r
+        * Call SetAbsAlarm() for already activated alarm which will set an\r
+        * event on expiration\r
+        *\r
+        * Service returns E_OS_STATE\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_18, SEQ_NR_01 );\r
+       rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OS_STATE);\r
+       rv = CancelAlarm(ALARM_ID_setev_go_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+\r
+       /** @treq OSEK_AL_19\r
+        *\r
+        * Call SetAbsAlarm() with increment value lower than zero\r
+        *\r
+        *      Service returns E_OS_VALUE\r
+        */
+       TEST_SET_FIXTURE(OSEK_AL_19, SEQ_NR_01 );\r
+       rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,-1,0);\r
+       TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+       /** @treq OSEK_AL_20\r
+        *\r
+        * Call SetAbsAlarm() with increment value greater than maxallowedvalue\r
+        *\r
+        * Service returns E_OS_VALUE\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_20, SEQ_NR_01 );\r
+       rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,UINT16_MAX+1,0);\r
+       TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+        /** @treq OSEK_AL_21\r
+         *\r
+         * Call SetAbsAlarm() with cycle value lower than mincycle\r
+         *\r
+         * Service returns E_OS_VALUE\r
+         */\r
+       TEST_SET_FIXTURE(OSEK_AL_21, SEQ_NR_01 );\r
+       rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,10,1);\r
+       TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+        /** @treq OSEK_AL_22\r
+         *\r
+         * Call SetAbsAlarm() with cycle value greater than maxallowedvalue\r
+         * Service returns E_OS_VALUE\r
+         */\r
+       TEST_SET_FIXTURE(OSEK_AL_22, SEQ_NR_01 );\r
+       rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,10,UINT16_MAX+1);\r
+       TEST_ASSERT( rv == E_OS_VALUE);\r
+\r
+        /** @treq OSEK_AL_23\r
+         *\r
+         * Call SetAbsAlarm() for alarm which will activate a task on expiration\r
+         *\r
+         * Alarm is activated. Service returns E_OK\r
+         */\r
+       TEST_SET_FIXTURE(OSEK_AL_23, SEQ_NR_01 );\r
+       rv = GetCounterValue(COUNTER_ID_soft1,&tick);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       rv = SetAbsAlarm(ALARM_ID_act_etask_h_full,tick+2,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_AL_23, SEQ_NR_02 );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_AL_23, SEQ_NR_04 );\r
+\r
+\r
+        /** @treq OSEK_AL_24\r
+         *\r
+         * Call SetAbsAlarm() for alarm which will set an event on expiration\r
+         *\r
+         * Alarm is activated. Service returns E_OK\r
+         */\r
+\r
+       TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_01 );\r
+\r
+       rv = GetCounterValue(COUNTER_ID_soft1,&tick);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       rv = SetAbsAlarm(ALARM_ID_setev_go_etask_h_full,tick+2,0);\r
+       TEST_ASSERT( rv == E_OK);\r
+       /* The task may not be suspended */\r
+       rv = ActivateTask(TASK_ID_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK);\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_03 );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK);\r
+       TEST_SET_FIXTURE(OSEK_AL_24, SEQ_NR_05 );\r
+\r
+       /** @treq OSEK_AL_25\r
+        *\r
+        * Call CancelAlarm() with invalid alarm ID\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_25, SEQ_NR_01 );\r
+       rv = CancelAlarm(ALARM_ID_ILL);\r
+       TEST_ASSERT( rv == E_OS_ID );\r
+\r
+        /** @treq OSEK_AL_26\r
+         *\r
+         * Call CancelAlarm() for alarm which is currently not in use\r
+         *\r
+         * Service returns E_OS_NOFUNC\r
+         */\r
+       TEST_SET_FIXTURE(OSEK_AL_26, SEQ_NR_01 );\r
+       rv = CancelAlarm(ALARM_ID_act_etask_h_full);\r
+       TEST_ASSERT( rv == E_OS_NOFUNC );\r
+\r
+       /** @treq OSEK_AL_27\r
+        *\r
+        * Call CancelAlarm() for already activated alarm which will activate a task on expiration\r
+        *\r
+        * Alarm is cancelled. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_27, SEQ_NR_01 );\r
+       /* Already covered by OSEK_AL_05 */\r
+\r
+        /** @treq OSEK_AL_28\r
+         *\r
+         * Call CancelAlarm() for already activated alarm which will set an event on expiration\r
+         *\r
+         * Alarm is cancelled. Service returns E_OK\r
+         */\r
+       TEST_SET_FIXTURE(OSEK_AL_28, SEQ_NR_01 );\r
+       /* Already covered by OSEK_AL_06 */\r
+\r
+       /** @treq OSEK_AL_29\r
+        *\r
+        *  Expiration of alarm which activates a task while no tasks are currently running\r
+        *\r
+        *  Task is activated
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_29, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_sys_tick_act_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_AL_29, SEQ_NR_02 );\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_AL_29, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_AL_30\r
+        *\r
+        * Expiration of alarm which activates a task while running task is non-preemptive\r
+        *\r
+        * Task is activated. No preemption of running task\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_30, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ActivateTask(TASK_ID_etask_l_non);\r
+       TEST_ASSERT( rv == E_OK );\r
+       /* Swap to NON task */\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       /** @treq OSEK_AL_31\r
+        *\r
+        * Expiration of alarm which activates a task with higher priority than running task while running task is preemptive\r
+        *\r
+        * Task is activated. Task with highest priority is executed\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_31, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_act_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_AL_31, SEQ_NR_03 );\r
+\r
+       /** @treq OSEK_AL_32\r
+        *\r
+        * Expiration of alarm which activates a task with lower priority than running task while running task is preemptive\r
+        *\r
+        * Task is activated. No preemption of running task.\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_32, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_act_etask_l_non,2,0);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_AL_32, SEQ_NR_02 );\r
+       /* Swap to alarm task */\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_AL_32, SEQ_NR_04 );\r
+\r
+       /** @treq OSEK_AL_33\r
+        *\r
+        * Expiration of alarm which sets an event while running task is non-preemptive.\r
+        *\r
+        * Task which owns the event is not waiting for this event and not suspended.Event is set\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       /* Activate task that waits for go2 */\r
+       rv = ActivateTask(TASK_ID_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       /* Activate the NON task */\r
+       rv = ActivateTask(TASK_ID_etask_l_non);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       /* Swap to NON task */\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_06 );\r
+\r
+       /* Cleanup by etask_h_full */\r
+       rv = SetEvent( TASK_ID_etask_h_full, EVENT_MASK_go2 );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_AL_33, SEQ_NR_08 );\r
+       /** @treq OSEK_AL_34\r
+        *\r
+        * Expiration of alarm which sets an event while running task is non-preemptive.\r
+        * Task which owns the event is waiting for this event.\r
+        *\r
+        * Event is set. Task which is owner of the event becomes ready.\r
+        * No preemption of running task\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       /* Activate task that waits for go */\r
+       rv = ActivateTask(TASK_ID_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       /* Activate the NON task */\r
+       rv = ActivateTask(TASK_ID_etask_l_non);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       /* Swap to NON task */\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       TEST_SET_FIXTURE(OSEK_AL_34, SEQ_NR_07 );\r
+\r
+       /** @treq OSEK_AL_35\r
+        *\r
+        * Expiration of alarm which sets an event while running task is preemptive.\r
+        * Task which owns the event is not waiting for this event and not suspended.\r
+        *\r
+        * Event is set
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_35, SEQ_NR_01 );\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+\r
+       /* Activate task that waits for go */\r
+       rv = ActivateTask(TASK_ID_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       TEST_SET_FIXTURE(OSEK_AL_35, SEQ_NR_03 );\r
+       /* Set go event */\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       TEST_SET_FIXTURE(OSEK_AL_35, SEQ_NR_04 );\r
+\r
+       rv = GetEvent(TASK_ID_etask_h_full,&eventMask);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_ASSERT( eventMask == EVENT_MASK_go );\r
+\r
+       /* Cleanup */\r
+       rv = SetEvent(TASK_ID_etask_h_full,EVENT_MASK_go2);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       /** @treq OSEK_AL_36\r
+        *\r
+        * Expiration of alarm which sets an event while running task is preemptive.\r
+        * Task which owns the event is waiting for this event.\r
+        *\r
+        * Event is set. Task which is owner of the event becomes ready.\r
+        * Task with highest priority is executed(Rescheduling)\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_01 );\r
+\r
+       rv = SetRelAlarm(ALARM_ID_setev_go_etask_h_full,2,0);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ActivateTask(TASK_ID_etask_h_full);\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_03 );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = IncrementCounter(COUNTER_ID_soft1);\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_AL_36, SEQ_NR_05 );\r
+\r
+       TestExit(0);\r
+}\r
diff --git a/system/kernel/testsystem/osek_06_eh/NewEcu.arxml b/system/kernel/testsystem/osek_06_eh/NewEcu.arxml
new file mode 100644 (file)
index 0000000..c4f909f
--- /dev/null
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+    <AR-PACKAGE>\r
+      <SHORT-NAME>NewEcu</SHORT-NAME>\r
+      <ELEMENTS>\r
+        <ECU-CONFIGURATION UUID="d30db794-36ce-42ce-8658-deb9cfbfc18a">\r
+          <SHORT-NAME>config_osek_ev</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <DOC-REVISIONS>\r
+              <DOC-REVISION/>\r
+            </DOC-REVISIONS>\r
+            <SDGS>\r
+              <SDG GID="Arccore::EcuOptions">\r
+                <SD GID="MCU">Undefined MCU</SD>\r
+                <SD GID="GENDIR">/arc/system/kernel/testsystem/osek_03_ev</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/NewEcu/SwComposition_NewEcu</ECU-SW-COMPOSITION-REF>\r
+          <MODULE-REFS>\r
+            <MODULE-REF DEST="MODULE-CONFIGURATION">/NewEcu/Os</MODULE-REF>\r
+          </MODULE-REFS>\r
+        </ECU-CONFIGURATION>\r
+        <ECU-SW-COMPOSITION UUID="aab85286-8442-4d60-bf6d-a8cdea2f4f7c">\r
+          <SHORT-NAME>SwComposition_NewEcu</SHORT-NAME>\r
+        </ECU-SW-COMPOSITION>\r
+        <MODULE-CONFIGURATION UUID="fb96b9f7-d486-4956-bcf5-03ac6c6e5f78">\r
+          <SHORT-NAME>Os</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <SDGS>\r
+              <SDG/>\r
+              <SDG GID="Arccore::ModuleOptions">\r
+                <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+                <SD GID="ARCCORE_EDITOR_VERSION">2.0.11</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+          <CONTAINERS>\r
+            <CONTAINER UUID="e38c4f96-a8c1-4489-b907-03eb4441b231">\r
+              <SHORT-NAME>OsOS</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+                  <VALUE>1000</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+                  <VALUE>512</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="a7839b8f-1ed1-4f24-b05f-06850836ea32">\r
+                  <SHORT-NAME>OsHooks</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="074c4c94-0aa1-4158-9223-7136a526fac0">\r
+              <SHORT-NAME>Task1</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="c17d3508-e67f-49bd-92fb-8a3a51531b49">\r
+                  <SHORT-NAME>OsTaskAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask/OsTaskAutostart</DEFINITION-REF>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+          </CONTAINERS>\r
+        </MODULE-CONFIGURATION>\r
+      </ELEMENTS>\r
+    </AR-PACKAGE>\r
+  </TOP-LEVEL-PACKAGES></AUTOSAR>\r
diff --git a/system/kernel/testsystem/osek_06_eh/Os_Cfg.c b/system/kernel/testsystem/osek_06_eh/Os_Cfg.c
new file mode 100644 (file)
index 0000000..df63c5a
--- /dev/null
@@ -0,0 +1,206 @@
+/* 
+* Configuration of module Os (Os_Cfg.c)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Mon Sep 20 16:43:27 CEST 2010
+*/
+
+       \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h"                                // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ###############################    DEBUG OUTPUT     #############################\r
+uint32 os_dbg_mask = D_RESOURCE |D_SCHTBL |D_EVENT |D_TASK |D_ALARM;\r
\r
+\r
+\r
+// #################################    COUNTERS     ###############################\r
+GEN_COUNTER_HEAD {\r
+       GEN_COUNTER(    COUNTER_ID_Counter1,\r
+                                       "Counter1",\r
+                                       COUNTER_TYPE_HARD,\r
+                                       COUNTER_UNIT_NANO,\r
+                                       0xffff,\r
+                                       1,\r
+                                       0,\r
+                                       0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ##################################    ALARMS     ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################    RESOURCES     ###############################\r
+GEN_RESOURCE_HEAD {\r
+       GEN_RESOURCE(\r
+               RES_ID_std_1,\r
+               RESOURCE_TYPE_STANDARD,\r
+               0\r
+       ),\r
+};\r
+\r
+// ##############################    STACKS (TASKS)     ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(btask_m_non,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+DECLARE_STACK(etask_m_full_2,2048);\r
+\r
+// ##################################    TASKS     #################################\r
+GEN_TASK_HEAD {\r
+       GEN_ETASK(      OsIdle,\r
+                               0,\r
+                               FULL,\r
+                               TRUE,\r
+                               NULL,\r
+                               0 \r
+       ),\r
+       GEN_BTASK(\r
+               btask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_ll_non,\r
+               3,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_m_full,\r
+               5,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_m_non,\r
+               1,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_ETASK(\r
+               etask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full,\r
+               5,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               RES_MASK_std_1 | 0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full_2,\r
+               5,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+};\r
+\r
+// ##################################    HOOKS     #################################\r
+GEN_HOOKS( \r
+       StartupHook, \r
+       NULL, \r
+       ShutdownHook, \r
+       ErrorHook,\r
+       PreTaskHook, \r
+       PostTaskHook \r
+);\r
+\r
+// ##################################    ISRS     ##################################\r
+\r
+\r
+// ############################    SCHEDULE TABLES     #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
diff --git a/system/kernel/testsystem/osek_06_eh/Os_Cfg.h b/system/kernel/testsystem/osek_06_eh/Os_Cfg.h
new file mode 100644 (file)
index 0000000..7cc68e9
--- /dev/null
@@ -0,0 +1,95 @@
+/* 
+* Configuration of module Os (Os_Cfg.h)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.11
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Mon Sep 20 16:43:27 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2) 
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1    0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go  1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_std_1   0\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_std_1 (1 << 0)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full   1\r
+#define TASK_ID_btask_l_full   2\r
+#define TASK_ID_btask_ll_non   3\r
+#define TASK_ID_btask_m_full   4\r
+#define TASK_ID_btask_m_non    5\r
+#define TASK_ID_etask_h_full   6\r
+#define TASK_ID_etask_l_full   7\r
+#define TASK_ID_etask_m_full   8\r
+#define TASK_ID_etask_m_full_2 9\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void btask_m_non( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+void etask_m_full_2( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE        2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT                   0 \r
+#define OS_TASK_CNT                            10\r
+#define OS_SCHTBL_CNT                  0\r
+#define OS_COUNTER_CNT                 1\r
+#define OS_EVENTS_CNT                  1\r
+#define OS_ISRS_CNT                            0\r
+#define OS_RESOURCE_CNT                        1\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG                           STD_ON\r
+\r
+#define OS_SC1                                                 STD_ON     \r
+#define OS_STACK_MONITORING                    STD_ON\r
+#define OS_STATUS_EXTENDED                     STD_ON\r
+#define OS_USE_GET_SERVICE_ID          STD_ON\r
+#define OS_USE_PARAMETER_ACCESS                STD_ON\r
+#define OS_RES_SCHEDULER                       STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
diff --git a/system/kernel/testsystem/osek_06_eh/build_config.mk b/system/kernel/testsystem/osek_06_eh/build_config.mk
new file mode 100644 (file)
index 0000000..b574ebe
--- /dev/null
@@ -0,0 +1,5 @@
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+\r
diff --git a/system/kernel/testsystem/osek_06_eh/makefile b/system/kernel/testsystem/osek_06_eh/makefile
new file mode 100644 (file)
index 0000000..8fe64c4
--- /dev/null
@@ -0,0 +1,60 @@
+\r
+# included from rules.mk\r
+\r
+# =======================================================================\r
+# APPLICATION\r
+\r
+obj-y += test_02_ip.o\r
+obj-y += test_hooks.o\r
+obj-y += test_framework.o\r
+\r
+obj-y += Os_Cfg.o\r
+\r
+# Not supported yet...\r
+#obj-$(CFG_ARM_CM3) += test_sup_irq.o\r
+\r
+# Grab the board the board files.\r
+include $(ROOTDIR)/boards/board_common.mk\r
+\r
+# What modules do we use\r
+MOD_USE+=KERNEL MCU\r
+\r
+# TODO: Fix this....\r
+\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
+vpath-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)\r
+vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+VPATH += $(vpath-y)\r
+VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
+VPATH += $(realpath ../..)\r
+VPATH += ..\r
+\r
+# libs needed by us \r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+\r
+#linkfile\r
+ldcmdfile-y = linkscript_gcc.ldp\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+\r
+inc-y += ..\r
+inc-y += ../..\r
+inc-y += $(ROOTDIR)/system/kernel/$(objdir)\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)\r
+inc-y += $(ROOTDIR)/drivers/include\r
+inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
+inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
+inc-y += ../config\r
+\r
+# What I want to build\r
+build-exe-y = $(target).elf\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/system/kernel/testsystem/osek_06_eh/test_osek_ev.c b/system/kernel/testsystem/osek_06_eh/test_osek_ev.c
new file mode 100644 (file)
index 0000000..be97d6e
--- /dev/null
@@ -0,0 +1,300 @@
+/*\r
+ *  Created on: 4 aug 2010\r
+ *      Author: mahi\r
+ */\r
+/*\r
+ * This file tests test requirements OSEK_EV_XX.\r
+ * We need only 2 tasks, 1 non-preemtive\r
+ *\r
+ *\r
+ * Priorities:\r
+ * ll - low low prio (used for scheduling only)\r
+ * l  - low prio\r
+ * m  - medium\r
+ * h  - high prio\r
+ */\r
+\r
+\r
+#include "os.h"\r
+#include "test_framework.h"\r
+#include "arc.h"\r
+#include "irq.h"\r
+\r
+\r
+\r
+enum OsekFixtureNr {\r
+       OSEK_EV_01 = 1,\r
+       OSEK_EV_02,\r
+       OSEK_EV_03,\r
+       OSEK_EV_04,\r
+       OSEK_EV_05,\r
+       OSEK_EV_06,\r
+       OSEK_EV_07,\r
+       OSEK_EV_08,\r
+       OSEK_EV_09,\r
+       OSEK_EV_10,\r
+       OSEK_EV_11,\r
+       OSEK_EV_12,\r
+       OSEK_EV_13,\r
+       OSEK_EV_14,\r
+       OSEK_EV_15,\r
+       OSEK_EV_16,\r
+       OSEK_EV_17,\r
+       OSEK_EV_18,\r
+       OSEK_EV_19,\r
+       OSEK_EV_20,\r
+       OSEK_EV_21,\r
+       OSEK_EV_22,\r
+       OSEK_EV_23,\r
+       OSEK_EV_24,\r
+};\r
+\r
+TestWorldType TestWorld = {0};\r
+\r
+uint32_t testNrNon = 0;\r
+\r
+static uint8_t activations = 0;\r
+\r
+static void isrSoftInt1( void ) {\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_07:\r
+               TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_03 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+               break;\r
+       }\r
+}\r
+\r
+static void isrSoftInt0( void ) {\r
+       StatusType rv;\r
+       TaskType taskId;\r
+\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_07:\r
+               TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_02 );\r
+               Irq_GenerateSoftInt( IRQ_SOFTINT_1 );\r
+               break;\r
+       case OSEK_TM_09:\r
+               TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+\r
+\r
+\r
+void OsIdle(void) {\r
+       while(1);\r
+}\r
+\r
+\r
+void btask_l_non ( void ) {\r
+       StatusType rv;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_TM_09:\r
+               TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_02 );\r
+               /* Make higher prio task ready */\r
+               rv = SetEvent( TASK_ID_etask_m_full,EVENT_MASK_go);\r
+               TEST_ASSERT( rv == E_OK ) ;\r
+               TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_03 );\r
+               Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+               TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_05 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+}\r
+\r
+void etask_m_non ( void ) {\r
+       StatusType rv;\r
+       TaskStateType taskState;\r
+       switch ( TestWorld.fixtureNr ) {\r
+       case OSEK_EV_04:\r
+               TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_03 );\r
+               /* Verify that task is in waiting */\r
+               rv = GetTaskState(etask_m_full,&taskState);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( taskState == TASK_STATE_WAITING);\r
+               /* Set the Event */\r
+               rv = SetEvent( etask_m_full, EVENT_MASK_go );\r
+               TEST_ASSERT( rv == E_OK );\r
+               /* Verify state, again */\r
+               rv = GetTaskState(etask_m_full,&taskState);\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_ASSERT( taskState == TASK_STATE_READY);\r
+               TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_04 );\r
+               break;\r
+       case OSEK_EV_04:\r
+               TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_03 );\r
+               rv = SetEvent( etask_m_full, EVENT_MASK_go2 );\r
+               TEST_ASSERT( rv == E_OK );\r
+               TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_04 );\r
+               break;\r
+       default:\r
+               TEST_ASSERT( 0 );\r
+       }\r
+\r
+       rv = TerminateTask();\r
+       TEST_ASSERT( rv == E_OK );\r
+}\r
+\r
+/**\r
+ * The master in the tests
+ */\r
+void etask_m_full( void ) {\r
+\r
+       StatusType rv;\r
+       TaskType taskId;\r
+       TaskType isrTask;\r
+       TaskStateType taskState;\r
+\r
+       /** @treq OSEK_EV_01\r
+        *\r
+        * Call SetEvent() with invalid Task ID\r
+        *\r
+        * Service returns E_OS_ID\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_EV_01, SEQ_NR_01 );\r
+       rv = SetEvent(TASK_ID_ILL);\r
+       TEST_ASSERT( rv == E_OS_ID );\r
+\r
+       /** @treq OSEK_EV_02\r
+        *\r
+        * Call SetEvent() for basic task\r
+        *\r
+        * Service returns E_OS_ACCESS\r
+        */\r
+\r
+       TEST_SET_FIXTURE(OSEK_EV_02, SEQ_NR_01 );\r
+       rv = SetEvent( TASK_ID_btask_l_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OS_ACCESS );\r
+\r
+\r
+       // --------------------------------------------------------------------\r
+\r
+       /** @treq OSEK_EV_03\r
+        *\r
+        * Call SetEvent() for suspended extended task\r
+        *\r
+        * Service returns E_OS_STATE\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_03, SEQ_NR_01 );\r
+       rv = SetEvent( TASK_ID_etask_l_full, EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OS_STATE );\r
+\r
+       /** @treq OSEK_EV_04\r
+        *\r
+        * Call SetEvent() from non-preemptive task on waiting extended\r
+     * task which is waiting for at least one of the requested events\r
+        *\r
+        * Requested events are set. Running task is not preempted.\r
+        * Waiting task becomes ready  Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_m_non );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_02 );\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_04, SEQ_NR_05 );\r
+\r
+       /** @treq OSEK_EV_05\r
+        *\r
+        * Call SetEvent() from non-preemptive task on waiting extended\r
+        * task which is not waiting for any of the requested events\r
+        *\r
+        * Requested events are set. Running task is not preempted.\r
+        * Waiting task doesn\92t become ready. Service returns E_OK\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_05, SEQ_NR_01 );\r
+       rv = ActivateTask( TASK_ID_etask_m_non );\r
+       TEST_ASSERT( rv == E_OK );\r
+\r
+       /** @treq OSEK_EV_06\r
+        *\r
+        * Interruption of running task\r
+        *\r
+        * Interrupt is executed\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_06, SEQ_NR_01 );\r
+       /* Already tested in a number of cases in tm suite */\r
+\r
+       /** @treq OSEK_EV_07\r
+        *\r
+        * Interruption of ISR2\r
+        *\r
+        * Interrupt is executed\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_01 );\r
+       /* Create an ISR2 */\r
+       isrTask = Os_Arc_CreateIsr( isrSoftInt0, 8/*prio*/,"soft_0");\r
+       Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_0);\r
+\r
+       /* Create an ISR2 */\r
+       isrTask = Os_Arc_CreateIsr( isrSoftInt0, 9/*prio*/,"soft_1");\r
+       Irq_AttachIsr2(isrTask,NULL, IRQ_SOFTINT_1);\r
+\r
+       Irq_GenerateSoftInt( IRQ_SOFTINT_0 );\r
+       TEST_SET_FIXTURE(OSEK_EV_07, SEQ_NR_04 );\r
+\r
+\r
+       /** @treq OSEK_EV_08\r
+        *\r
+        * Interruption of ISR3\r
+        *\r
+        * Interrupt is executed\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_08, SEQ_NR_01 );\r
+       /* ISR3 is not applicable */\r
+\r
+       /** @treq OSEK_EV_09\r
+        *\r
+        * Return from ISR2. Interrupted task is non-preemptive\r
+        *\r
+        * Execution of interrupted task is continued\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_01 );\r
+       rv = ActivateTask(TASK_ID_btask_l_non );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = WaitEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       rv = ClearEvent( EVENT_MASK_go );\r
+       TEST_ASSERT( rv == E_OK );\r
+       TEST_SET_FIXTURE(OSEK_EV_09, SEQ_NR_06 );\r
+\r
+       /** @treq OSEK_EV_10\r
+        *\r
+        * Return from ISR3. Interrupted task is non-preemptive\r
+     *\r
+        * Execution of interrupted task is continued\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_10, SEQ_NR_01 );\r
+       /* ISR3 is not applicable */\r
+\r
+       /** @treq OSEK_EV_11\r
+        *\r
+        * Return from ISR2. Interrupted task is preemptive\r
+     *\r
+        * Ready task with highest priority is executed (Rescheduling)\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_11, SEQ_NR_01 );\r
+\r
+\r
+\r
+       /** @treq OSEK_EV_12\r
+        *\r
+        * Return from ISR3. Interrupted task is preemptive\r
+     *\r
+        * Ready task with highest priority is executed (Rescheduling)\r
+        */\r
+       TEST_SET_FIXTURE(OSEK_EV_12, SEQ_NR_01 );\r
+       /* ISR3 is not applicable */\r
+\r
+\r
+       TestExit(0);\r
+}\r
diff --git a/system/kernel/testsystem/suite_tm_01/Os_Cfg.c b/system/kernel/testsystem/suite_tm_01/Os_Cfg.c
new file mode 100644 (file)
index 0000000..30d3115
--- /dev/null
@@ -0,0 +1,206 @@
+/* 
+* Configuration of module Os (Os_Cfg.c)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.10
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Sun Oct 10 21:13:01 CEST 2010
+*/
+
+       \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h"                                // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+extern void dec_exception( void );\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ###############################    DEBUG OUTPUT     #############################\r
+uint32 os_dbg_mask = 0;\r
\r
+\r
+\r
+// #################################    COUNTERS     ###############################\r
+GEN_COUNTER_HEAD {\r
+       GEN_COUNTER(    COUNTER_ID_Counter1,\r
+                                       "Counter1",\r
+                                       COUNTER_TYPE_HARD,\r
+                                       COUNTER_UNIT_NANO,\r
+                                       0xffff,\r
+                                       1,\r
+                                       0,\r
+                                       0),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ##################################    ALARMS     ################################\r
+\r
+GEN_ALARM_HEAD {\r
+};\r
+\r
+// ################################    RESOURCES     ###############################\r
+GEN_RESOURCE_HEAD {\r
+       GEN_RESOURCE(\r
+               RES_ID_std_1,\r
+               RESOURCE_TYPE_STANDARD,\r
+               0\r
+       ),\r
+};\r
+\r
+// ##############################    STACKS (TASKS)     ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(btask_h_full,2048);\r
+DECLARE_STACK(btask_l_full,2048);\r
+DECLARE_STACK(btask_ll_non,2048);\r
+DECLARE_STACK(btask_m_full,2048);\r
+DECLARE_STACK(btask_m_non,2048);\r
+DECLARE_STACK(etask_h_full,2048);\r
+DECLARE_STACK(etask_l_full,2048);\r
+DECLARE_STACK(etask_m_full,2048);\r
+DECLARE_STACK(etask_m_full_2,2048);\r
+\r
+// ##################################    TASKS     #################################\r
+GEN_TASK_HEAD {\r
+       GEN_ETASK(      OsIdle,\r
+                               0,\r
+                               FULL,\r
+                               TRUE,\r
+                               NULL,\r
+                               0 \r
+       ),\r
+       GEN_BTASK(\r
+               btask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_ll_non,\r
+               3,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_m_full,\r
+               5,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_BTASK(\r
+               btask_m_non,\r
+               1,\r
+               NON,\r
+               FALSE,\r
+               NULL,\r
+               0,\r
+               2\r
+       ),\r
+                               \r
+       GEN_ETASK(\r
+               etask_h_full,\r
+               6,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_l_full,\r
+               4,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full,\r
+               5,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               RES_MASK_std_1 | 0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_m_full_2,\r
+               5,\r
+               FULL,\r
+               FALSE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+};\r
+\r
+// ##################################    HOOKS     #################################\r
+GEN_HOOKS( \r
+       StartupHook, \r
+       NULL, \r
+       ShutdownHook, \r
+       ErrorHook,\r
+       PreTaskHook, \r
+       PostTaskHook \r
+);\r
+\r
+// ##################################    ISRS     ##################################\r
+\r
+\r
+// ############################    SCHEDULE TABLES     #############################\r
+\r
+// Table heads\r
+GEN_SCHTBL_HEAD {\r
+};\r
+\r
+GEN_PCB_LIST()\r
+\r
+uint8_t os_interrupt_stack[OS_INTERRUPT_STACK_SIZE] __attribute__ ((aligned (0x10)));\r
+\r
+GEN_IRQ_VECTOR_TABLE_HEAD {};\r
+GEN_IRQ_ISR_TYPE_TABLE_HEAD {};\r
+GEN_IRQ_PRIORITY_TABLE_HEAD {};\r
+\r
+#include "os_config_funcs.h"\r
diff --git a/system/kernel/testsystem/suite_tm_01/Os_Cfg.h b/system/kernel/testsystem/suite_tm_01/Os_Cfg.h
new file mode 100644 (file)
index 0000000..e22a59a
--- /dev/null
@@ -0,0 +1,95 @@
+/* 
+* Configuration of module Os (Os_Cfg.h)
+* 
+* Created by: 
+* Configured for (MCU): Undefined MCU
+* 
+* Module vendor:  ArcCore
+* Module version: 2.0.10
+* 
+* 
+* Generated by Arctic Studio (http://arccore.com)
+*           on Sun Oct 10 21:13:01 CEST 2010
+*/
+
+
+#if (OS_SW_MAJOR_VERSION != 2) 
+#error "Os: Configuration file version differs from BSW version."
+#endif
+
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+\r
+// Alarm Id's\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1    0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_go  1\r
+\r
+// Isr Id's\r
+\r
+// Resource Id's\r
+#define RES_ID_std_1   0\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_std_1 (1 << 0)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_btask_h_full   1\r
+#define TASK_ID_btask_l_full   2\r
+#define TASK_ID_btask_ll_non   3\r
+#define TASK_ID_btask_m_full   4\r
+#define TASK_ID_btask_m_non    5\r
+#define TASK_ID_etask_h_full   6\r
+#define TASK_ID_etask_l_full   7\r
+#define TASK_ID_etask_m_full   8\r
+#define TASK_ID_etask_m_full_2 9\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void btask_h_full( void );\r
+void btask_l_full( void );\r
+void btask_ll_non( void );\r
+void btask_m_full( void );\r
+void btask_m_non( void );\r
+void etask_h_full( void );\r
+void etask_l_full( void );\r
+void etask_m_full( void );\r
+void etask_m_full_2( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE        2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT                   0 \r
+#define OS_TASK_CNT                            10\r
+#define OS_SCHTBL_CNT                  0\r
+#define OS_COUNTER_CNT                 1\r
+#define OS_EVENTS_CNT                  1\r
+#define OS_ISRS_CNT                            0\r
+#define OS_RESOURCE_CNT                        1\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+\r
+#define CFG_OS_DEBUG                           STD_OFF\r
+\r
+#define OS_SC1                                                 STD_ON     \r
+#define OS_STACK_MONITORING                    STD_ON\r
+#define OS_STATUS_EXTENDED                     STD_ON\r
+#define OS_USE_GET_SERVICE_ID          STD_ON\r
+#define OS_USE_PARAMETER_ACCESS                STD_ON\r
+#define OS_RES_SCHEDULER                       STD_ON\r
+\r
+#endif /*OS_CFG_H_*/\r
diff --git a/system/kernel/testsystem/suite_tm_01/test_tm_02.c b/system/kernel/testsystem/suite_tm_01/test_tm_02.c
new file mode 100644 (file)
index 0000000..5b9850b
--- /dev/null
@@ -0,0 +1,12 @@
+enum OsekFixtureNr {\r
+       OSEK_TM_02,\r
+       OSEK_TM_06,\r
+       OSEK_TM_11,\r
+       OSEK_TM_17,\r
+       OSEK_TM_32,\r
+\r
+};\r
+\r
+void etask_m_full( void ) {\r
+\r
+}\r
index d1c7c965b9f5147cda788e1a52352edf5741a2a5..c94bf85bb005a6a1d2054bba81c9c1e6fb5d30de 100644 (file)
@@ -78,16 +78,18 @@ struct testStats {
 };\r
 \r
 struct test {\r
-       uint8_t testSuite;\r
-       uint8_t testNr;\r
+       uint16_t testSuite;\r
+       uint16_t testNr;\r
        uint16_t status;\r
-       const char *description;\r
-       uint32_t expectedErrMask;\r
+       uint16_t pad;\r
+//     const char *description;\r
+//     uint32_t expectedErrMask;\r
 };\r
 \r
-struct test testTable[50] = { {0} };\r
 \r
 \r
+struct test testTable[50] __attribute__ ((aligned(8))) = { {0} };\r
+\r
 void TestInit( void ) {\r
 \r
 }\r
@@ -100,6 +102,56 @@ void TestDone( void ) {
 \r
 }\r
 \r
+void TestSetFixture( uint32_t nextTestFixture, uint32_t nextTestNr,\r
+               char *file,  int line, const char *function ) {\r
+       _Bool error = 0;\r
+\r
+       testTable[nextTestFixture].testSuite = nextTestFixture;\r
+       testTable[nextTestFixture].testNr = nextTestNr;\r
+       testTable[nextTestFixture].status |= TEST_FLG_RUNNING;\r
+       testTable[nextTestFixture].pad = 0x0;\r
+\r
+       /* For a new sequence should start with TEST_SET_FIXTURE( OSEK_TM_04, SEQ_NR_01 ) */\r
+       if( nextTestNr == 1) {\r
+               if( (nextTestFixture) != (TestWorld.fixtureNr +1) ) {\r
+                       printf("## Expected fixture=%u, found=%u\n",\r
+                                       (unsigned)nextTestFixture,\r
+                                       (unsigned)TestWorld.fixtureNr +1);\r
+                       error = 1;\r
+               }\r
+\r
+       } else {\r
+               if( (nextTestFixture) != (TestWorld.fixtureNr ) ) {\r
+                       printf("## Expected same fixture=%u, found=%u\n",\r
+                                       (unsigned)nextTestFixture,\r
+                                       (unsigned)TestWorld.fixtureNr);\r
+                       error = 1;\r
+               }\r
+               if( nextTestNr  != ( TestWorld.testNr + 1 ) ) {\r
+                       printf("## Sequence is wrong. Found %u, expected %u in fixture %u\n",\r
+                                       (unsigned)nextTestNr,\r
+                                       (unsigned)TestWorld.testNr + 1,\r
+                                       (unsigned)nextTestFixture);\r
+                       error = 1;\r
+               }\r
+       }\r
+\r
+       if( error == 1 ) {\r
+               printf("## Info: %s %d %s \n",file,line,function);\r
+               testTable[nextTestFixture].status |= TEST_FLG_SEQ_ERROR;\r
+       }\r
+#if 0\r
+       if( (nextTestNr) != (TestWorld.testNr +1) ) {\r
+               printf("%s %d %s FAILURE, seq failed\n",file,line,function);\r
+       }\r
+#endif\r
+\r
+       printf("Testing fixture %u and sub seq:%u\n",(unsigned)nextTestFixture, (unsigned)nextTestNr);\r
+       TestWorld.testNr  = nextTestNr;\r
+    TestWorld.fixtureNr = nextTestFixture;\r
+}\r
+\r
+\r
 /**\r
  *\r
  * @param text\r
@@ -109,9 +161,9 @@ void TestDone( void ) {
  */\r
 void TestFail( const char *text,char *file,  int line, const char *function ) {\r
        printf("%02d %02d FAILED, %s , %d, %s\n",test_suite, test_nr, file, line, function);\r
-       testTable[testCnt].testSuite = test_suite;\r
-       testTable[testCnt].testNr = test_nr;\r
-       testTable[testCnt].status |= TEST_FLG_ASSERT;\r
+       testTable[TestWorld.fixtureNr].testSuite = 0x0;\r
+       testTable[TestWorld.fixtureNr].testNr = TestWorld.testNr;\r
+       testTable[TestWorld.fixtureNr].status |= TEST_FLG_ASSERT;\r
 //     testCnt++;\r
 //     _test_failed++;\r
 }\r
@@ -136,7 +188,7 @@ void testValidateHook( void ) {
 void TestStart( const char *str, int testNr ) {\r
        testTable[testCnt].status = TEST_FLG_RUNNING;\r
        testTable[testCnt].testNr = testNr;\r
-       testTable[testCnt].description = str;\r
+//     testTable[testCnt].description = str;\r
        printf("%3d %3d %s\n",testCnt,testNr,str);\r
 }\r
 \r
@@ -159,7 +211,7 @@ void TestEnd( void ) {
 \r
                } else {\r
                        /* All is OK */\r
-                       testTable[testCnt].status &= TEST_FLG_RUNNING;\r
+                       // testTable[testCnt].status &= TEST_FLG_RUNNING;\r
                        testTable[testCnt].status |= TEST_FLG_OK;\r
                        printf("OK\n");\r
                }\r
@@ -169,25 +221,30 @@ void TestEnd( void ) {
        testCnt++;\r
 }\r
 \r
+/**\r
+ * Exit from the test system, no try to be graceful here.
+ * @param rv
+ */\r
 void TestExit( int rv ) {\r
+       printf("---- Done ----\n");\r
        Irq_Disable();\r
        exit(rv);\r
 }\r
 \r
 void TestTouch( void ) {\r
-       testTable[testCnt].status |= TEST_FLG_TOUCHED;\r
+       testTable[TestWorld.fixtureNr].status |= TEST_FLG_TOUCHED;\r
 }\r
 \r
 void TestNotImplemented( void ) {\r
-       testTable[testCnt].status |= TEST_FLG_NOT_IMPLEMENTED;\r
+       testTable[TestWorld.fixtureNr].status |= TEST_FLG_NOT_IMPLEMENTED;\r
 }\r
 \r
 \r
 void TestOk( void ) {\r
        printf("%02d %02d OK\n",test_suite, test_nr);\r
-       testTable[testCnt].testSuite = test_suite;\r
-       testTable[testCnt].testNr = test_nr;\r
-       testTable[testCnt].status = 1;\r
+       testTable[TestWorld.fixtureNr].testSuite = TestWorld.fixtureNr;\r
+       testTable[TestWorld.fixtureNr].testNr = TestWorld.testNr;\r
+       testTable[TestWorld.fixtureNr].status = 1;\r
        testCnt++;\r
        _test_ok++;\r
 }\r
index 9b6cef8e3ea16e42599d849488ddce921cfdf27a..81ac50e849c9629a0d6ec953518b23d684274dc6 100644 (file)
 #include <stdio.h>\r
 \r
 /* Test flags */\r
-#define TEST_FLG_RUNNING                       1\r
-#define TEST_FLG_ASSERT                        (1<<1)\r
+#define TEST_FLG_OK                            1\r
+#define TEST_FLG_ASSERT                        (1<<7)\r
 #define TEST_FLG_DONE                          (1<<2)\r
-#define TEST_FLG_OK                            (1<<3)\r
+#define TEST_FLG_RUNNING                       (1<<3)\r
 #define TEST_FLG_NOT_IMPLEMENTED       (1<<4)\r
 #define TEST_FLG_TOUCHED                       (1<<5)\r
+#define TEST_FLG_SEQ_ERROR                     (1<<6)\r
 \r
 #define TEST_VALUE_NC                  (-1)\r
 \r
@@ -66,6 +67,14 @@ typedef struct TestFixture {
        int nr;\r
 } TestFixtureType;\r
 \r
+typedef struct TestWorld {\r
+       uint16_t fixtureNr;\r
+       uint16_t testNr;\r
+       TestFixtureType fixtures[];\r
+} TestWorldType;\r
+\r
+extern TestWorldType TestWorld;\r
+\r
 void TestDone( void );\r
 \r
 void TestFail( const char *text,char *file,  int line, const char *function );\r
@@ -76,6 +85,72 @@ void TestStart( const char *str, int testNr );
 void TestInc( void );\r
 void TestEnd( void );\r
 void TestExit( int rv );\r
+void TestSetFixture( uint32_t nextTestFixture, uint32_t nextTestNr,\r
+               char *file,  int line, const char *function );\r
+#define TEST_SET_FIXTURE( _nextTestFixture, _nextTestNr ) TestSetFixture( _nextTestFixture, _nextTestNr, __FILE__, __LINE__, __FUNCTION__ )\r
+\r
+#if 0\r
+// void TestSetFixture( uint32_t testFixture, uint32_t testNr );\r
+#define TestSetFixture( _nextTestFixture, _nextTestNr )    \\r
+       if( (_nextTestNr) != (TestWorld.testNr +1) ) {            \\r
+               printf("%s %d FAILURE, seq failed\n",__FILE__,__LINE__); \\r
+       }  \\r
+       TestWorld.testNr  = _nextTestNr;          \\r
+    TestWorld.fixtureNr = _nextTestFixture;\r
+#endif\r
+\r
+enum TestSeq {\r
+       TEST_NR_01 = 1,\r
+       TEST_NR_02,\r
+       TEST_NR_03,\r
+       TEST_NR_04,\r
+       TEST_NR_05,\r
+       TEST_NR_06,\r
+       TEST_NR_07,\r
+       TEST_NR_08,\r
+       TEST_NR_09,\r
+       TEST_NR_10,\r
+       TEST_NR_11,\r
+       TEST_NR_12,\r
+       TEST_NR_13,\r
+       TEST_NR_14,\r
+       TEST_NR_15,\r
+       TEST_NR_16,\r
+       TEST_NR_17,\r
+       TEST_NR_18,\r
+       TEST_NR_19,\r
+       TEST_NR_20,\r
+       TEST_NR_21,\r
+       TEST_NR_22,\r
+       TEST_NR_23,\r
+       TEST_NR_24,\r
+       TEST_NR_25,\r
+       TEST_NR_26,\r
+       TEST_NR_27,\r
+       TEST_NR_28,\r
+       TEST_NR_29,\r
+       TEST_NR_30,\r
+       TEST_NR_31,\r
+       TEST_NR_32,\r
+       TEST_NR_33,\r
+       TEST_NR_34,\r
+       TEST_NR_35,\r
+       TEST_NR_36,\r
+       TEST_NR_37,\r
+       TEST_NR_38,\r
+       TEST_NR_39,\r
+};\r
+\r
+enum SubTest {\r
+       SEQ_NR_01 = 1,\r
+       SEQ_NR_02,\r
+       SEQ_NR_03,\r
+       SEQ_NR_04,\r
+       SEQ_NR_05,\r
+       SEQ_NR_06,\r
+       SEQ_NR_07,\r
+       SEQ_NR_08,\r
+};\r
 \r
 \r
 typedef void (*test_func_t)( void );\r
@@ -140,9 +215,9 @@ void btask_sup_h( void ) SECTION_SUP;
 \r
 \r
 // Tests\r
-DECLARE_TASKS(01);\r
-DECLARE_TASKS(02);\r
-DECLARE_TASKS(03);\r
-DECLARE_TASKS(04);\r
+DECLARE_TASKS(01)\r
+DECLARE_TASKS(02)\r
+DECLARE_TASKS(03)\r
+DECLARE_TASKS(04)\r
 \r
 #endif /* TEST_FRAMEWORK_H_ */\r
index c42240457d458bd03f45322821e7354de8cd63e7..5ca6d6ebbdbe412645cdc4ac8e1bdc9505d927ec 100644 (file)
 \r
 #include <stdint.h>\r
 #include "Os.h"\r
-#include "debug.h"\r
+#include <assert.h>\r
+\r
+\r
 #include "test_framework.h"\r
+#if defined( USE_MCU )\r
+#include "Mcu.h"\r
+#endif\r
+#include "arc.h"\r
+\r
+//#define USE_LDEBUG_PRINTF    1\r
+#include "debug.h"\r
 \r
 #define ERROR_LOG_SIZE 1\r
 \r
@@ -154,7 +163,7 @@ void ErrorHook( StatusType error ) {
        }\r
 #endif\r
 \r
-       LDEBUG_PRINTF("## ErrorHook err=%u\n",Error);\r
+//     LDEBUG_PRINTF("## ErrorHook err=%u\n",error);\r
 \r
        /* Log the errors in a buffer for later review */\r
        errEntry = &ErrorLog.log[ErrorLog.index];\r
@@ -179,15 +188,30 @@ void ErrorHook( StatusType Error ) {
 #endif\r
 \r
 void PreTaskHook( void ) {\r
+       StatusType rv;\r
        TaskType task;\r
-       GetTaskID(&task);\r
+       TaskStateType state;\r
+\r
+       rv = GetTaskID(&task);\r
+       assert( rv == E_OK );\r
        LDEBUG_PRINTF("## PreTaskHook, taskid=%d\n",task);\r
+       rv = GetTaskState(task,&state);\r
+       assert( rv == E_OK );\r
+       assert( state == TASK_STATE_RUNNING );\r
 }\r
 \r
 void PostTaskHook( void ) {\r
+       StatusType rv;\r
        TaskType task;\r
-       GetTaskID(&task);\r
+       TaskStateType state;\r
+\r
+       rv = GetTaskID(&task);\r
+       assert( rv == E_OK );\r
        LDEBUG_PRINTF("## PostTaskHook, taskid=%d\n",task);\r
+       rv = GetTaskState(task,&state);\r
+       assert( rv == E_OK );\r
+       assert( state == TASK_STATE_RUNNING );\r
+\r
 #if 0\r
        {\r
                StackInfoType si;\r
diff --git a/system/kernel/testsystem/testsystem.txt b/system/kernel/testsystem/testsystem.txt
new file mode 100644 (file)
index 0000000..4468dd9
--- /dev/null
@@ -0,0 +1,20 @@
+\r
+\r
+Info:\r
+ - The OSEK OS test do follow the MODISTARC test plan, but not the test procedure.\r
+ - The MIDSTARC test-suites are from 1999? while latest OSEK OS spec is from 2005?, so\r
+   not all tests are applicable to the latest specification. \r
+ - Do not care about OSEK conformance classes, uses only top class ECC2\r
+ - Tests for Autosar SC1, only   \r
+\r
+Known to missing from tests:\r
+ - Multiple alarms to one counter.\r
+ - OSEK requirements that are "fixed" by Autosar, e.g. OS239,OS070,OS069,OS032,? \r
+ - Testing of "Use Parameter Access", etc.\r
+ - Internal resoures (grouping of tasks)\r
+ - SetEvent on suspended task from Alarm\r
+  \r
+Need conversion:\r
+ - Scheduletables..\r
+ - Autostart testing..\r
\ No newline at end of file