* Generator version: 2.0.34\r
*\r
* Generated by Arctic Studio (http://arccore.com) \r
-* on Wed Jun 22 23:21:44 CEST 2011\r
+* on Sun Aug 21 22:59:02 CEST 2011\r
*/\r
\r
\r
\r
\r
// ############################### DEBUG OUTPUT #############################\r
-uint32 os_dbg_mask = 0;\r
+uint32 os_dbg_mask = D_RESOURCE |D_SCHTBL |D_EVENT |D_TASK |D_ALARM;\r
\r
// ############################### APPLICATIONS #############################\r
GEN_APPLICATION_HEAD = {\r
* Generator version: 2.0.34\r
*\r
* Generated by Arctic Studio (http://arccore.com) \r
-* on Wed Jun 22 23:21:44 CEST 2011\r
+* on Sun Aug 21 22:59:02 CEST 2011\r
*/\r
\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
+#define CFG_OS_DEBUG STD_ON\r
\r
#define OS_SC1 STD_ON /* NOT CONFIGURABLE IN TOOLS */\r
#define OS_USE_APPLICATIONS STD_ON\r
</INTEGER-VALUE>\r
<BOOLEAN-VALUE>\r
<DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Os/OsOS/ArcCoreOsUseDebug</DEFINITION-REF>\r
- <VALUE>false</VALUE>\r
+ <VALUE>true</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
+ <VALUE>true</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
+ <VALUE>true</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
+ <VALUE>true</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
+ <VALUE>true</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
+ <VALUE>true</VALUE>\r
</BOOLEAN-VALUE>\r
<INTEGER-VALUE>\r
<DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Os/OsOS/ArcOsIsrMaxCount</DEFINITION-REF>\r
OSServiceId_GetElapsedValue,\r
OSServiceId_TerminateApplication,\r
OSServiceId_AllowAccess,\r
- OSServiceId_GetApplicationState\r
+ OSServiceId_GetApplicationState,\r
+\r
+#if defined(USE_KERNEL_EXTRA)\r
+ OSServiceId_Sleep,\r
+#endif\r
} OsServiceIdType;\r
\r
typedef struct OsError {\r
\r
#include "Os.h"\r
+#include "application.h"\r
#include "internal.h"\r
#include "task_i.h"\r
#include "sys.h"\r
* tasks. If sleep is 0 it will just call the dispatcher to\r
* see if there is anything with higher priority to run.\r
*\r
- *\r
+ * Sleep(0) only makes sense from a NON task (since they highest\r
+ * prio task is always running). SetEvent() nor ActivateTask() will\r
+ * activate a sleeping task.\r
*
* @param sleep
* @return E_OS_ACCESS if called from a basic task\r
* E_OS_RESOURCE called while holding a resource\r
- *
+ * E_OS_CALLEVEL if called from interrupt context\r
+ * E_OK if called from a FULL task\r
*/\r
\r
StatusType Sleep( TickType sleep ) {\r
+ StatusType rv = E_OK;\r
OsTaskVarType *pcbPtr;\r
uint32_t flags;\r
\r
- Irq_Save(flags);\r
\r
pcbPtr = Os_SysTaskGetCurr();\r
\r
if (pcbPtr->constPtr->proc_type != PROC_EXTENDED) {\r
- return E_OS_ACCESS;\r
+ rv = E_OS_ACCESS;\r
+ goto err;\r
+ }\r
+\r
+ /* Check that we are not calling from interrupt context */\r
+ if( Os_Sys.intNestCnt != 0 ) {\r
+ rv = E_OS_CALLEVEL;\r
+ goto err;\r
}\r
\r
if ( Os_TaskOccupiesResources(pcbPtr) ) {\r
- return E_OS_RESOURCE;\r
+ rv = E_OS_RESOURCE;\r
+ goto err;\r
}\r
\r
+ Irq_Save(flags);\r
+\r
if ( Os_SchedulerResourceIsFree() ) {\r
if( sleep != 0 ) {\r
TAILQ_INSERT_TAIL(&Os_Sys.timerHead,pcbPtr,timerEntry);\r
pcbPtr->timerDec = sleep;\r
Os_Dispatch(OP_SLEEP);\r
} else {\r
- Os_Dispatch(OP_SCHEDULE);\r
- }\r
\r
+ if( Os_SysTaskGetCurr()->constPtr->scheduling != NON ) {\r
+ return E_OK;\r
+ }\r
+\r
+ OsTaskVarType *topTask = Os_TaskGetTop();\r
+ if( topTask->activePriority != pcbPtr->activePriority ) {\r
+ Os_Dispatch(OP_SCHEDULE);\r
+ }\r
+ }\r
}\r
\r
Irq_Restore(flags);\r
- return E_OK;\r
+\r
+ OS_STD_END_1(OSServiceId_Sleep,sleep);\r
}\r