]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Updated testsystem. Added test suites. Added Autostart tests. Autotester with T32.
authormahi <devnull@localhost>
Tue, 8 Jun 2010 20:18:03 +0000 (22:18 +0200)
committermahi <devnull@localhost>
Tue, 8 Jun 2010 20:18:03 +0000 (22:18 +0200)
28 files changed:
include/Os.h
include/os_config_funcs.h
system/kernel/alarm.c
system/kernel/counter.c
system/kernel/event.c
system/kernel/sched_table.c
system/kernel/testsystem/build_config.mk
system/kernel/testsystem/config/Os_Cfg.c
system/kernel/testsystem/config/Os_Cfg.h
system/kernel/testsystem/os_test.h
system/kernel/testsystem/suite_01/Os_Cfg.c
system/kernel/testsystem/suite_01/Os_Cfg.h
system/kernel/testsystem/suite_01/build_config.mk [new file with mode: 0644]
system/kernel/testsystem/suite_01/config_01.arxml
system/kernel/testsystem/suite_01/makefile
system/kernel/testsystem/suite_01/test_master.c [new file with mode: 0644]
system/kernel/testsystem/suite_02/Os_Cfg.c
system/kernel/testsystem/suite_02/Os_Cfg.h
system/kernel/testsystem/suite_02/build_config.mk [new file with mode: 0644]
system/kernel/testsystem/suite_02/config_02.arxml
system/kernel/testsystem/suite_02/makefile
system/kernel/testsystem/suite_02/test_master.c [new file with mode: 0644]
system/kernel/testsystem/test_03_alarm.c
system/kernel/testsystem/test_framework.c
system/kernel/testsystem/test_framework.h
tools/t32/load.cmm
tools/t32/term.cmm
tools/t32/test.cmm [new file with mode: 0644]

index c8c3568eb9a5ccd3ac8bde8b0a5ac4dfbd84cb4a..b714805e4e94b36275f30c29fd1933f445e06ff8 100644 (file)
@@ -347,21 +347,21 @@ typedef enum {
     OSServiceId_GetTaskState,\r
 } OsServiceIdType;;\r
 \r
-typedef struct os_error_s {\r
+typedef struct OsError {\r
        OsServiceIdType serviceId;\r
        uint32_t param1;\r
        uint32_t param2;\r
        uint32_t param3;\r
-} os_error_t;\r
+} OsErrorType;\r
 \r
-extern os_error_t os_error;\r
+extern OsErrorType os_error;\r
 \r
 // TODO: Add the service id to all OS service methods.\r
 static inline OsServiceIdType OSErrorGetServiceId(void)  {\r
        return os_error.serviceId;\r
 }\r
 \r
-extern os_error_t os_error;\r
+extern OsErrorType os_error;\r
 \r
 #define OSError_ActivateTask_TaskID ((TaskType) os_error.param1)\r
 #define OSError_ChainTask_TaskID ((TaskType) os_error.param1)\r
index 9cdd14455dd0bcdb64485c513b6e404bf1b8efe8..3e7daa20ad93e37f5bf81b4ff6c68af1df40b071 100644 (file)
@@ -49,7 +49,7 @@ void Os_CfgValidate(void ) {
 #endif
 }
 \r
-os_error_t os_error;\r
+OsErrorType os_error;\r
 \r
 //-------------------------------------------------------------------\r
 \r
index 12b62329021f5635a7e79212fff44c7aab90583c..ce53f725b2e04d8e9f983a6ceaa07e4c1bffdc6b 100644 (file)
@@ -147,6 +147,37 @@ StatusType SetRelAlarm(AlarmType AlarmId, TickType Increment, TickType Cycle){
 \r
        OS_STD_END_3(OSServiceId_SetRelAlarm,AlarmId, Increment, Cycle);\r
 }\r
+
+/**
+ * The  system  service  occupies  the  alarm  <AlarmID>  element.
+ * When <start> ticks are reached, the task assigned to the alarm
+ *
+ * If the absolute value <start> is very close to the current counter
+ * value, the alarm may expire, and the task may become ready or
+ * the  alarm-callback  may  be  called  before  the  system  service
+ * returns to the user.
+ * If  the  absolute  value  <start>  already  was  reached  before  the
+ * system call, the alarm shall only expire when the absolute value
+ * <start>  is  reached  again,  i.e.  after  the  next  overrun  of  the
+ * counter.
+ *
+ * If <cycle> is unequal zero, the alarm element is logged on again
+ * immediately after expiry with the relative value <cycle>.
+ *
+ * The alarm <AlarmID> shall not already be in use.
+ * To  change  values  of  alarms  already  in  use  the  alarm  shall  be
+ * cancelled first.
+ *
+ * If  the  alarm  is  already  in  use,  this  call  will  be  ignored  and  the
+ * error E_OS_STATE is returned.
+ *
+ * Allowed on task level and in ISR, but not in hook routines.
+ *
+ * @param AlarmId
+ * @param Start
+ * @param Cycle
+ * @return
+ */
 \r
 StatusType SetAbsAlarm(AlarmType AlarmId, TickType Start, TickType Cycle) {\r
 \r
@@ -176,7 +207,8 @@ StatusType SetAbsAlarm(AlarmType AlarmId, TickType Start, TickType Cycle) {
 \r
        Irq_Save(flags);\r
        if( aPtr->active == 1 ) {\r
-               rv = E_OS_STATE;\r
+               rv = E_OS_STATE;
+               Irq_Restore(flags);\r
                goto err;\r
        }\r
 \r
index f44c7ed7fcff36b911e15a9eba162e837538bf34..d4abacb5913812dc64e31dfd171baddd4d97469c 100644 (file)
@@ -202,30 +202,23 @@ TickType GetOsTick( void ) {
  * Initialize alarms and schedule-tables for the counters
  */
 void Os_CounterInit( void ) {
-       OsCounterType *counter;
-       OsAlarmType *alarm_obj;
-       OsSchTblType *sched_obj;
-       /* Create a list from the counter to the alarms */
-       for(int i=0; i < Os_CfgGetCounterCnt() ; i++) {
-               counter = Os_CfgGetCounter(i);
-               // Alarms
-               SLIST_INIT(&counter->alarm_head);
-               for(int j=0; j < Os_CfgGetAlarmCnt(); j++ ) {
-                       alarm_obj = Os_CfgGetAlarmObj(j);
-                       // Add the alarms
-                       SLIST_INSERT_HEAD(&counter->alarm_head,alarm_obj, alarm_list);
-               }
-               // Schedule tables
-               SLIST_INIT(&counter->sched_head);
-               for(int j=0; j < Os_CfgGetSchedCnt(); j++ ) {
-                       sched_obj = Os_CfgGetSched(j);
-                       // Add the alarms
-                       SLIST_INSERT_HEAD(&counter->sched_head,
-                                                               sched_obj,
-                                                               sched_list);
-               }
+       OsCounterType *cPtr;
+       OsAlarmType *aPtr;
+       OsSchTblType *sPtr;
+
+       /* Add the alarms to counters */
+       for(int i=0; i < Os_CfgGetAlarmCnt(); i++ ) {
+               aPtr = Os_CfgGetAlarmObj(i);
+               cPtr = aPtr->counter;
+               SLIST_INSERT_HEAD(&cPtr->alarm_head,aPtr, alarm_list);
+       }
 
+       /* Add the schedule tables to counters */
+       for(int i=0; i < Os_CfgGetSchedCnt(); i++ ) {
 
+               sPtr = Os_CfgGetSched(i);
+               cPtr = sPtr->counter;
+               SLIST_INSERT_HEAD(&cPtr->sched_head, sPtr, sched_list);
        }
 }
 \r
index bfe20a062164fb9d1e67b352644cc16e27a0a6d8..44678bfdab9638cd971b7c3fcd761b9a589177df 100644 (file)
@@ -142,7 +142,20 @@ StatusType SetEvent( TaskType TaskID, EventMaskType Mask ) {
 \r
        OS_STD_END_2(OSServiceId_SetEvent,TaskID, Mask);\r
 }\r
-\r
+
+
+/**
+ * This service returns the current state of all event bits of the task
+ * <TaskID>, not the events that the task is waiting for.
+ * The service may be called from interrupt service routines, task
+ * level and some hook routines (see Figure 12-1).
+ *  The current status of the event mask of task <TaskID> is copied
+ * to <Event>.
+ *
+ * @param TaskId Task whose event mask is to be returned.
+ * @param Mask   Reference to the memory of the return data.
+ * @return
+ */\r
 StatusType GetEvent( TaskType TaskId, EventMaskRefType Mask) {\r
 \r
        OsPcbType *dest_pcb;\r
@@ -160,7 +173,15 @@ StatusType GetEvent( TaskType TaskId, EventMaskRefType Mask) {
        OS_STD_END_2(OSServiceId_GetEvent,TaskId, Mask);\r
 }\r
 \r
-\r
+
+/**
+ * The events of the extended task calling ClearEvent are cleared
+ * according to the event mask <Mask>.
+ *
+ *
+ * @param Mask
+ * @return
+ */\r
 StatusType ClearEvent( EventMaskType Mask) {\r
     StatusType rv = E_OK;\r
        OsPcbType *pcb;
index 9aa5edb7f60c9a507d8fde72e34ba5550ecc06c6..885f1d176a9b507e3f347b80b3849fc08ba80663 100644 (file)
@@ -125,7 +125,10 @@ static void ScheduleTableConsistenyCheck( OsSchTblType *sTblPtr ) {
                /** @req OS408 */
                for(iter=0; iter  <  SA_LIST_CNT(&sTblPtr->expirePointList) ; iter++) {
                        delta = SA_LIST_GET(&sTblPtr->expirePointList,iter)->offset - delta;
-                       assert( delta >=  minCycle );
+                       /* initial offset may be zero (OS443) */
+                       if(iter!=0) {
+                               assert( delta >=  minCycle );
+                       }
                        assert( delta <=  maxValue );
                }
 
index f03986eb8d3ab905de1ccf12d667179c37e00a80..c418f9473b2ea0bd7a56f01968e383488bbf0519 100644 (file)
@@ -1,7 +1,7 @@
 \r
 # Figure out the most of the modules to use.\r
 OPTIMAL_USE = T32_TERM SIMPLE_PRINTF RAMLOG\r
-MOD_USE+=KERNEL MCU ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
 $(warning $(MOD_USE)) \r
 #MOD_USE+=KERNEL MCU T32_TERM SIMPLE_PRINTF RAMLOG\r
 \r
index d3bcc746b03f9585e912a7b38c9c0afabcc5f057..919a2d4ff2e8068805f784ab4f680d8dc9dec6b9 100644 (file)
@@ -9,7 +9,7 @@
 * 
 * 
 * Generated by Arctic Studio (http://arccore.com)
-*           on Wed May 05 23:09:13 CEST 2010
+*           on Tue Jun 08 08:30:59 CEST 2010
 */
 
        \r
index 39603564ed59dd59fde8274800572cb451394d2d..f71ef2a4d60e17bd5215d97f481dd1339f8ce60f 100644 (file)
@@ -9,7 +9,7 @@
 * 
 * 
 * Generated by Arctic Studio (http://arccore.com)
-*           on Wed May 05 23:09:13 CEST 2010
+*           on Tue Jun 08 08:30:59 CEST 2010
 */
 
 
index 3087bd283752474c9c70e26c34601e48c8664195..d1c438a210b3cf2fb56c4331d46145e289c0b519 100644 (file)
  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  * for more details.
  * -------------------------------- Arctic Core ------------------------------*/
-\r
+/*
+ * Contains mostly macros for the test-system. Most macro's have the same
+ * name as in embUnit, to make it easier to use.
+ *
+ */
+
 #ifndef OS_TEST_H_\r
 #define OS_TEST_H_\r
 \r
 #include "test_framework.h"
 #include "debug.h"\r
 \r
-typedef void (*test_func_t)( void );\r
+typedef void (*test_func_t)( void );
 \r
+
+#define TEST_INIT()                    printf("Test init\n");\r
 #define TEST_FAIL(_text)               test_fail((_text),  __FILE__,  __LINE__, __FUNCTION__ )\r
-#define TEST_OK()                              test_ok();\r
+#define TEST_OK()                              test_ok();
 #define TEST_ASSERT(_cond)                     if(!(_cond)) { TEST_FAIL(#_cond); }
+/* Start to run a test */
 #define TEST_RUN()                             printf("Running test %d\n",test_nr);
+/* Indicate that a test is done */
+//#define TEST_DONE()
+#define TEST_START(_str,_nr)           testStart(_str,_nr)
+#define TEST_NEXT(_str,_next_nr)       testEnd(); testStart(_str,_next_nr);
 \r
 \r
 extern int test_suite;\r
index 9ae174192be325411cec7ecacfe7c852fb7e7250..8e61f32354a0a6f6341bbb4fd4b6a0eaf9bbcdbc 100644 (file)
@@ -9,7 +9,7 @@
 * 
 * 
 * Generated by Arctic Studio (http://arccore.com)
-*           on Tue May 04 16:38:43 CEST 2010
+*           on Tue Jun 08 20:51:20 CEST 2010
 */
 
        \r
@@ -82,7 +82,7 @@ GEN_ALARM_HEAD {
                                NULL,\r
                                ALARM_ACTION_SETEVENT,\r
                                TASK_ID_etask_sup_m,\r
-                               EVENT_MASK_NOTIF,\r
+                               EVENT_MASK_notif,\r
                                NULL ),\r
        GEN_ALARM(      ALARM_ID_c_sys_1_setevent_etask_m,\r
                                "c_sys_1_setevent",\r
@@ -90,7 +90,7 @@ GEN_ALARM_HEAD {
                                NULL,\r
                                ALARM_ACTION_SETEVENT,\r
                                TASK_ID_etask_sup_m,\r
-                               EVENT_MASK_NOTIF,\r
+                               EVENT_MASK_notif,\r
                                NULL ),\r
        GEN_ALARM(      ALARM_ID_c_sys_activate_btask_h,\r
                                "c_sys_activate_b",\r
@@ -104,11 +104,6 @@ GEN_ALARM_HEAD {
 \r
 // ################################    RESOURCES     ###############################\r
 GEN_RESOURCE_HEAD {\r
-       GEN_RESOURCE(\r
-               RES_SCHEDULER,\r
-               RESOURCE_TYPE_STANDARD,\r
-               0\r
-       ),\r
        GEN_RESOURCE(\r
                RES_ID_int_1,\r
                RESOURCE_TYPE_INTERNAL,\r
@@ -251,7 +246,7 @@ GEN_SCHTBL_TASK_LIST_HEAD( 0, 5 ) {
 GEN_SCHTBL_EVENT_LIST_HEAD( 0, 7 ) {\r
        \r
        { \r
-               EVENT_MASK_NOTIF\r
+               EVENT_MASK_notif\r
                TASK_ID_etask_sup_m \r
        },\r
        \r
@@ -267,7 +262,7 @@ GEN_SCHTBL_TASK_LIST_HEAD( 0, 11 ) {
 GEN_SCHTBL_EVENT_LIST_HEAD( 0, 11 ) {\r
        \r
        { \r
-               EVENT_MASK_NOTIF\r
+               EVENT_MASK_notif\r
                TASK_ID_etask_sup_m \r
        },\r
        \r
@@ -281,12 +276,6 @@ GEN_SCHTBL_EXPIRY_POINT_HEAD( 0 ) {
        \r
 };\r
 \r
-GEN_SCHTBL_AUTOSTART(\r
-       0,\r
-       SCHTBL_AUTOSTART_ABSOLUTE,\r
-       1, \r
-       OSDEFAULTAPPMODE\r
-);\r
 \r
 // Table data 1\r
 \r
@@ -312,7 +301,7 @@ GEN_SCHTBL_HEAD {
            COUNTER_ID_soft_1,\r
            SINGLE_SHOT,\r
                15,\r
-               GEN_SCHTBL_AUTOSTART_NAME(0)\r
+               NULL\r
        ),\r
        GEN_SCHEDULETABLE(\r
                1,\r
index 092af50ef5d31c77acb5ecc513b7dada4eafc8b9..14e9d15b62114e08b08cf054a7acdf01f4cddfbf 100644 (file)
@@ -9,7 +9,7 @@
 * 
 * 
 * Generated by Arctic Studio (http://arccore.com)
-*           on Tue May 04 16:38:43 CEST 2010
+*           on Tue Jun 08 20:51:20 CEST 2010
 */
 
 
@@ -40,8 +40,8 @@
 \r
 \r
 // Event masks\r
-#define EVENT_MASK_KILL        32768\r
-#define EVENT_MASK_NOTIF       1\r
+#define EVENT_MASK_kill        32768\r
+#define EVENT_MASK_notif       1\r
 \r
 // Isr Id's\r
 \r
diff --git a/system/kernel/testsystem/suite_01/build_config.mk b/system/kernel/testsystem/suite_01/build_config.mk
new file mode 100644 (file)
index 0000000..c418f94
--- /dev/null
@@ -0,0 +1,7 @@
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = T32_TERM SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+$(warning $(MOD_USE)) \r
+#MOD_USE+=KERNEL MCU T32_TERM SIMPLE_PRINTF RAMLOG\r
+\r
index 546dfbb2423a0d6208daba44cc1e45be987d8968..0d4d303e545f22b587c413eca0c0f7c030318649 100644 (file)
@@ -12,7 +12,7 @@
       </ADMIN-DATA>\r
       <ELEMENTS>\r
         <ECU-CONFIGURATION UUID="adececfa-6614-4f2a-bc3b-0de7440970a7">\r
-          <SHORT-NAME>testsystem</SHORT-NAME>\r
+          <SHORT-NAME>config_01</SHORT-NAME>\r
           <ADMIN-DATA>\r
             <DOC-REVISIONS>\r
               <DOC-REVISION>\r
               </PARAMETER-VALUES>\r
             </CONTAINER>\r
             <CONTAINER UUID="535d1101-3931-4273-81af-00627d240a77">\r
-              <SHORT-NAME>NOTIF</SHORT-NAME>\r
+              <SHORT-NAME>notif</SHORT-NAME>\r
               <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
               <PARAMETER-VALUES>\r
                 <INTEGER-VALUE>\r
               </PARAMETER-VALUES>\r
             </CONTAINER>\r
             <CONTAINER UUID="19e4f863-4f93-4692-ade2-6e2451d7c194">\r
-              <SHORT-NAME>KILL</SHORT-NAME>\r
+              <SHORT-NAME>kill</SHORT-NAME>\r
               <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsEvent</DEFINITION-REF>\r
               <PARAMETER-VALUES>\r
                 <INTEGER-VALUE>\r
                       <REFERENCE-VALUES>\r
                         <REFERENCE-VALUE>\r
                           <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting/OsScheduleTableSetEventRef</DEFINITION-REF>\r
-                          <VALUE-REF DEST="CONTAINER">/testsystem/Os/NOTIF</VALUE-REF>\r
+                          <VALUE-REF DEST="CONTAINER">/testsystem/Os/notif</VALUE-REF>\r
                         </REFERENCE-VALUE>\r
                         <REFERENCE-VALUE>\r
                           <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting/OsScheduleTableSetEventTaskRef</DEFINITION-REF>\r
                       <REFERENCE-VALUES>\r
                         <REFERENCE-VALUE>\r
                           <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting/OsScheduleTableSetEventRef</DEFINITION-REF>\r
-                          <VALUE-REF DEST="CONTAINER">/testsystem/Os/NOTIF</VALUE-REF>\r
+                          <VALUE-REF DEST="CONTAINER">/testsystem/Os/notif</VALUE-REF>\r
                         </REFERENCE-VALUE>\r
                         <REFERENCE-VALUE>\r
                           <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting/OsScheduleTableSetEventTaskRef</DEFINITION-REF>\r
                     </CONTAINER>\r
                   </SUB-CONTAINERS>\r
                 </CONTAINER>\r
-                <CONTAINER UUID="753698a2-650f-4eb4-a637-839ab71c48df">\r
-                  <SHORT-NAME>OsScheduleTableAutostart</SHORT-NAME>\r
-                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableAutostart</DEFINITION-REF>\r
-                  <PARAMETER-VALUES>\r
-                    <ENUMERATION-VALUE>\r
-                      <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableAutostart/OsScheduleTableAutostartType</DEFINITION-REF>\r
-                      <VALUE>ABSOLUTE</VALUE>\r
-                    </ENUMERATION-VALUE>\r
-                    <INTEGER-VALUE>\r
-                      <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableAutostart/ArcCoreOsScheduleTableOffset</DEFINITION-REF>\r
-                      <VALUE>1</VALUE>\r
-                    </INTEGER-VALUE>\r
-                  </PARAMETER-VALUES>\r
-                </CONTAINER>\r
               </SUB-CONTAINERS>\r
             </CONTAINER>\r
             <CONTAINER UUID="6746f7ae-bbee-45d9-bc71-3268c81fb344">\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">/testsystem/Os/NOTIF</VALUE-REF>\r
+                      <VALUE-REF DEST="CONTAINER">/testsystem/Os/notif</VALUE-REF>\r
                     </REFERENCE-VALUE>\r
                     <REFERENCE-VALUE>\r
                       <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmSetEvent/OsAlarmSetEventTaskRef</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">/testsystem/Os/NOTIF</VALUE-REF>\r
+                      <VALUE-REF DEST="CONTAINER">/testsystem/Os/notif</VALUE-REF>\r
                     </REFERENCE-VALUE>\r
                     <REFERENCE-VALUE>\r
                       <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmSetEvent/OsAlarmSetEventTaskRef</DEFINITION-REF>\r
index ab199d7b9aed4e03c1dbb08154a0a97cd7bc546a..ccf8090a2d2a23a92a402317cc224ac533f421f8 100644 (file)
@@ -12,12 +12,7 @@ obj-y += test_04_stable.o
 obj-y += test_05_const.o\r
 obj-y += test_06_event.o\r
 \r
-#obj-y += test_sup_01.o\r
-#obj-y += test_sup_02.o\r
-#obj-y += test_sup_03.o\r
-#obj-y += test_sup_04.o        \r
 obj-y += test_framework.o\r
-\r
 obj-y += Os_Cfg.o\r
 \r
 # Not supported yet...\r
@@ -44,7 +39,7 @@ vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)
 vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
 VPATH += $(vpath-y)\r
 VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
-\r
+VPATH += $(realpath ../..)\r
 \r
 # libs needed by us \r
 libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
@@ -54,6 +49,7 @@ ldcmdfile-y = $(ROOTDIR)/$(ARCH_PATH-y)/scripts/linkscript_gcc.ldf
 #ldcmdfile-y = $(ROOTDIR)/$(ARCH_PATH-y)/scripts/linkscript_gcc.ldf\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
diff --git a/system/kernel/testsystem/suite_01/test_master.c b/system/kernel/testsystem/suite_01/test_master.c
new file mode 100644 (file)
index 0000000..8abe335
--- /dev/null
@@ -0,0 +1,200 @@
+/* -------------------------------- Arctic Core ------------------------------
+ * Arctic Core - the open source AUTOSAR platform http://arccore.com
+ *
+ * Copyright (C) 2009  ArcCore AB <contact@arccore.com>
+ *
+ * This source code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ * -------------------------------- Arctic Core ------------------------------*/
+
+/* CONFIGURATION
+ * - The "etask_master" should be the only autostarted task.
+ * - It can hold at most 3 extended task and 3 basic tasks. They must be called
+ *   etask_sup_l, etask_sup_m, etask_sup_h,
+ *   btask_sup_l, btask_sup_m, btask_sup_h
+ */
+
+
+
+
+
+#include <stdlib.h>\r
+#include "Os.h"\r
+#include "os_test.h"\r
+#include "Mcu.h"\r
+#if defined(USE_GPT)\r
+#include "Gpt.h"\r
+#endif\r
+
+\r
+//#define USE_LDEBUG_PRINTF\r
+#include "debug.h"
+#include "arc.h"\r
+\r
+\r
+typedef struct {\r
+        uint32 nr;\r
+        uint32 sub_nr;\r
+        uint32 failed;\r
+} test_master_cfg_t;\r
+\r
+TaskType test_activate_pid_list[] =\r
+{\r
+/* 01*/        TASK_ID_etask_sup_l,\r
+/* 02*/        TASK_ID_etask_sup_l,\r
+/* 03*/        TASK_ID_etask_sup_l,
+/* 04*/        TASK_ID_etask_sup_l,\r
+};\r
+\r
+static int test_case = 0;\r
+\r
+/*\r
+ * Master test process, everything is controlled from here.\r
+ */\r
+void etask_master( void ) {\r
+       TaskType pid;\r
+\r
+       for( ; test_case < sizeof(test_activate_pid_list)/sizeof(TaskType); test_case++)\r
+       {\r
+               test_nr = 1;\r
+               printf("-----> Test Suite %02d\n",test_suite);\r
+               pid = test_activate_pid_list[test_case];
+               ActivateTask(pid);
+               /* We are lowest prio task in the system (apart from idle) so
+                * all tasks in the test are now terminated...
+                */\r
+               test_suite++;\r
+       }\r
+
+       // Test complete..
+       testExit(0);
+}\r
+
+extern test_func_t etask_sup_matrix[][3];
+extern test_func_t btask_sup_matrix[][3];\r
+\r
+//--------------------------------------------------------------------\r
+//--------------------------------------------------------------------\r
+\r
+void etask_sup_l( void )\r
+{\r
+       test_func_t func;\r
+       func = etask_sup_matrix[test_case][0];\r
+       if( func != NULL )\r
+               func();\r
+\r
+       TerminateTask();\r
+}\r
+\r
+void etask_sup_m( void )\r
+{\r
+       test_func_t func;\r
+       func =  etask_sup_matrix[test_case][1];\r
+       if( func != NULL )\r
+               func();\r
+\r
+       TerminateTask();\r
+}\r
+\r
+void etask_sup_h( void )\r
+{\r
+       test_func_t func;\r
+       func =  etask_sup_matrix[test_case][2];\r
+       if( func != NULL )\r
+               func();\r
+\r
+       TerminateTask();\r
+}\r
+\r
+//--------------------------------------------------------------------\r
+//--------------------------------------------------------------------\r
+\r
+void btask_sup_l( void ) {\r
+       test_func_t func;\r
+       func =  btask_sup_matrix[test_case][0];\r
+       if( func != NULL )\r
+               func();\r
+}\r
+void btask_sup_m( void ) {\r
+       test_func_t func;\r
+       func =  btask_sup_matrix[test_case][1];\r
+       if( func != NULL )\r
+               func();\r
+}\r
+void btask_sup_h( void ) {\r
+       test_func_t func;\r
+       func =  btask_sup_matrix[test_case][2];\r
+       if( func != NULL )\r
+               func();\r
+}\r
+\r
+\r
+void OsIdle(void ) {\r
+       for(;;);\r
+}\r
+\r
+\r
+/* Global hooks */\r
+ProtectionReturnType ProtectionHook( StatusType FatalError ) {\r
+       printf("## ProtectionHook\n");\r
+       return PRO_KILLAPPL;\r
+}\r
+\r
+void StartupHook( void ) {\r
+//     LDEBUG_PRINTF("## StartupHook\n");\r
+\r
+#ifdef USE_MCU
+       uint32_t sys_freq = McuE_GetSystemClock();
+       (void)sys_freq;\r
+       LDEBUG_PRINTF("Sys clock %d Hz\n",sys_freq);\r
+#endif\r
+}\r
+\r
+void ShutdownHook( StatusType Error ) {\r
+       LDEBUG_PRINTF("## ShutdownHook\n");\r
+       const char *err;
+       err = Arc_StatusToString(Error);
+       while(1) {
+               err = err;
+       }
+}\r
+\r
+void ErrorHook( StatusType Error ) {\r
+       LDEBUG_PRINTF("## ErrorHook err=%d\n",Error);
+       const char *err;
+       err = Arc_StatusToString(Error);
+//     while(1);
+}\r
+\r
+void PreTaskHook( void ) {\r
+       TaskType task;\r
+       GetTaskID(&task);\r
+       if( task > 10 ) {\r
+               while(1);\r
+       }\r
+       LDEBUG_PRINTF("## PreTaskHook, taskid=%d\n",task);\r
+}\r
+\r
+void PostTaskHook( void ) {\r
+       TaskType task;\r
+       GetTaskID(&task);\r
+       if( task > 10 ) {\r
+               while(1);\r
+       }\r
+\r
+       LDEBUG_PRINTF("## PostTaskHook, taskid=%d\n",task);
+#if 0\r
+       {\r
+               StackInfoType si;\r
+               Os_Arc_GetStackInfo(task,&si);\r
+//             LDEBUG_PRINTF("Stack usage %d%% (this=%08x, top=%08x, size=%08x,usage=%08x )\n",OS_STACK_USAGE(&si),si.curr, si.top,si.size,si.usage);\r
+       }
+#endif\r
+}\r
+\r
index e06ce62ff165638ce29d166df6f383c59a0f0df6..d349d3a82a90d0e595fa5dee5eceb6a9d4efbc48 100644 (file)
@@ -9,7 +9,7 @@
 * 
 * 
 * Generated by Arctic Studio (http://arccore.com)
-*           on Tue May 04 22:55:40 CEST 2010
+*           on Tue Jun 08 08:23:43 CEST 2010
 */
 
        \r
@@ -37,27 +37,62 @@ uint32 os_dbg_mask = D_RESOURCE |D_SCHTBL |D_EVENT |D_TASK |D_ALARM;
 \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
+                                       1,\r
+                                       0),\r
+       GEN_COUNTER(    COUNTER_ID_Counter2,\r
+                                       "Counter2",\r
+                                       COUNTER_TYPE_SOFT,\r
+                                       COUNTER_UNIT_NANO,\r
+                                       65535,\r
+                                       1,\r
+                                       1,\r
+                                       0),\r
 };\r
 \r
-CounterType Os_Arc_OsTickCounter = -1;\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
 \r
 // ##################################    ALARMS     ################################\r
+GEN_ALARM_AUTOSTART(ALARM_ID_Alarm1, ALARM_AUTOSTART_ABSOLUTE, 1, 0, OSDEFAULTAPPMODE );\r
+       \r
+GEN_ALARM_AUTOSTART(ALARM_ID_Alarm2, ALARM_AUTOSTART_ABSOLUTE, 1, 0, OSDEFAULTAPPMODE );\r
+       \r
 \r
 GEN_ALARM_HEAD {\r
+       GEN_ALARM(      ALARM_ID_Alarm1,\r
+                               "Alarm1",\r
+                               COUNTER_ID_Counter2,\r
+                               GEN_ALARM_AUTOSTART_NAME(ALARM_ID_Alarm1),\r
+                               ALARM_ACTION_SETEVENT,\r
+                               TASK_ID_etask_master,\r
+                               EVENT_MASK_Alarm_1,\r
+                               NULL ),\r
+       GEN_ALARM(      ALARM_ID_Alarm2,\r
+                               "Alarm2",\r
+                               COUNTER_ID_Counter2,\r
+                               GEN_ALARM_AUTOSTART_NAME(ALARM_ID_Alarm2),\r
+                               ALARM_ACTION_SETEVENT,\r
+                               TASK_ID_etask_master,\r
+                               EVENT_MASK_Alarm_2,\r
+                               NULL ),\r
 };\r
 \r
 // ################################    RESOURCES     ###############################\r
 GEN_RESOURCE_HEAD {\r
-       GEN_RESOURCE(   \r
-               RES_SCHEDULER,\r
-               RESOURCE_TYPE_STANDARD,\r
-               0\r
-       ),\r
 };\r
 \r
 // ##############################    STACKS (TASKS)     ############################\r
 DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
-DECLARE_STACK(btask_l,2048);\r
+DECLARE_STACK(btask_2,2048);\r
+DECLARE_STACK(btask_4,2048);\r
+DECLARE_STACK(etask_3,2048);\r
+DECLARE_STACK(etask_5,2048);\r
+DECLARE_STACK(etask_master,2048);\r
 \r
 // ##################################    TASKS     #################################\r
 GEN_TASK_HEAD {\r
@@ -69,10 +104,50 @@ GEN_TASK_HEAD {
                                0 \r
        ),\r
        GEN_ETASK(\r
-               btask_l,\r
-               1,\r
+               btask_2,\r
+               2,\r
                FULL,\r
-               FALSE,\r
+               TRUE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_BTASK(\r
+               btask_4,\r
+               4,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               0,\r
+               1\r
+       ),\r
+                               \r
+       GEN_ETASK(\r
+               etask_3,\r
+               3,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_5,\r
+               5,\r
+               FULL,\r
+               TRUE,\r
+               NULL,\r
+               0\r
+       ),\r
+               \r
+                               \r
+       GEN_ETASK(\r
+               etask_master,\r
+               10,\r
+               FULL,\r
+               TRUE,\r
                NULL,\r
                0\r
        ),\r
@@ -95,8 +170,74 @@ GEN_HOOKS(
 \r
 // ############################    SCHEDULE TABLES     #############################\r
 \r
+// Table data ScheduleTable_1\r
+\r
+\r
+GEN_SCHTBL_EVENT_LIST_HEAD( 0, 0 ) {\r
+       \r
+       { \r
+               EVENT_MASK_SchTbl_1, \r
+               TASK_ID_etask_master \r
+       },\r
+       \r
+};\r
+\r
+\r
+GEN_SCHTBL_EXPIRY_POINT_HEAD( 0 ) {\r
+       GEN_SCHTBL_EXPIRY_POINT_W_EVENT(0, 0),
+       \r
+};\r
+\r
+GEN_SCHTBL_AUTOSTART(\r
+       0,\r
+       SCHTBL_AUTOSTART_ABSOLUTE,\r
+       1, \r
+       OSDEFAULTAPPMODE\r
+);\r
+\r
+// Table data ScheduleTable_2\r
+\r
+\r
+GEN_SCHTBL_EVENT_LIST_HEAD( 1, 0 ) {\r
+       \r
+       { \r
+               EVENT_MASK_SchTbl_2, \r
+               TASK_ID_etask_master \r
+       },\r
+       \r
+};\r
+\r
+\r
+GEN_SCHTBL_EXPIRY_POINT_HEAD( 1 ) {\r
+       GEN_SCHTBL_EXPIRY_POINT_W_EVENT(1, 0),
+       \r
+};\r
+\r
+GEN_SCHTBL_AUTOSTART(\r
+       1,\r
+       SCHTBL_AUTOSTART_ABSOLUTE,\r
+       1, \r
+       OSDEFAULTAPPMODE\r
+);\r
+\r
 // Table heads\r
 GEN_SCHTBL_HEAD {\r
+       GEN_SCHEDULETABLE(\r
+               0,\r
+               "ScheduleTable_1",\r
+           COUNTER_ID_Counter2,\r
+           SINGLE_SHOT,\r
+               10,\r
+               GEN_SCHTBL_AUTOSTART_NAME(0)\r
+       ),\r
+       GEN_SCHEDULETABLE(\r
+               1,\r
+               "ScheduleTable_2",\r
+           COUNTER_ID_Counter2,\r
+           SINGLE_SHOT,\r
+               10,\r
+               GEN_SCHTBL_AUTOSTART_NAME(1)\r
+       ),\r
 };\r
 \r
 GEN_PCB_LIST()\r
index 43d949e3282cdb21cafcdd26d39ea54dfefd571e..d54e2e22aca15c549d2340a2338e5e64e98ba67d 100644 (file)
@@ -9,7 +9,7 @@
 * 
 * 
 * Generated by Arctic Studio (http://arccore.com)
-*           on Tue May 04 22:55:40 CEST 2010
+*           on Tue Jun 08 08:23:43 CEST 2010
 */
 
 
 \r
 \r
 // Alarm Id's\r
+#define ALARM_ID_Alarm1        0\r
+#define ALARM_ID_Alarm2        1\r
 \r
 // Counter Id's\r
+#define COUNTER_ID_Counter1    0\r
+#define COUNTER_ID_Counter2    1\r
 \r
 // Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+#define OSMAXALLOWEDVALUE_Counter2 65535\r
 \r
 \r
 // Event masks\r
+#define EVENT_MASK_Alarm_1     1\r
+#define EVENT_MASK_Alarm_2     2\r
+#define EVENT_MASK_Event1      1\r
+#define EVENT_MASK_SchTbl_1    4\r
+#define EVENT_MASK_SchTbl_2    8\r
 \r
 // Isr Id's\r
 \r
 \r
 // Task Id's\r
 #define TASK_ID_OsIdle 0\r
-#define TASK_ID_btask_l        1\r
+#define TASK_ID_btask_2        1\r
+#define TASK_ID_btask_4        2\r
+#define TASK_ID_etask_3        3\r
+#define TASK_ID_etask_5        4\r
+#define TASK_ID_etask_master   5\r
 \r
 // Task entry points\r
 void OsIdle( void );\r
-void btask_l( void );\r
+void btask_2( void );\r
+void btask_4( void );\r
+void etask_3( void );\r
+void etask_5( void );\r
+void etask_master( void );\r
 \r
 // Schedule table id's\r
+#define SCHTBL_ID_ScheduleTable_1  0\r
+#define SCHTBL_ID_ScheduleTable_2  1\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                            2\r
-#define OS_SCHTBL_CNT                  0\r
-#define OS_COUNTER_CNT                 0\r
-#define OS_EVENTS_CNT                  0\r
+#define OS_ALARM_CNT                   2 \r
+#define OS_TASK_CNT                            6\r
+#define OS_SCHTBL_CNT                  2\r
+#define OS_COUNTER_CNT                 2\r
+#define OS_EVENTS_CNT                  5\r
 #define OS_ISRS_CNT                            0\r
 #define OS_RESOURCE_CNT                        0\r
 #define OS_LINKED_RESOURCE_CNT 0\r
diff --git a/system/kernel/testsystem/suite_02/build_config.mk b/system/kernel/testsystem/suite_02/build_config.mk
new file mode 100644 (file)
index 0000000..c418f94
--- /dev/null
@@ -0,0 +1,7 @@
+\r
+# Figure out the most of the modules to use.\r
+OPTIMAL_USE = T32_TERM SIMPLE_PRINTF RAMLOG\r
+MOD_USE+=KERNEL MCU COMMON NEWLIB DET ECUM $(filter $(OPTIMAL_USE),$(MOD_AVAIL))\r
+$(warning $(MOD_USE)) \r
+#MOD_USE+=KERNEL MCU T32_TERM SIMPLE_PRINTF RAMLOG\r
+\r
index 321acc3087b90d6cc257d979d52ac6476b33f42b..49ec540f483d65618be8e87029b98ceac4b93262 100644 (file)
               </SUB-CONTAINERS>\r
             </CONTAINER>\r
             <CONTAINER UUID="26696744-a69d-4889-8270-79ca5aa23560">\r
-              <SHORT-NAME>btask_l</SHORT-NAME>\r
+              <SHORT-NAME>btask_2</SHORT-NAME>\r
               <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
               <PARAMETER-VALUES>\r
                 <INTEGER-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
+                  <VALUE>2</VALUE>\r
                 </INTEGER-VALUE>\r
                 <ENUMERATION-VALUE>\r
                   <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
                   <VALUE>FULL</VALUE>\r
                 </ENUMERATION-VALUE>\r
               </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="3003d3ff-e15d-40a0-abba-986d6c49b14b">\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="7a2dfce0-db02-4ca0-8218-b4e7a8780d15">\r
               <SHORT-NAME>Alarm1</SHORT-NAME>\r
               <REFERENCE-VALUES>\r
                 <REFERENCE-VALUE>\r
                   <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/suite_02/Os/Counter2</VALUE-REF>\r
                 </REFERENCE-VALUE>\r
               </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="262870a1-3030-4004-af9e-81e2178a5f04">\r
+                  <SHORT-NAME>OsAlarmAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAutostart</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <INTEGER-VALUE>\r
+                      <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAutostart/OsAlarmAlarmTime</DEFINITION-REF>\r
+                      <VALUE>1</VALUE>\r
+                    </INTEGER-VALUE>\r
+                    <ENUMERATION-VALUE>\r
+                      <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAutostart/OsAlarmAutostartType</DEFINITION-REF>\r
+                      <VALUE>ABSOLUTE</VALUE>\r
+                    </ENUMERATION-VALUE>\r
+                    <INTEGER-VALUE>\r
+                      <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAutostart/OsAlarmCycleTime</DEFINITION-REF>\r
+                      <VALUE>0</VALUE>\r
+                    </INTEGER-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+                <CONTAINER UUID="a3679f73-9065-4170-921f-b23c1817fa6e">\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">/suite_02/Os/Alarm_1</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">/suite_02/Os/etask_master</VALUE-REF>\r
+                    </REFERENCE-VALUE>\r
+                  </REFERENCE-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
             </CONTAINER>\r
             <CONTAINER UUID="31355487-8041-41af-b093-63eb63487f1f">\r
               <SHORT-NAME>Alarm2</SHORT-NAME>\r
               <REFERENCE-VALUES>\r
                 <REFERENCE-VALUE>\r
                   <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/suite_02/Os/Counter2</VALUE-REF>\r
                 </REFERENCE-VALUE>\r
               </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="156c631d-4d48-45f6-a1ed-35f66b2b4b01">\r
+                  <SHORT-NAME>OsAlarmAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAutostart</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <INTEGER-VALUE>\r
+                      <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAutostart/OsAlarmAlarmTime</DEFINITION-REF>\r
+                      <VALUE>1</VALUE>\r
+                    </INTEGER-VALUE>\r
+                    <ENUMERATION-VALUE>\r
+                      <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAutostart/OsAlarmAutostartType</DEFINITION-REF>\r
+                      <VALUE>ABSOLUTE</VALUE>\r
+                    </ENUMERATION-VALUE>\r
+                    <INTEGER-VALUE>\r
+                      <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAutostart/OsAlarmCycleTime</DEFINITION-REF>\r
+                      <VALUE>0</VALUE>\r
+                    </INTEGER-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+                <CONTAINER UUID="9a456d78-7bf4-4e77-b78c-487be11727dc">\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">/suite_02/Os/Alarm_2</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">/suite_02/Os/etask_master</VALUE-REF>\r
+                    </REFERENCE-VALUE>\r
+                  </REFERENCE-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
             </CONTAINER>\r
             <CONTAINER UUID="33b3f94e-daa4-4baf-957e-fa31413e5511">\r
               <SHORT-NAME>ScheduleTable_1</SHORT-NAME>\r
               <PARAMETER-VALUES>\r
                 <INTEGER-VALUE>\r
                   <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableDuration</DEFINITION-REF>\r
-                  <VALUE>0</VALUE>\r
+                  <VALUE>10</VALUE>\r
                 </INTEGER-VALUE>\r
                 <BOOLEAN-VALUE>\r
                   <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableRepeating</DEFINITION-REF>\r
               <REFERENCE-VALUES>\r
                 <REFERENCE-VALUE>\r
                   <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/suite_02/Os/Counter2</VALUE-REF>\r
                 </REFERENCE-VALUE>\r
               </REFERENCE-VALUES>\r
               <SUB-CONTAINERS>\r
                     </INTEGER-VALUE>\r
                   </PARAMETER-VALUES>\r
                   <SUB-CONTAINERS>\r
-                    <CONTAINER UUID="5dfc1b7f-bd22-455a-8163-31b6cea4e508">\r
-                      <SHORT-NAME>TaskActivation1</SHORT-NAME>\r
-                      <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableTaskActivation</DEFINITION-REF>\r
+                    <CONTAINER UUID="3e02a90b-3d35-4f05-ab0c-d0cd49c9cf0d">\r
+                      <SHORT-NAME>EventSetting1</SHORT-NAME>\r
+                      <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting</DEFINITION-REF>\r
                       <REFERENCE-VALUES>\r
                         <REFERENCE-VALUE>\r
-                          <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableTaskActivation/OsScheduleTableActivateTaskRef</DEFINITION-REF>\r
+                          <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting/OsScheduleTableSetEventRef</DEFINITION-REF>\r
+                          <VALUE-REF DEST="CONTAINER">/suite_02/Os/SchTbl_1</VALUE-REF>\r
+                        </REFERENCE-VALUE>\r
+                        <REFERENCE-VALUE>\r
+                          <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting/OsScheduleTableSetEventTaskRef</DEFINITION-REF>\r
+                          <VALUE-REF DEST="CONTAINER">/suite_02/Os/etask_master</VALUE-REF>\r
                         </REFERENCE-VALUE>\r
                       </REFERENCE-VALUES>\r
                     </CONTAINER>\r
                   </SUB-CONTAINERS>\r
                 </CONTAINER>\r
+                <CONTAINER UUID="0aa6ddd3-2a72-4776-89fc-5bee1c48c401">\r
+                  <SHORT-NAME>OsScheduleTableAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableAutostart</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <ENUMERATION-VALUE>\r
+                      <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableAutostart/OsScheduleTableAutostartType</DEFINITION-REF>\r
+                      <VALUE>ABSOLUTE</VALUE>\r
+                    </ENUMERATION-VALUE>\r
+                    <INTEGER-VALUE>\r
+                      <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableAutostart/ArcCoreOsScheduleTableOffset</DEFINITION-REF>\r
+                      <VALUE>1</VALUE>\r
+                    </INTEGER-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
               </SUB-CONTAINERS>\r
             </CONTAINER>\r
             <CONTAINER UUID="034f9a38-b528-41b1-bb43-2342926f6153">\r
               <PARAMETER-VALUES>\r
                 <INTEGER-VALUE>\r
                   <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableDuration</DEFINITION-REF>\r
-                  <VALUE>0</VALUE>\r
+                  <VALUE>10</VALUE>\r
                 </INTEGER-VALUE>\r
                 <BOOLEAN-VALUE>\r
                   <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableRepeating</DEFINITION-REF>\r
               <REFERENCE-VALUES>\r
                 <REFERENCE-VALUE>\r
                   <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/suite_02/Os/Counter2</VALUE-REF>\r
                 </REFERENCE-VALUE>\r
               </REFERENCE-VALUES>\r
               <SUB-CONTAINERS>\r
                       <VALUE>0</VALUE>\r
                     </INTEGER-VALUE>\r
                   </PARAMETER-VALUES>\r
+                  <SUB-CONTAINERS>\r
+                    <CONTAINER UUID="693a4960-facf-4e4a-a571-d365ae875ceb">\r
+                      <SHORT-NAME>EventSetting1</SHORT-NAME>\r
+                      <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting</DEFINITION-REF>\r
+                      <REFERENCE-VALUES>\r
+                        <REFERENCE-VALUE>\r
+                          <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting/OsScheduleTableSetEventRef</DEFINITION-REF>\r
+                          <VALUE-REF DEST="CONTAINER">/suite_02/Os/SchTbl_2</VALUE-REF>\r
+                        </REFERENCE-VALUE>\r
+                        <REFERENCE-VALUE>\r
+                          <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableExpiryPoint/OsScheduleTableEventSetting/OsScheduleTableSetEventTaskRef</DEFINITION-REF>\r
+                          <VALUE-REF DEST="CONTAINER">/suite_02/Os/etask_master</VALUE-REF>\r
+                        </REFERENCE-VALUE>\r
+                      </REFERENCE-VALUES>\r
+                    </CONTAINER>\r
+                  </SUB-CONTAINERS>\r
+                </CONTAINER>\r
+                <CONTAINER UUID="fe834b1b-1ae2-4888-9518-59bd2d1f1195">\r
+                  <SHORT-NAME>OsScheduleTableAutostart</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableAutostart</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <ENUMERATION-VALUE>\r
+                      <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableAutostart/OsScheduleTableAutostartType</DEFINITION-REF>\r
+                      <VALUE>ABSOLUTE</VALUE>\r
+                    </ENUMERATION-VALUE>\r
+                    <INTEGER-VALUE>\r
+                      <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsScheduleTable/OsScheduleTableAutostart/ArcCoreOsScheduleTableOffset</DEFINITION-REF>\r
+                      <VALUE>1</VALUE>\r
+                    </INTEGER-VALUE>\r
+                  </PARAMETER-VALUES>\r
                 </CONTAINER>\r
               </SUB-CONTAINERS>\r
             </CONTAINER>\r
+            <CONTAINER UUID="6701be99-c484-4d78-be6f-efcb73566fba">\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="b00f59e1-c49c-49ec-ada6-7a027fd0060b">\r
+              <SHORT-NAME>Counter2</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>SOFTWARE</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="e3bf560f-b9b7-4e6f-9520-6271b3e699a5">\r
+              <SHORT-NAME>Event1</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="b236cee5-5b51-4b4b-a93c-2eb78964d7ff">\r
+              <SHORT-NAME>btask_4</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
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="4733a77a-c470-4529-a9ae-00c242bbe251">\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="7e97f4aa-e766-48f0-8cbd-29357df062e3">\r
+              <SHORT-NAME>etask_3</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>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="b71f84b9-4f48-40f3-a6c3-02e2aabb7dcf">\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="13e11cb6-2ea8-45df-aca8-5b2c785a419e">\r
+              <SHORT-NAME>etask_5</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="a471975b-1543-41a5-a56c-25affcc0878b">\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="f8e58cab-67b1-4e2b-a825-ceb98bb85743">\r
+              <SHORT-NAME>etask_master</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>10</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="38d4c454-e3dd-47b5-8a01-a0aee062e796">\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="af762c17-2f49-46c2-a380-763ba5b9be79">\r
+              <SHORT-NAME>Alarm_1</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="4d562e94-c082-4513-a946-71331d918a2f">\r
+              <SHORT-NAME>Alarm_2</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="9ad1eb87-cc43-4fc3-a390-c7839f5cb55f">\r
+              <SHORT-NAME>SchTbl_1</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>4</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="11c5b9c1-3eb2-4f06-a490-d75d001a72c5">\r
+              <SHORT-NAME>SchTbl_2</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>8</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
           </CONTAINERS>\r
         </MODULE-CONFIGURATION>\r
       </ELEMENTS>\r
index 7d906f5a963cf83a4d62af35d017a0928c24576d..9449ccd4a2b4a459fc39c258a1e3d810963fbae7 100644 (file)
@@ -21,8 +21,8 @@ MOD_USE+=KERNEL MCU
 MOD_USE+=T32_TERM\r
 #MOD_USE+=PROTECTIONHOOK STARTUPHOOK SHUTDOWNHOOK ERRORHOOK                    1\r
 #MOD_USE+=PRETASKHOOK POSTTASKHOOK\r
-CFG+=CONSOLE_T32\r
-CFG+=CONSOLE_WINIDEA\r
+#CFG+=CONSOLE_T32\r
+#CFG+=CONSOLE_WINIDEA\r
 \r
 \r
 # TODO: Fix this....\r
@@ -33,16 +33,17 @@ vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)
 vpath-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
 VPATH += $(vpath-y)\r
 VPATH += $(ROOTDIR)/$(SUBDIR)/config\r
-\r
+VPATH += $(realpath ../..)\r
 \r
 # libs needed by us \r
-libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
+#libitem-y += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a\r
 \r
 #linkfile\r
 ldcmdfile-y = $(ROOTDIR)/$(ARCH_PATH-y)/scripts/linkscript_gcc.ldf\r
 #ldcmdfile-y = $(ROOTDIR)/$(ARCH_PATH-y)/scripts/linkscript_gcc.ldf\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
diff --git a/system/kernel/testsystem/suite_02/test_master.c b/system/kernel/testsystem/suite_02/test_master.c
new file mode 100644 (file)
index 0000000..cb74fa5
--- /dev/null
@@ -0,0 +1,369 @@
+/* -------------------------------- Arctic Core ------------------------------
+ * Arctic Core - the open source AUTOSAR platform http://arccore.com
+ *
+ * Copyright (C) 2009  ArcCore AB <contact@arccore.com>
+ *
+ * This source code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ * -------------------------------- Arctic Core ------------------------------*/
+
+/* Tests
+ *   Autostart bananza..
+ *   1. Autostart of tasks
+ *   2. Autostart of alarms
+ *   3. Autostart of scheduletables.
+ */
+
+
+
+
+
+#include <stdlib.h>\r
+#include "Os.h"\r
+#include "os_test.h"\r
+#include "Mcu.h"\r
+#if defined(USE_GPT)\r
+#include "Gpt.h"\r
+#endif\r
+
+\r
+//#define USE_LDEBUG_PRINTF\r
+#include "debug.h"
+#include "arc.h"\r
+#include "test_framework.h"
+\r
+\r
+#define ERROR_LOG_SIZE 1
+
+typedef struct ErrorEntry {
+       StatusType              error;
+       OsErrorType     info;
+       TaskType        taskId;
+       OsServiceIdType serviceId;
+} ErrorEntryType;
+
+
+typedef struct ErrorLog {
+       int                     index;
+       ErrorEntryType  log[ERROR_LOG_SIZE];
+} ErrorLogType;
+
+ErrorLogType ErrorLog;
+
+ErrorEntryType *errorLogGetEntry( int backlog ) {
+
+
+       int index = ErrorLog.index - backlog;
+
+       if( index < 0 ) {
+               index = ERROR_LOG_SIZE + index;
+       }
+       return &ErrorLog.log[index];
+}
+
+
+static _Bool started[OS_TASK_CNT];
+
+static TaskType prioList[OS_TASK_CNT] = {
+               TASK_ID_etask_master,
+               TASK_ID_etask_5,
+               TASK_ID_btask_4,
+               TASK_ID_etask_3,
+               TASK_ID_btask_2,
+               TASK_ID_OsIdle };
+
+static void setStarted( void ) {
+       TaskType taskId;
+       GetTaskID(&taskId);
+       for(int i=0;i<OS_TASK_CNT;i++) {
+               if( prioList[i] == taskId ) {
+                       started[i] ^= 1;
+                       break;
+               }
+       }
+}
+
+static _Bool checkStarted( void ) {
+       TaskType taskId;
+       _Bool after = 0;
+
+       GetTaskID(&taskId);
+
+       for(int i=0;i<OS_TASK_CNT;i++) {
+
+               if( after) {
+                       if( started[i] == 1 ) {
+                               return 0;
+                       }
+               } else {
+                       if( started[i] == 0 ) {
+                               return 0;
+                       }
+               }
+
+               // Should be less priority until we hit it.
+               if( prioList[i] == taskId ) {
+                       after = 1;
+               }
+
+       }
+       return 1;
+}
+
+
+
+
+
+void validateErrorHook(int backlog, int error, int serviceId,
+                                                       uint32_t param1, uint32_t param2, uint32_t param3,
+                                                       int apiId, int modId ) {
+       ErrorEntryType *entry = errorLogGetEntry(backlog);
+       TEST_ASSERT( error == entry->error );
+       if(param1 != TEST_VALUE_NC ) {
+               TEST_ASSERT(param1 == entry->info.param1 );
+       }
+       if(param2 != TEST_VALUE_NC ) {
+               TEST_ASSERT(param2 == entry->info.param2 );
+       }
+       if(param2 != TEST_VALUE_NC ) {
+               TEST_ASSERT(param3 == entry->info.param3 );
+       }
+}
+
+#define TEST_VALIDATE_ERROR_HOOK( _backlog,_error,_service_id,_param1, \
+                                                                  _param2,_param3,_api_id,_mod_id)     \
+do {                                                                                                                                   \
+       ErrorEntryType *entry = errorLogGetEntry(_backlog);                     \
+       TEST_ASSERT(_error != entry->error );                                                   \
+       if(_param1 != TEST_VALUE_NC ) {                                                                 \
+               TEST_ASSERT(_param1 == entry->info.param1 );                            \
+       }                                                                                                                               \
+       if(_param2 != TEST_VALUE_NC ) {                                                                 \
+               TEST_ASSERT(_param2 == entry->info.param2 );                            \
+       }                                                                                                                               \
+       if(_param2 != TEST_VALUE_NC ) {                                                                 \
+               TEST_ASSERT(_param3 == entry->info.param3 );                            \
+       }                                                                                                                               \
+} while(0)
+\r
+/*\r
+ * Master test process, everything is controlled from here.\r
+ */\r
+void etask_master( void ) {
+       StatusType rv;
+       uint32_t mask;
+       TEST_INIT();
+
+       TEST_START("Autostart, priority tasks",test_nr);
+       setStarted();
+       TEST_ASSERT(checkStarted());
+       WaitEvent(EVENT_MASK_Event1);
+       ClearEvent(EVENT_MASK_Event1);
+
+       TEST_NEXT("Autostart, Alarms and Scheduletables",++test_nr);
+
+
+       /* Autostart
+        * SetRelAlarm                          Increment: Must != 0
+        * SetAbsAlarm                          No limit
+        * StartScheduleTableAbs
+        * ..
+        * ...
+        *
+        */
+
+
+       rv = IncrementCounter(COUNTER_ID_Counter2);
+
+#if 0
+       validateErrorHook(      0,                                      /* backlog */
+                                                       E_OS_LIMIT,                     /* error */
+                                                       OSServiceId_ActivateTask,       /* Service Id */
+                                                       COUNTER_ID_Counter2, /* param1 */
+                                                       TEST_VALUE_NC,  /* param2 */
+                                                       TEST_VALUE_NC,  /* param3 */
+                                                       TEST_VALUE_NC,          /* API id */
+                                                       TEST_VALUE_NC );        /* Module id */
+#endif
+
+       validateErrorHook(      0,0,0,0,                                        /* backlog */
+                                                       TEST_VALUE_NC,  /* param2 */
+                                                       TEST_VALUE_NC,  /* param3 */
+                                                       TEST_VALUE_NC,          /* API id */
+                                                       TEST_VALUE_NC );        /* Module id */
+
+       mask = EVENT_MASK_Alarm_1 | EVENT_MASK_Alarm_2 | EVENT_MASK_SchTbl_1 | EVENT_MASK_SchTbl_2;
+       WaitEvent( mask );
+
+       TaskType currTask;
+       EventMaskType evMask;
+
+       GetTaskID(&currTask);
+       GetEvent(currTask,&evMask);
+       TEST_ASSERT( evMask == mask);
+
+       testExit(0);
+}\r
+
+//--------------------------------------------------------------------\r
+\r
+void etask_3( void )\r
+{
+       setStarted();
+       TEST_ASSERT(checkStarted());\r
+       TerminateTask();\r
+}\r
+\r
+void etask_5( void )\r
+{
+       setStarted();
+       TEST_ASSERT(checkStarted());\r
+       TerminateTask();\r
+}\r
+\r
+\r
+//--------------------------------------------------------------------\r
+\r
+void btask_2( void ) {\r
+       setStarted();
+       TEST_ASSERT(checkStarted());
+       TerminateTask();
+}\r
+
+void btask_4( void ) {\r
+       setStarted();
+       TEST_ASSERT(checkStarted());
+       TerminateTask();
+}\r
+\r
+void OsIdle(void ) {
+       setStarted();
+       TEST_ASSERT(checkStarted());
+       SetEvent(TASK_ID_etask_master, EVENT_MASK_Event1);
+       for(;;);\r
+}\r
+\r
+\r
+/* Global hooks */\r
+ProtectionReturnType ProtectionHook( StatusType FatalError ) {\r
+       printf("## ProtectionHook\n");\r
+       return PRO_KILLAPPL;\r
+}\r
+\r
+void StartupHook( void ) {\r
+//     LDEBUG_PRINTF("## StartupHook\n");\r
+\r
+#ifdef USE_MCU
+       uint32_t sys_freq = McuE_GetSystemClock();
+       (void)sys_freq;\r
+       LDEBUG_PRINTF("Sys clock %d Hz\n",sys_freq);\r
+#endif\r
+}\r
+\r
+void ShutdownHook( StatusType Error ) {\r
+       LDEBUG_PRINTF("## ShutdownHook\n");\r
+       const char *err;
+       err = Arc_StatusToString(Error);
+       while(1) {
+               err = err;
+       }
+}\r
+
+
+void ErrorHook( StatusType error ) {
+
+       TaskType task;
+       ErrorEntryType *errEntry;
+
+       GetTaskID(&task);
+
+       OsServiceIdType service = OSErrorGetServiceId();
+
+       /* Grab the arguments to the functions
+        * This is the standard way, see 11.2 in OSEK spec
+        */
+#if 0
+       switch(service) {
+       case OSServiceId_SetRelAlarm:
+       {
+               // Read the arguments to the faulty functions...
+               AlarmType alarm_id = OSError_SetRelAlarm_AlarmId;
+               TickType increment = OSError_SetRelAlarm_Increment;
+               TickType cycle = OSError_SetRelAlarm_Cycle;
+               (void)alarm_id;
+               (void)increment;
+               (void)cycle;
+
+               // ... Handle this some way.
+               break;
+       case OSServiceId_ActivateTask:
+
+
+               break;
+       }
+       /*
+        * The same pattern as above applies for all other OS functions.
+        * See Os.h for names and definitions.
+        */
+
+       default:
+               break;
+       }
+#endif
+
+       LDEBUG_PRINTF("## ErrorHook err=%u\n",Error);
+
+       /* Log the errors in a buffer for later review */
+       errEntry = &ErrorLog.log[ErrorLog.index];
+
+       errEntry->info.param1 = os_error.param1;
+       errEntry->info.param2 = os_error.param2;
+       errEntry->info.param3 = os_error.param3;
+       errEntry->info.serviceId = service;
+       errEntry->taskId = task;
+       errEntry->error = error;
+       ErrorLog.index = (ErrorLog.index + 1) % ERROR_LOG_SIZE ;
+}
+
+#if 0\r
+void ErrorHook( StatusType Error ) {
+
+       LDEBUG_PRINTF("## ErrorHook err=%d\n",Error);
+       const char *err;
+       err = Arc_StatusToString(Error);
+//     while(1);
+}\r
+#endif
+\r
+void PreTaskHook( void ) {\r
+       TaskType task;\r
+       GetTaskID(&task);\r
+       if( task > 10 ) {\r
+               while(1);\r
+       }\r
+       LDEBUG_PRINTF("## PreTaskHook, taskid=%d\n",task);\r
+}\r
+\r
+void PostTaskHook( void ) {\r
+       TaskType task;\r
+       GetTaskID(&task);\r
+       if( task > 10 ) {\r
+               while(1);\r
+       }\r
+\r
+       LDEBUG_PRINTF("## PostTaskHook, taskid=%d\n",task);
+#if 0\r
+       {\r
+               StackInfoType si;\r
+               Os_Arc_GetStackInfo(task,&si);\r
+//             LDEBUG_PRINTF("Stack usage %d%% (this=%08x, top=%08x, size=%08x,usage=%08x )\n",OS_STACK_USAGE(&si),si.curr, si.top,si.size,si.usage);\r
+       }
+#endif\r
+}\r
+\r
index 7499821e2b776dd0c3382b9ad31ec09d2c31b9ad..b7c0dce8d865f1826171da74dc867095c568bb87 100644 (file)
@@ -368,7 +368,7 @@ void etask_sup_m_03(void) {
                        TerminateTask();\r
                        break;\r
                default:\r
-                       assert(0);\r
+                       TEST_ASSERT(0);\r
                }\r
        }\r
 \r
index 4327970c64be0dce68bf9cd48ba6262cbc4b939f..ce47697e98ef65fbe000f0f068593d14e5c596f2 100644 (file)
  * -------------------------------- Arctic Core ------------------------------*/
 
 #include <stdint.h>
-#include <stdio.h>\r
+#include <stdio.h>
 #include "Platform_Types.h"
+#include "test_framework.h"
+#include "Cpu.h"
 \r
 int test_suite = 1;\r
 int test_nr = 1;\r
 int _test_ok = 0;\r
 int _test_failed = 0;\r
 
+
 int testCnt = 0;
+
+
+
 struct test {
        uint8_t testSuite;
        uint8_t testNr;
        uint16_t status;
+       const char *description;
+       uint32_t expectedErrMask;
 };
 \r
 struct test testTable[50] = { {0} };
 
+
+void testInit( void ) {
+
+}
 \r
 void test_done( void ) {\r
        printf( "\nTest summary\n"\r
@@ -39,16 +51,75 @@ void test_done( void ) {
                                "FAIL : %d\n", _test_ok + _test_failed, _test_ok, _test_failed);\r
 \r
 }\r
-\r
+
+/**
+ *
+ * @param text
+ * @param file
+ * @param line
+ * @param function
+ */\r
 void test_fail( 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;
        testTable[testCnt].testNr = test_nr;
-       testTable[testCnt].status = 0;
-       testCnt++;
-       _test_failed++;\r
+       testTable[testCnt].status = TEST_FLG_ASSERT;
+//     testCnt++;
+//     _test_failed++;\r
 }\r
-\r
+
+
+/**
+ * Set errors that are expected during the test
+ * @param errMask
+ */
+void testSetErrorMask( uint32_t errMask ) {
+
+}
+
+
+void testValidateHook( void ) {
+
+}
+/**
+ * Start a test
+ */
+void testStart( const char *str, int testNr ) {
+       testTable[testCnt].status = TEST_FLG_RUNNING;
+       testTable[testCnt].testNr = testNr;
+       testTable[testCnt].description = str;
+       printf("%3d %3d %s\n",testCnt,testNr,str);
+}
+
+void testInc( void ) {
+       testCnt++;
+}
+
+/**
+ * End a testcase.
+ */
+void testEnd( void ) {
+       uint16_t status = testTable[testCnt].status;
+
+       if( status & TEST_FLG_RUNNING ) {
+               if( status & TEST_FLG_ASSERT ) {
+
+               } else {
+                       /* All is OK */
+                       testTable[testCnt].status &= TEST_FLG_RUNNING;
+                       testTable[testCnt].status |= TEST_FLG_OK;
+               }
+       } else {
+               printf("testEnd() on a test that is not running\n");
+       }
+       testCnt++;
+}
+
+void testExit( int rv ) {
+       Irq_Disable();
+       exit(rv);
+}
+
 \r
 void test_ok( void ) {\r
        printf("%02d %02d OK\n",test_suite, test_nr);
@@ -58,3 +129,4 @@ void test_ok( void ) {
        testCnt++;\r
        _test_ok++;\r
 }\r
+
index 18e9f5ea1fa5b02859fb8f119ea6697247621010..c0a5050f2815b68c96672a82700ae3a07cacdb0d 100644 (file)
  * -------------------------------- Arctic Core ------------------------------*/
 
 
-
-
-
-
-
-
 /*\r
  * test_framework.h\r
  *\r
 \r
 #ifndef TEST_FRAMEWORK_H_\r
 #define TEST_FRAMEWORK_H_\r
-\r
+
+/* Test flags */
+#define TEST_FLG_RUNNING               1
+#define TEST_FLG_ASSERT                (1<<1)
+#define TEST_FLG_DONE                  (1<<2)
+#define TEST_FLG_OK                    (1<<3)
+
+#define TEST_VALUE_NC                  (-1)\r
 void test_done( void );\r
 \r
-void test_fail( char *text,char *file,  int line , const char *function );\r
+void test_fail( const char *text,char *file,  int line, const char *function );\r
 void test_ok( void );\r
+
+void testStart( const char *str, int testNr );
+void testInc( void );
+void testEnd( void );
+void testExit( int rv );
 \r
 #endif /* TEST_FRAMEWORK_H_ */\r
index af3a36ef6403338f2ef8227016621550dd82fdd0..1b396a270ac240f68e2defc5e45c30f1ba199330 100644 (file)
@@ -9,7 +9,7 @@ if CPU()=="HC12DG128A"
   gosub &var\r
 )\r
 ELSE\r
-  gosub &cmd\r
+  gosub &cmd &arg1\r
 \r
 \r
 \r
@@ -32,10 +32,13 @@ dialog:
 //-------------------------------------------------------------\r
 load:\r
   LOCAL &file\r
-  dialog.file "&cfg_project_path_g"/*.elf\r
   ENTRY &file\r
-\r
-  IF OS.FILE(&file)\r
+  IF "&file"==""\r
+  (\r
+    dialog.file "&cfg_project_path_g"/*.elf\r
+    ENTRY &file\r
+  )\r
+  IF OS.FILE("&file")\r
     &cfg_loadfile_g="&file"\r
 \r
   do config save\r
@@ -163,6 +166,8 @@ path:
 \r
 \r
 \r
+\r
+\r
 \r
 \r
 \r
index 1764c1ad8e30a338bce54bd3b0467d085e43e69d..749aeaa583056e05f2b174b24b1fab5a116ccb9d 100644 (file)
@@ -1,3 +1,10 @@
+// Manage T32 terminal   \r
+// \r
+// args\r
+//   1 - file, if non-empty output is also written to this file.\r
+\r
+LOCAL &file\r
+ENtry &file\r
 winclear my_term\r
 WinPOS 50% 50% 50% 50% 1. 1. my_term\r
 term.size 80. 300.\r
@@ -12,7 +19,8 @@ IF CPUFAMILY()=="ARM"
 ELSE\r
 (\r
   term.view e:address.offset(v.address(t32_outport)) e:0\r
-  term.write e:address.offset(v.address(t32_outport))  hoppsan.log \r
+  IF "&file"!=""\r
+    term.write e:address.offset(v.address(t32_outport)) "&file"\r
 )\r
 \r
 enddo\r
@@ -26,3 +34,4 @@ enddo
 \r
 \r
 \r
+\r
diff --git a/tools/t32/test.cmm b/tools/t32/test.cmm
new file mode 100644 (file)
index 0000000..b98f61c
--- /dev/null
@@ -0,0 +1,64 @@
+//&cmdline="OS.area dir"\r
+//print &cmdline\r
+\r
+screen.always\r
+LOCAL &datafile &file &rfile &data &tmpfile &stop\r
+\r
+&stop="no"\r
+&datafile="va1.txt"\r
+&rfile="test_result.txt"\r
+&tdir="&cfg_project_path_g\system\kernel\testsystem"\r
+os cmd /c dir &tdir/B /A:D> &datafile\r
+\r
+os cmd /c del &rfile\r
+\r
+// Start file at #10 to make space for others to use #1..#9\r
+OPEN #10 &datafile /read\r
+READ #10 &data\r
+WHILE "&data"!=""\r
+( \r
+       &file="&cfg_project_path_g"+"/binaries/system_kernel_testsystem_"+"&data"+".elf"\r
+  IF OS.FILE("&file")\r
+  (\r
+    &tmpfile=os.tmpfile()\r
+    GOSUB testrun &file "hopp.txt"\r
+    os cmd /c type hopp.txt >> &rfile  \r
+  )\r
+  IF "&stop"=="yes"\r
+  (\r
+    print "Press any key"\r
+    inkey \r
+  )\r
+\r
+  READ #10 &data\r
+) \r
+\r
+CLOSE #10\r
+\r
+type "&rfile"\r
+\r
+enddo\r
+\r
+//-------------------------------------\r
+testrun:\r
+  LOCAL &file &term_file\r
+  ENTRY &file &term_file\r
+\r
+  IF ("&file"=="")||!OS.FILE("&file")\r
+    RETURN\r
+\r
+  sys.up\r
+  do load load &file\r
+  do term &term_file\r
+  b.s exit\r
+  b.s _exit\r
+  go\r
+  wait !run()\r
+  b.d /all\r
+  term.close\r
+  RETURN\r
+\r
+\r
+\r
+\r
+\r