]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Added kernel_extra example. Added CW support again.
authormahi <devnull@localhost>
Wed, 16 Mar 2011 14:15:27 +0000 (15:15 +0100)
committermahi <devnull@localhost>
Wed, 16 Mar 2011 14:15:27 +0000 (15:15 +0100)
19 files changed:
boards/board_common.mk
boards/mpc551xsim/build_config.mk
boards/mpc551xsim/examples/kernel_extra/Os_Cfg.c [new file with mode: 0644]
boards/mpc551xsim/examples/kernel_extra/Os_Cfg.h [new file with mode: 0644]
boards/mpc551xsim/examples/kernel_extra/build_config.mk [new file with mode: 0644]
boards/mpc551xsim/examples/kernel_extra/example_info.txt [new file with mode: 0644]
boards/mpc551xsim/examples/kernel_extra/kernel_extra.arxml [new file with mode: 0644]
boards/mpc551xsim/examples/kernel_extra/kernel_extra.c [new file with mode: 0644]
boards/mpc551xsim/examples/kernel_extra/makefile [new file with mode: 0644]
common/msl_port.c
examples/system_hooks.c [new file with mode: 0644]
include/Compiler.h
include/irq.h
include/os_config_macros.h
include/sys/queue.h [new file with mode: 0644]
scripts/cc_cw.mk
scripts/rules.mk
system/kernel/isr.c
system/kernel/semaphore.c

index 2e6efe27c941918e0a16b34c7769c38e3950450b..90ea782adee278015cb6dcade62a10f007165a0a 100644 (file)
@@ -275,8 +275,8 @@ vpath-y += $(ROOTDIR)/diagnostic/Det
 \r
 # include files need by us\r
 inc-y += $(ROOTDIR)/include\r
-inc-y += $(ROOTDIR)/kernel/test\r
-inc-y += $(ROOTDIR)/kernel/include\r
+inc-y += $(ROOTDIR)/system/kernel/test\r
+inc-y += $(ROOTDIR)/system/kernel/include\r
 inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/kernel\r
 inc-y += $(ROOTDIR)/$(ARCH_PATH-y)/drivers\r
 inc-y += $(ROOTDIR)/boards/$(BOARDDIR)/config\r
index cef39fdb4eadfbe591e3ef4502fa589f4553a280..c315086f55d086cb34db503a51583c84cc0f0187 100644 (file)
@@ -13,6 +13,6 @@ CFG=PPC BOOKE E200Z1 MPC55XX MPC5516 BRD_MPC551XSIM SIMULATOR
 # Memory + Peripherals\r
 MOD_AVAIL+=ADC DIO DMA CAN GPT LIN MCU PORT PWM WDG    \r
 # System + Communication + Diagnostic\r
-MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE\r
+MOD_AVAIL+=CANIF CANTP COM DCM DEM DET ECUM IOHWAB KERNEL PDUR WDGM RTE KERNEL_EXTRA\r
 # Additional\r
 MOD_AVAIL+=RAMLOG KERNEL_EXTRA\r
diff --git a/boards/mpc551xsim/examples/kernel_extra/Os_Cfg.c b/boards/mpc551xsim/examples/kernel_extra/Os_Cfg.c
new file mode 100644 (file)
index 0000000..a67367b
--- /dev/null
@@ -0,0 +1,190 @@
+/*\r
+* Configuration of module: Os (Os_Cfg.c)\r
+*\r
+* Created by:              \r
+* Copyright:               \r
+*\r
+* Configured for (MCU):    MPC551x\r
+*\r
+* Module vendor:           ArcCore\r
+* Generator version:       2.0.22\r
+*\r
+* Generated by Arctic Studio (http://arccore.com) \r
+*           on Wed Mar 16 09:05:04 CET 2011\r
+*/\r
+\r
+       \r
+\r
+#include <stdlib.h>\r
+#include <stdint.h>\r
+#include "Platform_Types.h"\r
+#include "Os.h"                                // includes Os_Cfg.h\r
+#include "os_config_macros.h"\r
+#include "kernel.h"\r
+//#include "isr.h"\r
+//#include "kernel_offset.h"\r
+#include "alist_i.h"\r
+#include "Mcu.h"\r
+\r
+// ###############################    EXTERNAL REFERENCES    #############################\r
+\r
+/* Application externals */\r
+\r
+/* Interrupt externals */ \r
+void Mcu_LossOfClock ( void );  \r
+void Mcu_LossOfLock ( void );   \r
+void OsTick ( void );  \r
+\r
+\r
+// Set the os tick frequency\r
+OsTickType OsTickFreq = 1000;\r
+\r
+\r
+// ###############################    DEBUG OUTPUT     #############################\r
+uint32 os_dbg_mask = 0;\r
\r
+// ###############################    APPLICATIONS     #############################\r
+GEN_APPLICATION_HEAD = {\r
+       GEN_APPLICATION(\r
+                               /* id           */ APPLICATION_ID_OsApplication1,\r
+                               /* name         */ "OsApplication1",\r
+                               /* trusted      */ true,        /* NOT CONFIGURABLE IN TOOLS */\r
+                               0,\r
+                               /* StartupHook  */ NULL,        /* Startup Hook */\r
+                               /* ShutdownHook */ NULL,        /* Shutdown Hook */\r
+                               /* ErrorHook    */ NULL,        /* Error Hook */\r
+                               /* rstrtTaskId  */ 0    /* NOT CONFIGURABLE IN TOOLS */\r
+                               ),                                      \r
+};\r
+// #################################    COUNTERS     ###############################\r
+GEN_COUNTER_HEAD = {\r
+       GEN_COUNTER(    COUNTER_ID_Counter1,\r
+                                       "Counter1",\r
+                                       COUNTER_TYPE_HARD,\r
+                                       COUNTER_UNIT_NANO,\r
+                                       0xffff,\r
+                                       1,\r
+                                       1,\r
+                                       0,\r
+                                       APPLICATION_ID_OsApplication1,  /* Application owner */\r
+                                       0       /* Accessing application mask */\r
+                               ),\r
+};\r
+\r
+CounterType Os_Arc_OsTickCounter = COUNTER_ID_Counter1;\r
+\r
+// ##################################    ALARMS     ################################\r
+\r
+GEN_ALARM_HEAD = {\r
+       GEN_ALARM(      ALARM_ID_Alarm1,\r
+                               "Alarm1",\r
+                               COUNTER_ID_Counter1,\r
+                               NULL,\r
+                               ALARM_ACTION_ACTIVATETASK,\r
+                               TASK_ID_bTask,\r
+                               NULL,\r
+                               NULL,\r
+                               APPLICATION_ID_OsApplication1,  /* Application owner */\r
+                               0       /* Accessing application mask */\r
+                       ),\r
+};\r
+\r
+// ################################    RESOURCES     ###############################\r
+GEN_RESOURCE_HEAD = {\r
+       GEN_RESOURCE(\r
+               RES_ID_Resource1,\r
+               RESOURCE_TYPE_STANDARD,\r
+               0,\r
+               APPLICATION_ID_OsApplication1,  /* Application owner */\r
+               0       /* Accessing application mask */\r
+       ),\r
+};\r
+\r
+// ##############################    STACKS (TASKS)     ############################\r
+DECLARE_STACK(OsIdle,OS_OSIDLE_STACK_SIZE);\r
+DECLARE_STACK(bTask,512);\r
+DECLARE_STACK(eTask1,512);\r
+\r
+// ##################################    TASKS     #################################\r
+GEN_TASK_HEAD = {\r
+       GEN_ETASK(      OsIdle,\r
+                               "OsIdle",\r
+                               0,\r
+                               FULL,\r
+                               TRUE,\r
+                               NULL,\r
+                               RES_SCHEDULER,\r
+                               0,\r
+                               0 \r
+       ),\r
+       GEN_BTASK(\r
+               /*                              */bTask,\r
+               /* name                 */"bTask",\r
+               /* priority             */31,\r
+               /* schedule             */FULL,\r
+               /* autostart            */FALSE,\r
+               /* resource_int_p   */NULL,\r
+               /* resource mask        */0,\r
+               /* activation lim.      */1,\r
+               /* App owner            */APPLICATION_ID_OsApplication1,\r
+               /* Accessing apps   */0\r
+       ),                      \r
+       GEN_ETASK(\r
+               /*                              */eTask1,\r
+               /* name                 */"eTask1",\r
+               /* priority             */1,\r
+               /* schedule             */FULL,\r
+               /* name                 */TRUE,\r
+               /* resource_int_p   */NULL,\r
+               /* resource mask        */0,\r
+               /* App owner            */APPLICATION_ID_OsApplication1,\r
+               /* Accessing apps   */0\r
+       ),                      \r
+};\r
+\r
+// ##################################    HOOKS     #################################\r
+GEN_HOOKS( \r
+       StartupHook, \r
+       NULL, \r
+       ShutdownHook, \r
+       ErrorHook,\r
+       PreTaskHook, \r
+       PostTaskHook \r
+);\r
+\r
+// ##################################    ISRS     ##################################\r
+GEN_ISR_HEAD = {\r
+       GEN_ISR1(\r
+               /* name      */ "LossOfClock",\r
+               /* vector    */ PLL_SYNSR_LOCF,\r
+               /* priority  */ 5,\r
+               /* entry     */ Mcu_LossOfClock,\r
+               /* appOwner  */ APPLICATION_ID_OsApplication1\r
+       ),\r
+       GEN_ISR1(\r
+               /* name      */ "LossOfLock",\r
+               /* vector    */ PLL_SYNSR_LOLF,\r
+               /* priority  */ 5,\r
+               /* entry     */ Mcu_LossOfLock,\r
+               /* appOwner  */ APPLICATION_ID_OsApplication1\r
+       ),\r
+       GEN_ISR2(\r
+               /* name      */ "TickTrigg",\r
+               /* vector    */ INTC_SSCIR0_CLR7,\r
+               /* priority  */ 6,\r
+               /* entry     */ OsTick,\r
+               /* appOwner  */ APPLICATION_ID_OsApplication1,\r
+               /* rsrcMask  */ 1\r
+       ),\r
+};\r
+\r
+GEN_ISR_MAP = {\r
+  [PLL_SYNSR_LOCF] = 0,\r
+  [PLL_SYNSR_LOLF] = 1,\r
+  [INTC_SSCIR0_CLR7] = 2,\r
+};\r
+\r
+// ############################    SCHEDULE TABLES     #############################\r
+\r
+\r
+#include "os_config_funcs.h"\r
diff --git a/boards/mpc551xsim/examples/kernel_extra/Os_Cfg.h b/boards/mpc551xsim/examples/kernel_extra/Os_Cfg.h
new file mode 100644 (file)
index 0000000..8b32a8c
--- /dev/null
@@ -0,0 +1,104 @@
+/*\r
+* Configuration of module: Os (Os_Cfg.h)\r
+*\r
+* Created by:              \r
+* Copyright:               \r
+*\r
+* Configured for (MCU):    MPC551x\r
+*\r
+* Module vendor:           ArcCore\r
+* Generator version:       2.0.22\r
+*\r
+* Generated by Arctic Studio (http://arccore.com) \r
+*           on Wed Mar 16 09:05:04 CET 2011\r
+*/\r
+\r
+
+#if !(((OS_SW_MAJOR_VERSION == 2) && (OS_SW_MINOR_VERSION == 0)) )
+#error Os: Configuration file expected BSW module version to be 2.0.*
+#endif
+
+\r
+\r
+#ifndef OS_CFG_H_\r
+#define OS_CFG_H_\r
+\r
+// Application Id's\r
+#define APPLICATION_ID_OsApplication1  0\r
+\r
+// Alarm Id's\r
+#define ALARM_ID_Alarm1        0\r
+\r
+// Counter Id's\r
+#define COUNTER_ID_Counter1    0\r
+\r
+// Counter macros\r
+#define OSMAXALLOWEDVALUE_Counter1 65535\r
+\r
+\r
+// Event masks\r
+#define EVENT_MASK_Event1      1\r
+#define EVENT_MASK_Event2      1\r
+\r
+// Isr Id's\r
+#define ISR_ID_LossOfClock     0\r
+#define ISR_ID_LossOfLock      1\r
+#define ISR_ID_TickTrigg       2\r
+\r
+// Resource Id's\r
+#define RES_ID_Resource1       0\r
+\r
+// Linked resource id's\r
+\r
+// Resource masks\r
+#define RES_MASK_Resource1     (1 << 0)\r
+\r
+// Task Id's\r
+#define TASK_ID_OsIdle 0\r
+#define TASK_ID_bTask  1\r
+#define TASK_ID_eTask1 2\r
+\r
+// Task entry points\r
+void OsIdle( void );\r
+void bTask( void );\r
+void eTask1( void );\r
+\r
+// Schedule table id's\r
+\r
+// Stack size\r
+#define OS_INTERRUPT_STACK_SIZE        2048\r
+#define OS_OSIDLE_STACK_SIZE 512\r
+\r
+#define OS_ALARM_CNT                   1 \r
+#define OS_TASK_CNT                            3\r
+#define OS_SCHTBL_CNT                  0\r
+#define OS_COUNTER_CNT                 1\r
+#define OS_EVENTS_CNT                  2\r
+//#define OS_ISRS_CNT                  3\r
+#define OS_RESOURCE_CNT                        1\r
+#define OS_LINKED_RESOURCE_CNT 0\r
+#define OS_APPLICATION_CNT             1\r
+#define OS_SERVICE_CNT                 0  /* ARCTICSTUDIO_GENERATOR_TODO */\r
+#define CFG_OS_DEBUG                           STD_OFF\r
+\r
+#define OS_SC1                                                 STD_ON  /* NOT CONFIGURABLE IN TOOLS */\r
+#define OS_USE_APPLICATIONS                    STD_ON\r
+#define OS_USE_MEMORY_PROT                     STD_OFF /* NOT CONFIGURABLE IN TOOLS */\r
+#define OS_USE_TASK_TIMING_PROT                STD_OFF /* NOT CONFIGURABLE IN TOOLS */\r
+#define OS_USE_ISR_TIMING_PROT         STD_OFF /* NOT CONFIGURABLE IN TOOLS */\r
+//#define OS_SC3                                       STD_ON  /* NOT CONFIGURABLE IN TOOLS */  \r
+#define OS_STACK_MONITORING                    STD_ON\r
+#define OS_STATUS_EXTENDED                     STD_ON\r
+#define OS_USE_GET_SERVICE_ID          STD_ON\r
+#define OS_USE_PARAMETER_ACCESS                STD_ON\r
+#define OS_RES_SCHEDULER                       STD_ON  /* NOT CONFIGURABLE IN TOOLS */\r
+\r
+#define OS_ISR_CNT                     3\r
+#define OS_ISR2_CNT            1\r
+#define OS_ISR1_CNT                    2\r
+\r
+/* New */\r
+#define OS_ISR_MAX_CNT         10      /* NOT CONFIGURABLE IN TOOLS */\r
+\r
+\r
+#endif /*OS_CFG_H_*/\r
diff --git a/boards/mpc551xsim/examples/kernel_extra/build_config.mk b/boards/mpc551xsim/examples/kernel_extra/build_config.mk
new file mode 100644 (file)
index 0000000..5e494fd
--- /dev/null
@@ -0,0 +1,7 @@
+\r
+#-include ../config/*.mk\r
+#-include ../config/$(BOARDDIR)/*.mk\r
+\r
+MOD_USE+= DET ECUM MCU KERNEL RAMLOG KERNEL_EXTRA\r
+\r
+#def-y += NDEBUG\r
diff --git a/boards/mpc551xsim/examples/kernel_extra/example_info.txt b/boards/mpc551xsim/examples/kernel_extra/example_info.txt
new file mode 100644 (file)
index 0000000..6cf7f27
--- /dev/null
@@ -0,0 +1,13 @@
+\r
+Description\r
+  This example contains \r
+  \r
+  \r
+Build\r
+  $ make all\r
+  $ make clean     \r
+  \r
+Configuration\r
+  MOD_USE \r
+    KERNEL_EXTRA\r
+  \r
diff --git a/boards/mpc551xsim/examples/kernel_extra/kernel_extra.arxml b/boards/mpc551xsim/examples/kernel_extra/kernel_extra.arxml
new file mode 100644 (file)
index 0000000..f81beaf
--- /dev/null
@@ -0,0 +1,487 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<AUTOSAR xmlns="http://autosar.org/3.1.4"><TOP-LEVEL-PACKAGES>\r
+    <AR-PACKAGE>\r
+      <SHORT-NAME>kernel_extra</SHORT-NAME>\r
+      <ELEMENTS>\r
+        <ECU-CONFIGURATION UUID="ad96a263-0834-480c-b46e-832d9186cc61">\r
+          <SHORT-NAME>kernel_extra</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <DOC-REVISIONS>\r
+              <DOC-REVISION/>\r
+            </DOC-REVISIONS>\r
+            <SDGS>\r
+              <SDG GID="Arccore::EcuOptions">\r
+                <SD GID="MCU">MPC551x</SD>\r
+                <SD GID="GENDIR">/arc_isr/boards/mpc551xsim/examples/kernel_extra</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <ECU-SW-COMPOSITION-REF DEST="ECU-SW-COMPOSITION">/kernel_extra/SwComposition_kernel_extra</ECU-SW-COMPOSITION-REF>\r
+          <MODULE-REFS>\r
+            <MODULE-REF DEST="MODULE-CONFIGURATION">/kernel_extra/Os</MODULE-REF>\r
+          </MODULE-REFS>\r
+        </ECU-CONFIGURATION>\r
+        <ECU-SW-COMPOSITION UUID="a3f7d24c-8bc0-4a8d-9399-96ba1c2d47e7">\r
+          <SHORT-NAME>SwComposition_kernel_extra</SHORT-NAME>\r
+        </ECU-SW-COMPOSITION>\r
+        <MODULE-CONFIGURATION UUID="c80ec735-bd1e-43cb-aacd-08ea86f95754">\r
+          <SHORT-NAME>Os</SHORT-NAME>\r
+          <ADMIN-DATA>\r
+            <SDGS>\r
+              <SDG/>\r
+              <SDG GID="Arccore::ModuleOptions">\r
+                <SD GID="GENERATE_AND_VALIDATE">true</SD>\r
+                <SD GID="ARCCORE_EDITOR_VERSION">2.0.21</SD>\r
+              </SDG>\r
+            </SDGS>\r
+          </ADMIN-DATA>\r
+          <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Os</DEFINITION-REF>\r
+          <CONTAINERS>\r
+            <CONTAINER UUID="25b1513f-00bf-4816-a6de-01b2523caa1c">\r
+              <SHORT-NAME>OsOS</SHORT-NAME>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsStackMonitoring</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsOS/OsStatus</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseGetServiceId</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseParameterAccess</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsUseResScheduler</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsTickFrequency</DEFINITION-REF>\r
+                  <VALUE>1000</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsInterruptStackSize</DEFINITION-REF>\r
+                  <VALUE>2048</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/OsIdleStackSize</DEFINITION-REF>\r
+                  <VALUE>512</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugTask</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugAlarm</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugResource</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugScheduleTable</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsDebugEvent</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="f0b0df2f-50ec-44b5-9a8b-810bc2e5eba4">\r
+                  <SHORT-NAME>OsHooks</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsOS/OsHooks</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsErrorHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPostTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsPreTaskHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsProtectionHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsShutdownHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/OsHooks/OsStartupHook</DEFINITION-REF>\r
+                      <VALUE>true</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="076873db-78ae-452f-8ec9-cae0e993623b">\r
+              <SHORT-NAME>LossOfLock</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsIsr</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsIsr/OsIsrCategory</DEFINITION-REF>\r
+                  <VALUE>CATEGORY_1</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <STRING-VALUE>\r
+                  <DEFINITION-REF DEST="STRING-PARAM-DEF">/ArcCore/Os/OsIsr/ArcOsIsrVector</DEFINITION-REF>\r
+                  <VALUE>PLL_SYNSR_LOLF</VALUE>\r
+                </STRING-VALUE>\r
+                <FUNCTION-NAME-VALUE>\r
+                  <DEFINITION-REF DEST="FUNCTION-NAME-DEF">/ArcCore/Os/OsIsr/ArcOsIsrCallbackName</DEFINITION-REF>\r
+                  <VALUE>Mcu_LossOfLock</VALUE>\r
+                </FUNCTION-NAME-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsIsr/ArcOsIsrPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="24e4a9f5-eed9-44ad-89e5-6c1f5b4b7916">\r
+              <SHORT-NAME>eTask1</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsTask</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskActivation</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskPriority</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskProcessType</DEFINITION-REF>\r
+                  <VALUE>EXTENDED</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsTask/ArcCoreOsTaskStackSize</DEFINITION-REF>\r
+                  <VALUE>512</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskEventRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/Event1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="af432d94-b402-4f37-933e-eaa34a2e96e8">\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="c94e57bb-5ea5-4a4b-9e00-c07eb18ead9e">\r
+              <SHORT-NAME>Alarm1</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm</DEFINITION-REF>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/Counter1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="cc6befc5-4457-4424-b0ef-38c5a69746ab">\r
+                  <SHORT-NAME>OsAlarmAction</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="CHOICE-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction</DEFINITION-REF>\r
+                  <SUB-CONTAINERS>\r
+                    <CONTAINER UUID="5fe22d8a-873d-411c-b74b-603edd5e0e02">\r
+                      <SHORT-NAME>OsAlarmActivateTask</SHORT-NAME>\r
+                      <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask</DEFINITION-REF>\r
+                      <REFERENCE-VALUES>\r
+                        <REFERENCE-VALUE>\r
+                          <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask/OsAlarmActivateTaskRef</DEFINITION-REF>\r
+                          <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/bTask</VALUE-REF>\r
+                        </REFERENCE-VALUE>\r
+                      </REFERENCE-VALUES>\r
+                    </CONTAINER>\r
+                  </SUB-CONTAINERS>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="40360fe9-b73a-4b08-a467-7ce88fb1c3f8">\r
+              <SHORT-NAME>Counter1</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsCounter</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMaxAllowedValue</DEFINITION-REF>\r
+                  <VALUE>65535</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterMinCycle</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterTicksPerBase</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsCounter/OsCounterType</DEFINITION-REF>\r
+                  <VALUE>OS_TICK</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="1966361f-ec07-42f9-8df3-2b967fac828d">\r
+              <SHORT-NAME>Event1</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\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="3602409e-1b1a-4c75-bf15-45449d37570f">\r
+              <SHORT-NAME>LossOfClock</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsIsr</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsIsr/OsIsrCategory</DEFINITION-REF>\r
+                  <VALUE>CATEGORY_1</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <STRING-VALUE>\r
+                  <DEFINITION-REF DEST="STRING-PARAM-DEF">/ArcCore/Os/OsIsr/ArcOsIsrVector</DEFINITION-REF>\r
+                  <VALUE>PLL_SYNSR_LOCF</VALUE>\r
+                </STRING-VALUE>\r
+                <FUNCTION-NAME-VALUE>\r
+                  <DEFINITION-REF DEST="FUNCTION-NAME-DEF">/ArcCore/Os/OsIsr/ArcOsIsrCallbackName</DEFINITION-REF>\r
+                  <VALUE>Mcu_LossOfClock</VALUE>\r
+                </FUNCTION-NAME-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsIsr/ArcOsIsrPriority</DEFINITION-REF>\r
+                  <VALUE>5</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="e27bed6c-e4f2-44fb-8159-78f756a9b02d">\r
+              <SHORT-NAME>bTask</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\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>31</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>512</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskSchedule</DEFINITION-REF>\r
+                  <VALUE>FULL</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskEventRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/Event2</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsTask/OsTaskEventRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/Event1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="212195da-8620-4a46-acf2-927579824874">\r
+              <SHORT-NAME>Event2</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\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="fb419017-ef2b-4217-b417-098a2317e6b0">\r
+              <SHORT-NAME>TickTrigg</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsIsr</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsIsr/OsIsrCategory</DEFINITION-REF>\r
+                  <VALUE>CATEGORY_2</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <STRING-VALUE>\r
+                  <DEFINITION-REF DEST="STRING-PARAM-DEF">/ArcCore/Os/OsIsr/ArcOsIsrVector</DEFINITION-REF>\r
+                  <VALUE>INTC_SSCIR0_CLR7</VALUE>\r
+                </STRING-VALUE>\r
+                <FUNCTION-NAME-VALUE>\r
+                  <DEFINITION-REF DEST="FUNCTION-NAME-DEF">/ArcCore/Os/OsIsr/ArcOsIsrCallbackName</DEFINITION-REF>\r
+                  <VALUE>OsTick</VALUE>\r
+                </FUNCTION-NAME-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsIsr/ArcOsIsrPriority</DEFINITION-REF>\r
+                  <VALUE>6</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsIsr/OsIsrResourceRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/Resource1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="13f66a91-00fc-410b-b96d-1daee07c2105">\r
+              <SHORT-NAME>Resource1</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsResource</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/Os/OsResource/OsResourceProperty</DEFINITION-REF>\r
+                  <VALUE>STANDARD</VALUE>\r
+                </ENUMERATION-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="8f78c304-1b14-49bd-9558-45d872e32f6e">\r
+              <SHORT-NAME>OsApplication1</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions"/>\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsApplication</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsApplication/ArcOsAppCoreId</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsApplication/OsTrusted</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <REFERENCE-VALUES>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsApplication/OsAppAlarmRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/Alarm1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsApplication/OsAppCounterRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/Counter1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsApplication/OsAppIsrRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/LossOfLock</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsApplication/OsAppIsrRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/LossOfClock</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsApplication/OsAppIsrRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/TickTrigg</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsApplication/OsAppResourceRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/Resource1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsApplication/OsAppTaskRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/eTask1</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+                <REFERENCE-VALUE>\r
+                  <DEFINITION-REF DEST="REFERENCE-PARAM-DEF">/ArcCore/Os/OsApplication/OsAppTaskRef</DEFINITION-REF>\r
+                  <VALUE-REF DEST="CONTAINER">/kernel_extra/Os/bTask</VALUE-REF>\r
+                </REFERENCE-VALUE>\r
+              </REFERENCE-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="d6e63578-f9cd-4e04-ad26-84b84eee26e9">\r
+                  <SHORT-NAME>OsApplicationHooks</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Os/OsApplication/OsApplicationHooks</DEFINITION-REF>\r
+                  <PARAMETER-VALUES>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsApplication/OsApplicationHooks/OsAppErrorHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsApplication/OsApplicationHooks/OsAppShutdownHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                    <BOOLEAN-VALUE>\r
+                      <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsApplication/OsApplicationHooks/OsAppStartupHook</DEFINITION-REF>\r
+                      <VALUE>false</VALUE>\r
+                    </BOOLEAN-VALUE>\r
+                  </PARAMETER-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
+          </CONTAINERS>\r
+        </MODULE-CONFIGURATION>\r
+      </ELEMENTS>\r
+    </AR-PACKAGE>\r
+  </TOP-LEVEL-PACKAGES></AUTOSAR>\r
diff --git a/boards/mpc551xsim/examples/kernel_extra/kernel_extra.c b/boards/mpc551xsim/examples/kernel_extra/kernel_extra.c
new file mode 100644 (file)
index 0000000..69756d2
--- /dev/null
@@ -0,0 +1,108 @@
+/*\r
+ * kernel_extra.c\r
+ *\r
+ *  Created on: 13 mar 2011\r
+ *      Author: mahi\r
+ *\r
+ * DESCRIPTION\r
+ *  Shows the features of KERNEL_EXTRA\r
+ *\r
+ */\r
+\r
+#include "Os.h"\r
+#include "isr.h"\r
+#include "irq.h"\r
+#include <stdio.h>\r
+\r
+OsMutexType mutex;\r
+OsSemaphoreType semIsr;\r
+\r
+static int state = 0;\r
+\r
+/**\r
+ * Function that prints str to stdout and can activate\r
+ * another task if interrupt is set.\r
+ *\r
+ * @param interrupt  true if a call to ActivateTask() should be done\r
+ * @param str        The string tp print\r
+ */\r
+\r
+void mutexPrint( bool interrupt, char *str ) {\r
+       WaitMutex(&mutex);\r
+       if( interrupt ) {\r
+               ActivateTask(TASK_ID_bTask);\r
+       }\r
+       printf("Mutex protected: %s\n",str);\r
+       ReleaseMutex(&mutex);\r
+}\r
+\r
+void resourcePrint( bool interrupt, char *str ) {\r
+       GetResource(RES_ID_Resource1);\r
+       if( interrupt ) {\r
+               ActivateTask(TASK_ID_bTask);\r
+       }\r
+       printf("Mutex protected: %s\n",str);\r
+       ReleaseResource(RES_ID_Resource1);\r
+}\r
+\r
+\r
+void bTask( void ) {\r
+\r
+       switch(state) {\r
+       case 0:\r
+               SignalSemaphore(&semIsr);\r
+               break;\r
+       case 1:\r
+               mutexPrint(false, "from bTask");\r
+               break;\r
+       case 2:\r
+               resourcePrint(false,"from bTask");\r
+               break;\r
+       default:\r
+               assert(0);\r
+       }\r
+\r
+       TerminateTask();\r
+}\r
+\r
+\r
+void eTask1( void ) {\r
+\r
+       for(;;) {\r
+\r
+               /*\r
+                * Example: Use SignalSemaphore() and WaitSemaphore()\r
+                */\r
+\r
+               state = 0;\r
+               /* Trigger bTaskSem that calls SignalSemaphore */\r
+               SetRelAlarm(ALARM_ID_Alarm1,2,0);\r
+               WaitSemaphore(&semIsr, TICK_MAX);\r
+\r
+               /*\r
+                * Example: Use a shared resource that is protected with\r
+                *          WaitMutex() and  ReleaseMutex()\r
+                */\r
+               state = 1;\r
+               mutexPrint( true,"from eTask1");\r
+\r
+\r
+               /*\r
+                * Example: Traditional GetResource() and ReleaseResource() calls\r
+                */\r
+               state = 2;\r
+               resourcePrint( true,"from eTask1");\r
+\r
+\r
+               /* OSEK resources */\r
+               GetResource(RES_ID_Resource1);\r
+               Irq_GenerateSoftInt(5);\r
+               ReleaseResource(RES_ID_Resource1);\r
+\r
+       }\r
+}\r
+\r
+void OsIdle( void ) {\r
+       for(;;);\r
+}\r
+\r
diff --git a/boards/mpc551xsim/examples/kernel_extra/makefile b/boards/mpc551xsim/examples/kernel_extra/makefile
new file mode 100644 (file)
index 0000000..3c38215
--- /dev/null
@@ -0,0 +1,45 @@
+\r
+\r
+\r
+export CROSS_COMPILE=/opt/powerpc-eabispe/bin/powerpc-eabispe-\r
+\r
+root_path=$(abspath $(CURDIR)/../../../..)\r
+board_path=$(abspath $(CURDIR)/../..)\r
+\r
+ifeq (${MAKELEVEL},0)\r
+boarddir=$(subst $(root_path)/boards/,,$(board_path))\r
+\r
+.PHONY: all clean\r
+all:\r
+       $(Q)$(MAKE) -C $(root_path) BOARDDIR=$(boarddir) BDIR=$(CURDIR) all\r
+       \r
+clean: \r
+       @echo Cleaning dir $(boarddir) \r
+       $(Q)rm -rf obj_$(boarddir)\r
+       @echo done!\r
+\r
+export example:=$(subst $(abspath $(CURDIR)/..)/,,$(CURDIR))\r
+#$(error $(example))\r
+       \r
+else\r
+VPATH += ..\r
+VPATH += $(ROOTDIR)/examples\r
+inc-y += ..\r
+\r
+# Board object files\r
+obj-y += system_hooks.o\r
+obj-y += kernel_extra.o\r
+\r
+include $(ROOTDIR)/boards/board_common.mk\r
+       \r
+ldcmdfile-y = linkscript_$(COMPILER).lcf\r
+vpath %.ldf $(ROOTDIR)/$(ARCH_PATH-y)/scripts\r
+       \r
+# What I want to build\r
+build-exe-y = $(example).elf\r
+\r
+\r
+endif\r
+\r
+        \r
+\r
index 4bf3dbca13a7574cf6c5f582cf5bd83d9f14c4ec..fdd8b9dc99ff18b7508388dbd5bb6ca25a487dd8 100644 (file)
@@ -57,6 +57,7 @@ void exit(int exit ) {
 \r
 void *sbrk(int inc )\r
 {\r
+       (void)inc;\r
        /* We use our own malloc */\r
        return (void *)(-1);\r
 }\r
diff --git a/examples/system_hooks.c b/examples/system_hooks.c
new file mode 100644 (file)
index 0000000..b489959
--- /dev/null
@@ -0,0 +1,193 @@
+\r
+/* -------------------------------- Arctic Core ------------------------------\r
+ * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
+ *\r
+ * Copyright (C) 2009  ArcCore AB <contact@arccore.com>\r
+ *\r
+ * This source code is free software; you can redistribute it and/or modify it\r
+ * under the terms of the GNU General Public License version 2 as published by the\r
+ * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\r
+ * for more details.\r
+ * -------------------------------- Arctic Core ------------------------------*/\r
+/*\r
+ * DESCRIPTION\r
+ *   Hold all OSEK system hooks.\r
+ */\r
+\r
+/* ----------------------------[includes]------------------------------------*/\r
+\r
+#include <stdint.h>\r
+#include "Os.h"\r
+#include <assert.h>\r
+\r
+#include "Mcu.h"\r
+\r
+/* ----------------------------[private define]------------------------------*/\r
+#define ERROR_LOG_SIZE 1\r
+\r
+//#define USE_LDEBUG_PRINTF    1\r
+#include "debug.h"\r
+\r
+/* ----------------------------[private macro]-------------------------------*/\r
+\r
+\r
+/* ----------------------------[private typedef]-----------------------------*/\r
+\r
+typedef struct ErrorEntry {\r
+       StatusType              error;\r
+       OsErrorType     info;\r
+       TaskType        taskId;\r
+       OsServiceIdType serviceId;\r
+} ErrorEntryType;\r
+\r
+\r
+typedef struct ErrorLog {\r
+       int                     index;\r
+       ErrorEntryType  log[ERROR_LOG_SIZE];\r
+} ErrorLogType;\r
+\r
+struct LogBad {\r
+       uint32_t param1;\r
+       uint32_t param2;\r
+       uint32_t param3;\r
+       TaskType taskId;\r
+       OsServiceIdType serviceId;\r
+       StatusType error;\r
+} LogBadType;\r
+\r
+\r
+/* ----------------------------[private function prototypes]-----------------*/\r
+/* ----------------------------[private variables]---------------------------*/\r
+ErrorLogType ErrorLog;\r
+/* ----------------------------[private functions]---------------------------*/\r
+/* ----------------------------[public functions]----------------------------*/\r
+\r
+/**\r
+ *
+ * @param FatalError
+ * @return
+ */\r
+ProtectionReturnType ProtectionHook( StatusType FatalError ) {\r
+       printf("## ProtectionHook\n");\r
+       return PRO_KILLAPPL;\r
+}\r
+\r
+/**\r
+ *
+ */\r
+void StartupHook( void ) {\r
+//     LDEBUG_PRINTF("## StartupHook\n");\r
+\r
+       uint32_t sys_freq = McuE_GetSystemClock();\r
+       (void)sys_freq;\r
+       LDEBUG_PRINTF("Sys clock %d Hz\n",sys_freq);\r
+}\r
+\r
+/**\r
+ *
+ * @param Error
+ */\r
+void ShutdownHook( StatusType error ) {\r
+       LDEBUG_FPUTS("## ShutdownHook\n");\r
+       (void)error;\r
+       while(1) {\r
+               //err = err;\r
+               ;\r
+       }\r
+}\r
+\r
+/**\r
+ *
+ * @param error
+ */\r
+void ErrorHook( StatusType error ) {\r
+\r
+       TaskType task;\r
+       static struct LogBad LogBad[ERROR_LOG_SIZE];\r
+       static uint8_t ErrorCount = 0;\r
+\r
+       GetTaskID(&task);\r
+\r
+\r
+       OsServiceIdType service = OSErrorGetServiceId();\r
+\r
+       /* Grab the arguments to the functions\r
+        * This is the standard way, see 11.2 in OSEK spec\r
+        */\r
+       switch(service) {\r
+       case OSServiceId_SetRelAlarm:\r
+       {\r
+               // Read the arguments to the faulty functions...\r
+               AlarmType alarm_id = OSError_SetRelAlarm_AlarmId;\r
+               TickType increment = OSError_SetRelAlarm_Increment;\r
+               TickType cycle = OSError_SetRelAlarm_Cycle;\r
+               (void)alarm_id;\r
+               (void)increment;\r
+               (void)cycle;\r
+\r
+               // ... Handle this some way.\r
+               break;\r
+       }\r
+       /*\r
+        * The same pattern as above applies for all other OS functions.\r
+        * See Os.h for names and definitions.\r
+        */\r
+\r
+       default:\r
+               break;\r
+       }\r
+\r
+       LDEBUG_PRINTF("## ErrorHook err=%u\n",Error);\r
+\r
+       /* Log the errors in a buffer for later review */\r
+       LogBad[ErrorCount].param1 = os_error.param1;\r
+       LogBad[ErrorCount].param2 = os_error.param2;\r
+       LogBad[ErrorCount].param3 = os_error.param3;\r
+       LogBad[ErrorCount].serviceId = service;\r
+       LogBad[ErrorCount].taskId = task;\r
+       LogBad[ErrorCount].error = error;\r
+\r
+       ErrorCount++;\r
+\r
+       // Stall if buffer is full.\r
+       while(ErrorCount >= ERROR_LOG_SIZE);\r
+}\r
+\r
+\r
+/**\r
+ *
+ */\r
+void PreTaskHook( void ) {\r
+       StatusType rv;\r
+       TaskType task;\r
+       TaskStateType state;\r
+\r
+       rv = GetTaskID(&task);\r
+       assert( rv == E_OK );\r
+       LDEBUG_PRINTF("## PreTaskHook, taskid=%d\n",task);\r
+       rv = GetTaskState(task,&state);\r
+       assert( rv == E_OK );\r
+       assert( state == TASK_STATE_RUNNING );\r
+}\r
+\r
+/**\r
+ *
+ */\r
+void PostTaskHook( void ) {\r
+       StatusType rv;\r
+       TaskType task;\r
+       TaskStateType state;\r
+\r
+       rv = GetTaskID(&task);\r
+       assert( rv == E_OK );\r
+       LDEBUG_PRINTF("## PostTaskHook, taskid=%d\n",task);\r
+       rv = GetTaskState(task,&state);\r
+       assert( rv == E_OK );\r
+       assert( state == TASK_STATE_RUNNING );\r
+\r
+}\r
+\r
index 059b03ce39008c7fafd07b9cd472991213a0e37c..501316418cfafe3003bd7d8c775d4b31089465c9 100644 (file)
@@ -38,8 +38,8 @@
 \r
 #if defined(__GNUC__)\r
 #define SECTION_BALIGN(_align )  __attribute__ ((aligned (_align)))\r
-#else\r
-#error SECTION_BALIGN not defined for compiler\r
+#elif defined(__CWCC__)\r
+#define SECTION_BALIGN(_align )  __attribute__ ((aligned (_align)))\r
 #endif\r
 \r
 \r
index 785156b1bae7f54dfe57bcd8ae3864a266eed79a..9c43383b518ffc3b53a9fa2000540ede50f88114 100644 (file)
@@ -18,7 +18,7 @@
 #define IRQ_H_\r
 \r
 #include <stdint.h>\r
-#include "os.h"\r
+#include "Os.h"\r
 #include "irq_types.h"\r
 #include "bit.h"\r
 \r
index 905c4a965df3dd0ed0f0701a367828c8787e8d8d..4a9d7583d9a58659412c85db09d000977f92c3ea 100644 (file)
 #define GEN_ISR_MAP const uint8_t Os_VectorToIsr[NUMBER_OF_INTERRUPTS_AND_EXCEPTIONS]\r
 \r
 \r
-#if 0\r
-#define GEN_ISR_2( _id, _name, _entry, _priority,  _vector ) \\r
-{                                                                      \\r
-       .pid = _id,                                             \\r
-       .name = _name,                                  \\r
-       .entry = _entry,                                \\r
-       .prio = _priority,                              \\r
-       .proc_type = PROC_ISR2,             \\r
-       .vector = _vector,              \\r
-}\r
-\r
-\r
-#define GEN_ISR_1( _id, _name, _entry, _priority , _vector ) \\r
-{                                                                      \\r
-       .pid = _id,                                             \\r
-       .name = _name,                                  \\r
-       .entry = _entry,                                \\r
-       .prio = _priority,                              \\r
-       .proc_type = PROC_ISR1,         \\r
-       .vector = _vector,              \\r
-}\r
-#endif\r
-\r
-\r
-//#define GEN_PCB_LIST()       uint8_t Os_TaskVarList[PCB_T_SIZE*ARRAY_SIZE( Os_TaskConstList)];\r
-#define GEN_PCB_LIST() OsTaskVarType Os_TaskVarList[ARRAY_SIZE( Os_TaskConstList)];\r
-\r
 #define GEN_RESOURCE_HEAD OsResourceType resource_list[OS_RESOURCE_CNT]\r
 \r
 \r
diff --git a/include/sys/queue.h b/include/sys/queue.h
new file mode 100644 (file)
index 0000000..23e0d8a
--- /dev/null
@@ -0,0 +1,475 @@
+/*
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)queue.h     8.5 (Berkeley) 8/20/94
+ * $FreeBSD: src/sys/sys/queue.h,v 1.48 2002/04/17 14:00:37 tmm Exp $
+ */
+
+#ifndef _SYS_QUEUE_H_
+#define        _SYS_QUEUE_H_
+
+//#include <machine/ansi.h>    /* for __offsetof */
+#include <stddef.h>    /* for __offsetof */
+
+
+
+
+/*
+ * This file defines four types of data structures: singly-linked lists,
+ * singly-linked tail queues, lists and tail queues.
+ *
+ * A singly-linked list is headed by a single forward pointer. The elements
+ * are singly linked for minimum space and pointer manipulation overhead at
+ * the expense of O(n) removal for arbitrary elements. New elements can be
+ * added to the list after an existing element or at the head of the list.
+ * Elements being removed from the head of the list should use the explicit
+ * macro for this purpose for optimum efficiency. A singly-linked list may
+ * only be traversed in the forward direction.  Singly-linked lists are ideal
+ * for applications with large datasets and few or no removals or for
+ * implementing a LIFO queue.
+ *
+ * A singly-linked tail queue is headed by a pair of pointers, one to the
+ * head of the list and the other to the tail of the list. The elements are
+ * singly linked for minimum space and pointer manipulation overhead at the
+ * expense of O(n) removal for arbitrary elements. New elements can be added
+ * to the list after an existing element, at the head of the list, or at the
+ * end of the list. Elements being removed from the head of the tail queue
+ * should use the explicit macro for this purpose for optimum efficiency.
+ * A singly-linked tail queue may only be traversed in the forward direction.
+ * Singly-linked tail queues are ideal for applications with large datasets
+ * and few or no removals or for implementing a FIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may only be traversed in the forward direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ *
+ *
+ *                     SLIST   LIST    STAILQ  TAILQ
+ * _HEAD               +       +       +       +
+ * _HEAD_INITIALIZER   +       +       +       +
+ * _ENTRY              +       +       +       +
+ * _INIT               +       +       +       +
+ * _EMPTY              +       +       +       +
+ * _FIRST              +       +       +       +
+ * _NEXT               +       +       +       +
+ * _PREV               -       -       -       +
+ * _LAST               -       -       +       +
+ * _FOREACH            +       +       +       +
+ * _FOREACH_REVERSE    -       -       -       +
+ * _INSERT_HEAD                +       +       +       +
+ * _INSERT_BEFORE      -       +       -       +
+ * _INSERT_AFTER       +       +       +       +
+ * _INSERT_TAIL                -       -       +       +
+ * _CONCAT             -       -       +       +
+ * _REMOVE_HEAD                +       -       +       -
+ * _REMOVE             +       +       +       +
+ *
+ */
+
+/*
+ * Singly-linked List declarations.
+ */
+#define        SLIST_HEAD(name, type)                                          \
+struct name {                                                          \
+       struct type *slh_first; /* first element */                     \
+}
+
+#define        SLIST_HEAD_INITIALIZER(head)                                    \
+       { NULL }
+#define        SLIST_ENTRY(type)                                               \
+struct {                                                               \
+       struct type *sle_next;  /* next element */                      \
+}
+/*
+ * Singly-linked List functions.
+ */
+#define        SLIST_EMPTY(head)       ((head)->slh_first == NULL)
+
+#define        SLIST_FIRST(head)       ((head)->slh_first)
+
+#define        SLIST_FOREACH(var, head, field)                                 \
+       for ((var) = SLIST_FIRST((head));                               \
+           (var);                                                      \
+           (var) = SLIST_NEXT((var), field))
+
+#define        SLIST_INIT(head) do {                                           \
+       SLIST_FIRST((head)) = NULL;                                     \
+} while (0)
+
+#define        SLIST_INSERT_AFTER(slistelm, elm, field) do {                   \
+       SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field);       \
+       SLIST_NEXT((slistelm), field) = (elm);                          \
+} while (0)
+
+#define        SLIST_INSERT_HEAD(head, elm, field) do {                        \
+       SLIST_NEXT((elm), field) = SLIST_FIRST((head));                 \
+       SLIST_FIRST((head)) = (elm);                                    \
+} while (0)
+
+#define        SLIST_NEXT(elm, field)  ((elm)->field.sle_next)
+
+#define        SLIST_REMOVE(head, elm, type, field) do {                       \
+       if (SLIST_FIRST((head)) == (elm)) {                             \
+               SLIST_REMOVE_HEAD((head), field);                       \
+       }                                                               \
+       else {                                                          \
+               struct type *curelm = SLIST_FIRST((head));              \
+               while (SLIST_NEXT(curelm, field) != (elm))              \
+                       curelm = SLIST_NEXT(curelm, field);             \
+               SLIST_NEXT(curelm, field) =                             \
+                   SLIST_NEXT(SLIST_NEXT(curelm, field), field);       \
+       }                                                               \
+} while (0)
+
+#define        SLIST_REMOVE_HEAD(head, field) do {                             \
+       SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field);   \
+} while (0)
+
+/*
+ * Singly-linked Tail queue declarations.
+ */
+#define        STAILQ_HEAD(name, type)                                         \
+struct name {                                                          \
+       struct type *stqh_first;/* first element */                     \
+       struct type **stqh_last;/* addr of last next element */         \
+}
+
+#define        STAILQ_HEAD_INITIALIZER(head)                                   \
+       { NULL, &(head).stqh_first }
+
+#define        STAILQ_ENTRY(type)                                              \
+struct {                                                               \
+       struct type *stqe_next; /* next element */                      \
+}
+
+/*
+ * Singly-linked Tail queue functions.
+ */
+#define        STAILQ_CONCAT(head1, head2) do {                                \
+       if (!STAILQ_EMPTY((head2))) {                                   \
+               *(head1)->stqh_last = (head2)->stqh_first;              \
+               (head1)->stqh_last = (head2)->stqh_last;                \
+               STAILQ_INIT((head2));                                   \
+       }                                                               \
+} while (0)
+
+#define        STAILQ_EMPTY(head)      ((head)->stqh_first == NULL)
+
+#define        STAILQ_FIRST(head)      ((head)->stqh_first)
+
+#define        STAILQ_FOREACH(var, head, field)                                \
+       for((var) = STAILQ_FIRST((head));                               \
+          (var);                                                       \
+          (var) = STAILQ_NEXT((var), field))
+
+#define        STAILQ_INIT(head) do {                                          \
+       STAILQ_FIRST((head)) = NULL;                                    \
+       (head)->stqh_last = &STAILQ_FIRST((head));                      \
+} while (0)
+
+#define        STAILQ_INSERT_AFTER(head, tqelm, elm, field) do {               \
+       if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
+               (head)->stqh_last = &STAILQ_NEXT((elm), field);         \
+       STAILQ_NEXT((tqelm), field) = (elm);                            \
+} while (0)
+
+#define        STAILQ_INSERT_HEAD(head, elm, field) do {                       \
+       if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
+               (head)->stqh_last = &STAILQ_NEXT((elm), field);         \
+       STAILQ_FIRST((head)) = (elm);                                   \
+} while (0)
+
+#define        STAILQ_INSERT_TAIL(head, elm, field) do {                       \
+       STAILQ_NEXT((elm), field) = NULL;                               \
+       *(head)->stqh_last = (elm);                                     \
+       (head)->stqh_last = &STAILQ_NEXT((elm), field);                 \
+} while (0)
+
+#define        STAILQ_LAST(head, type, field)                                  \
+       (STAILQ_EMPTY((head)) ?                                         \
+               NULL :                                                  \
+               ((struct type *)                                        \
+               ((char *)((head)->stqh_last) - __offsetof(struct type, field))))
+
+#define        STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
+
+#define        STAILQ_REMOVE(head, elm, type, field) do {                      \
+       if (STAILQ_FIRST((head)) == (elm)) {                            \
+               STAILQ_REMOVE_HEAD((head), field);                      \
+       }                                                               \
+       else {                                                          \
+               struct type *curelm = STAILQ_FIRST((head));             \
+               while (STAILQ_NEXT(curelm, field) != (elm))             \
+                       curelm = STAILQ_NEXT(curelm, field);            \
+               if ((STAILQ_NEXT(curelm, field) =                       \
+                    STAILQ_NEXT(STAILQ_NEXT(curelm, field), field)) == NULL)\
+                       (head)->stqh_last = &STAILQ_NEXT((curelm), field);\
+       }                                                               \
+} while (0)
+
+#define        STAILQ_REMOVE_HEAD(head, field) do {                            \
+       if ((STAILQ_FIRST((head)) =                                     \
+            STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL)         \
+               (head)->stqh_last = &STAILQ_FIRST((head));              \
+} while (0)
+
+#define        STAILQ_REMOVE_HEAD_UNTIL(head, elm, field) do {                 \
+       if ((STAILQ_FIRST((head)) = STAILQ_NEXT((elm), field)) == NULL) \
+               (head)->stqh_last = &STAILQ_FIRST((head));              \
+} while (0)
+
+/*
+ * List declarations.
+ */
+#define        LIST_HEAD(name, type)                                           \
+struct name {                                                          \
+       struct type *lh_first;  /* first element */                     \
+}
+
+#define        LIST_HEAD_INITIALIZER(head)                                     \
+       { NULL }
+
+#define        LIST_ENTRY(type)                                                \
+struct {                                                               \
+       struct type *le_next;   /* next element */                      \
+       struct type **le_prev;  /* address of previous next element */  \
+}
+
+/*
+ * List functions.
+ */
+
+#define        LIST_EMPTY(head)        ((head)->lh_first == NULL)
+
+#define        LIST_FIRST(head)        ((head)->lh_first)
+
+#define        LIST_FOREACH(var, head, field)                                  \
+       for ((var) = LIST_FIRST((head));                                \
+           (var);                                                      \
+           (var) = LIST_NEXT((var), field))
+
+#define        LIST_INIT(head) do {                                            \
+       LIST_FIRST((head)) = NULL;                                      \
+} while (0)
+
+#define        LIST_INSERT_AFTER(listelm, elm, field) do {                     \
+       if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
+               LIST_NEXT((listelm), field)->field.le_prev =            \
+                   &LIST_NEXT((elm), field);                           \
+       LIST_NEXT((listelm), field) = (elm);                            \
+       (elm)->field.le_prev = &LIST_NEXT((listelm), field);            \
+} while (0)
+
+#define        LIST_INSERT_BEFORE(listelm, elm, field) do {                    \
+       (elm)->field.le_prev = (listelm)->field.le_prev;                \
+       LIST_NEXT((elm), field) = (listelm);                            \
+       *(listelm)->field.le_prev = (elm);                              \
+       (listelm)->field.le_prev = &LIST_NEXT((elm), field);            \
+} while (0)
+
+#define        LIST_INSERT_HEAD(head, elm, field) do {                         \
+       if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL)     \
+               LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
+       LIST_FIRST((head)) = (elm);                                     \
+       (elm)->field.le_prev = &LIST_FIRST((head));                     \
+} while (0)
+
+#define        LIST_NEXT(elm, field)   ((elm)->field.le_next)
+
+#define        LIST_REMOVE(elm, field) do {                                    \
+       if (LIST_NEXT((elm), field) != NULL)                            \
+               LIST_NEXT((elm), field)->field.le_prev =                \
+                   (elm)->field.le_prev;                               \
+       *(elm)->field.le_prev = LIST_NEXT((elm), field);                \
+} while (0)
+
+/*
+ * Tail queue declarations.
+ */
+#define        TAILQ_HEAD(name, type)                                          \
+struct name {                                                          \
+       struct type *tqh_first; /* first element */                     \
+       struct type **tqh_last; /* addr of last next element */         \
+}
+
+#define        TAILQ_HEAD_INITIALIZER(head)                                    \
+       { NULL, &(head).tqh_first }
+
+#define        TAILQ_ENTRY(type)                                               \
+struct {                                                               \
+       struct type *tqe_next;  /* next element */                      \
+       struct type **tqe_prev; /* address of previous next element */  \
+}
+
+/*
+ * Tail queue functions.
+ */
+#define        TAILQ_CONCAT(head1, head2, field) do {                          \
+       if (!TAILQ_EMPTY(head2)) {                                      \
+               *(head1)->tqh_last = (head2)->tqh_first;                \
+               (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
+               (head1)->tqh_last = (head2)->tqh_last;                  \
+               TAILQ_INIT((head2));                                    \
+       }                                                               \
+} while (0)
+
+#define        TAILQ_EMPTY(head)       ((head)->tqh_first == NULL)
+
+#define        TAILQ_FIRST(head)       ((head)->tqh_first)
+
+#define        TAILQ_FOREACH(var, head, field)                                 \
+       for ((var) = TAILQ_FIRST((head));                               \
+           (var);                                                      \
+           (var) = TAILQ_NEXT((var), field))
+
+#define        TAILQ_FOREACH_REVERSE(var, head, headname, field)               \
+       for ((var) = TAILQ_LAST((head), headname);                      \
+           (var);                                                      \
+           (var) = TAILQ_PREV((var), headname, field))
+
+#define        TAILQ_INIT(head) do {                                           \
+       TAILQ_FIRST((head)) = NULL;                                     \
+       (head)->tqh_last = &TAILQ_FIRST((head));                        \
+} while (0)
+
+#define        TAILQ_INSERT_AFTER(head, listelm, elm, field) do {              \
+       if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
+               TAILQ_NEXT((elm), field)->field.tqe_prev =              \
+                   &TAILQ_NEXT((elm), field);                          \
+       else                                                            \
+               (head)->tqh_last = &TAILQ_NEXT((elm), field);           \
+       TAILQ_NEXT((listelm), field) = (elm);                           \
+       (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field);          \
+} while (0)
+
+#define        TAILQ_INSERT_BEFORE(listelm, elm, field) do {                   \
+       (elm)->field.tqe_prev = (listelm)->field.tqe_prev;              \
+       TAILQ_NEXT((elm), field) = (listelm);                           \
+       *(listelm)->field.tqe_prev = (elm);                             \
+       (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field);          \
+} while (0)
+
+#define        TAILQ_INSERT_HEAD(head, elm, field) do {                        \
+       if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL)   \
+               TAILQ_FIRST((head))->field.tqe_prev =                   \
+                   &TAILQ_NEXT((elm), field);                          \
+       else                                                            \
+               (head)->tqh_last = &TAILQ_NEXT((elm), field);           \
+       TAILQ_FIRST((head)) = (elm);                                    \
+       (elm)->field.tqe_prev = &TAILQ_FIRST((head));                   \
+} while (0)
+
+#define        TAILQ_INSERT_TAIL(head, elm, field) do {                        \
+       TAILQ_NEXT((elm), field) = NULL;                                \
+       (elm)->field.tqe_prev = (head)->tqh_last;                       \
+       *(head)->tqh_last = (elm);                                      \
+       (head)->tqh_last = &TAILQ_NEXT((elm), field);                   \
+} while (0)
+
+#define        TAILQ_LAST(head, headname)                                      \
+       (*(((struct headname *)((head)->tqh_last))->tqh_last))
+
+#define        TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
+
+#define        TAILQ_PREV(elm, headname, field)                                \
+       (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+
+#define        TAILQ_REMOVE(head, elm, field) do {                             \
+       if ((TAILQ_NEXT((elm), field)) != NULL)                         \
+               TAILQ_NEXT((elm), field)->field.tqe_prev =              \
+                   (elm)->field.tqe_prev;                              \
+       else                                                            \
+               (head)->tqh_last = (elm)->field.tqe_prev;               \
+       *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field);              \
+} while (0)
+
+
+#ifdef _KERNEL
+
+/*
+ * XXX insque() and remque() are an old way of handling certain queues.
+ * They bogusly assumes that all queue heads look alike.
+ */
+
+struct quehead {
+       struct quehead *qh_link;
+       struct quehead *qh_rlink;
+};
+
+#ifdef __GNUC__
+
+static __inline void
+insque(void *a, void *b)
+{
+       struct quehead *element = (struct quehead *)a,
+                *head = (struct quehead *)b;
+
+       element->qh_link = head->qh_link;
+       element->qh_rlink = head;
+       head->qh_link = element;
+       element->qh_link->qh_rlink = element;
+}
+
+static __inline void
+remque(void *a)
+{
+       struct quehead *element = (struct quehead *)a;
+
+       element->qh_link->qh_rlink = element->qh_rlink;
+       element->qh_rlink->qh_link = element->qh_link;
+       element->qh_rlink = 0;
+}
+
+#else /* !__GNUC__ */
+
+void   insque(void *a, void *b);
+void   remque(void *a);
+
+#endif /* __GNUC__ */
+
+#endif /* _KERNEL */
+
+#endif /* !_SYS_QUEUE_H_ */
index a74cc0de68f89776c59379aed79c2621c82875a6..516e40c026ada72e0431c087041a7fb50070023a 100644 (file)
@@ -63,14 +63,13 @@ CCOUT               = -o $@
 \r
 CPP    =       $(CC) -E\r
 \r
-CPP_ASM_FLAGS += -ppopt noline -dialect c\r
+CPP_ASM_FLAGS += -ppopt noline -ppopt nopragma -dialect c\r
 \r
 comma = ,\r
 empty = \r
 space = $(empty) $(empty)\r
 \r
 \r
-\r
 cw_lib_path += -L$(CW_COMPILE)/PowerPC_EABI_Support/Runtime/Lib\r
 cw_lib_path += -L$(CW_COMPILE)/PowerPC_EABI_Support/MSL/MSL_C/PPC_EABI/Lib\r
 cc_inc_path += $(CW_COMPILE)/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include\r
index ddbfac7e530d9eb2aa3f32ce1ce60c42faeb6f71..635943eb395095b01e30f98c0377d06844268145 100644 (file)
@@ -258,6 +258,8 @@ $(build-exe-y): $(dep-y) $(obj-y) $(sim-y) $(libitem-y) $(ldcmdfile-y)
 ifeq ($(CROSS_COMPILE),)\r
        $(Q)$(CC) $(LDFLAGS) -o $@ $(libpath-y) $(obj-y) $(lib-y) $(libitem-y)  \r
 else\r
+       @echo LDFLAGS $(LDFLAGS) \r
+       @echo LD_FILE  $(LD_FILE)\r
        $(Q)$(LD) $(LDFLAGS) $(LD_FILE) $(ldcmdfile-y) -o $@ $(libpath-y) $(LD_START_GRP) $(obj-y) $(lib-y) $(libitem-y) $(LD_END_GRP) $(LDMAPFILE)\r
  ifdef CFG_MC912DG128A\r
     # Print memory layout\r
index c18420e2369455bef45dbcd3d735ad65a2b3ccef..f3fb5bbbab2c2aaab7ced0538b63943dafbd882a 100644 (file)
  * -------------------------------- Arctic Core ------------------------------*/
 
 
+#if defined(__GNUC__)
 #include <sys/types.h>
+#endif
 #include <stdint.h>
 #include <string.h>
 #include "Compiler.h"
 #include "internal.h"
 #include "isr.h"
 #include "irq.h"
-//#include "irq_config.h"
 
 
 extern const uint8_t Os_VectorToIsr[NUMBER_OF_INTERRUPTS_AND_EXCEPTIONS];
@@ -40,6 +41,7 @@ SECTION_BALIGN(0x10) uint8_t Os_IsrStack[OS_INTERRUPT_STACK_SIZE];
 //#include "stm32f10x_arc.h"
 #endif
 
+#if 0
 extern caddr_t *sbrk(int);
 
 #define os_alloc(_x)   sbrk(_x)
@@ -50,6 +52,7 @@ OsTaskVarType * os_alloc_new_pcb( void ) {
        assert(h!=NULL);
        return h;
 }
+#endif
 
 
 //extern TaskType Os_AddTask( OsTaskVarType *pcb );
index 8ee59d1c6b415f4bb7bf567faed6e91ee3850a41..883c00f74b32bd38284b54acdf37ca47820c4c71 100644 (file)
@@ -152,8 +152,6 @@ void SignalSemaphore( OsSemaphoreType *semPtr ) {
        }\r
 \r
        Irq_Restore(flags);\r
-\r
-       return E_OK;\r
 }\r
 \r
 \r