\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
\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
* 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
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