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
#endif
}
\r
-os_error_t os_error;\r
+OsErrorType os_error;\r
\r
//-------------------------------------------------------------------\r
\r
\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
\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
* 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
\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
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;
/** @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 );
}
\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
*
*
* 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
*
*
* 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
*/
* 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
*
*
* 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
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
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
\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
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
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
\r
};\r
\r
-GEN_SCHTBL_AUTOSTART(\r
- 0,\r
- SCHTBL_AUTOSTART_ABSOLUTE,\r
- 1, \r
- OSDEFAULTAPPMODE\r
-);\r
\r
// Table data 1\r
\r
COUNTER_ID_soft_1,\r
SINGLE_SHOT,\r
15,\r
- GEN_SCHTBL_AUTOSTART_NAME(0)\r
+ NULL\r
),\r
GEN_SCHEDULETABLE(\r
1,\r
*
*
* 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
\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
--- /dev/null
+\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
</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
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
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
#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
--- /dev/null
+/* -------------------------------- 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
*
*
* 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
// ################################# 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
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
\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
*
*
* 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
--- /dev/null
+\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
</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
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
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
--- /dev/null
+/* -------------------------------- 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
TerminateTask();\r
break;\r
default:\r
- assert(0);\r
+ TEST_ASSERT(0);\r
}\r
}\r
\r
* -------------------------------- 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
"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);
testCnt++;\r
_test_ok++;\r
}\r
+
* -------------------------------- 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
gosub &var\r
)\r
ELSE\r
- gosub &cmd\r
+ gosub &cmd &arg1\r
\r
\r
\r
//-------------------------------------------------------------\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
\r
\r
\r
+\r
+\r
\r
\r
\r
+// 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
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
\r
\r
\r
+\r
--- /dev/null
+//&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