]> rtime.felk.cvut.cz Git - arc.git/blobdiff - include/Os.h
EcuM: More EcuM fixes.
[arc.git] / include / Os.h
index a5ac7c0bf5226cee03aa3f021a5b56072def211b..0d9e8e1edb449157806a8baa6283db60fd015855 100644 (file)
@@ -15,6 +15,7 @@
 \r
 \r
 \r
+\r
 #ifndef OS_H_\r
 #define OS_H_\r
 \r
 #include "Os_Cfg.h"\r
 #include "MemMap.h"\r
 #include "Cpu.h"\r
+#include "limits.h"\r
+#include <sys/queue.h>\r
 \r
 typedef uint8 StatusType;\r
 \r
+#if (OS_ISR_CNT > OS_ISR_MAX_CNT)\r
+#error OS configuration error. OS_ISR_MAX_CNT must be bigger or equal to OS_ISR_CNT\r
+#endif\r
+\r
 #define E_OS_ACCESS (StatusType)1               /**< STD OSEK */\r
 #define        E_OS_CALLEVEL (StatusType)2             /**< STD OSEK */\r
 #define        E_OS_ID (StatusType)3                   /**< STD OSEK */\r
@@ -81,6 +88,9 @@ typedef TaskStateType *TaskStateRefType;
 \r
 #define INVALID_OSAPPLICATION (-1)\r
 \r
+#define TASK(_task)            void _task( void )\r
+\r
+\r
 /* TODO, I have no idea what this should be*/\r
 #if (OS_USE_APPLICATIONS == STD_ON)\r
 typedef sint32 ApplicationType;\r
@@ -335,13 +345,46 @@ StatusType GetElapsedCounterValue( CounterType, TickRefType val, TickRefType ela
  * System timer\r
  *-----------------------------------------------------------------*/\r
 typedef const uint32 OsTickType;\r
+\r
+extern OsTickType OsTickFreq;\r
 void Os_SysTickInit( void );\r
 void Os_SysTickStart(TickType period_ticks);\r
 TickType Os_SysTickGetValue( void );\r
 TickType Os_SysTickGetElapsedValue( TickType preValue );\r
 \r
+/* Return a value that is always a free running timer */\r
+TickType GetOsTick( void );\r
+\r
+/* Since this is based on SW ticks, no use to have ns resolution */\r
+#define OSTICKDURATION_US              (OSTICKDURATION/1000UL)\r
+\r
+/* Have special macros to always get the OsTick */\r
+#define OS_TICKS2SEC_OS_TICK(_ticks)           ( (OSTICKDURATION_US * (_ticks))/1000000UL )\r
+#define OS_TICKS2MS_OS_TICK(_ticks)            ( (OSTICKDURATION_US * (_ticks))/1000UL )\r
+#define OS_TICKS2US_OS_TICK(_ticks)            (OSTICKDURATION_US * (_ticks))\r
+#define OS_TICKS2NS_OS_TICK(_ticks)            (OSTICKDURATION * (_ticks))\r
+\r
+/*-------------------------------------------------------------------\r
+ * Kernel extra\r
+ *-----------------------------------------------------------------*/\r
+\r
 #if defined(USE_KERNEL_EXTRA)\r
+\r
+#define TICK_MAX       UINT_MAX\r
+\r
+typedef struct OsSemaphore {\r
+       int val;\r
+       STAILQ_HEAD(,OsTaskVar) taskHead;\r
+} OsSemaphoreType;\r
+\r
+typedef OsSemaphoreType OsMutexType;\r
+\r
 StatusType Sleep( TickType ticks );\r
+StatusType InitSemaphore( OsSemaphoreType *semPtr, int initialCount  );\r
+StatusType WaitSemaphore( OsSemaphoreType *semPtr, TickType tmo );\r
+void SignalSemaphore( OsSemaphoreType *semPtr );\r
+StatusType WaitMutex( OsMutexType *mutexPtr );\r
+StatusType ReleaseMutex( OsMutexType *mutexPtr );\r
 #endif\r
 \r
 \r
@@ -407,7 +450,32 @@ typedef enum {
     OSServiceId_PostTaskHook,\r
     OSServiceId_StartupHook,\r
     OSServiceId_ShutdownHook,\r
-    OSServiceId_GetTaskState\r
+    OSServiceId_GetTaskState,\r
+    OSServiceId_GetApplicationID,\r
+    OSServiceId_GetISRID,\r
+    OSServiceId_CallTrustedFunction,\r
+    OSServiceId_CheckISRMemoryAccess,\r
+    OSServiceId_TaskMemoryAccess,\r
+    OSServiceId_CheckObjectAccess,\r
+    OSServiceId_CheckObjectOwnership,\r
+    OSServiceId_StartScheduleTableRel,\r
+    OSServiceId_StartScheduleTableAbs,\r
+    OSServiceId_StopScheduleTable,\r
+    OSServiceId_NextScheduleTable,\r
+    OSServiceId_StartScheduleTableSynchron,\r
+    OSServiceId_SyncScheduleTable,\r
+    OSServiceId_GetScheduleTable,\r
+    OSServiceId_SetScheduleTableAsync,\r
+    OSServiceId_IncrementCounter,\r
+    OSServiceId_GetCounterValue,\r
+    OSServiceId_GetElapsedValue,\r
+    OSServiceId_TerminateApplication,\r
+    OSServiceId_AllowAccess,\r
+    OSServiceId_GetApplicationState,\r
+\r
+#if defined(USE_KERNEL_EXTRA)\r
+    OSServiceId_Sleep,\r
+#endif\r
 } OsServiceIdType;\r
 \r
 typedef struct OsError {\r