}\r
#endif\r
\r
-/*-----------------------------------------------------------------*/\r
-int Os_CfgGetTaskCnt(void) {\r
- return OS_TASK_CNT;\r
-}\r
/*-----------------------------------------------------------------*/\r
\r
OsResourceType *Os_CfgGetResource( ResourceType resource ) {\r
return &resource_list[resource];\r
}\r
\r
-int Os_CfgGetResourceCnt() {\r
- return OS_RESOURCE_CNT;\r
-}\r
-\r
/*-----------------------------------------------------------------*/\r
\r
OsCounterType *Os_CfgGetCounter(CounterType count_id) {\r
return &counter_list[count_id];\r
}\r
\r
-uint32 Os_CfgGetCounterCnt(void ) {\r
- return OS_COUNTER_CNT;\r
-// return sizeof(counter_list)/sizeof(OsCounterType);\r
-}\r
/*-----------------------------------------------------------------*/\r
\r
-uint32 Os_CfgGetSchedCnt( void ) {\r
- return OS_SCHTBL_CNT;\r
-}\r
-\r
OsSchTblType *Os_CfgGetSched( ScheduleTableType sched_id ) {\r
#if (OS_SCHTBL_CNT!=0)\r
if(sched_id < OS_SCHTBL_CNT) {\r
\r
/*-----------------------------------------------------------------*/\r
\r
-uint32 Os_CfgGetAlarmCnt(void) {\r
- return OS_ALARM_CNT;\r
-}\r
-\r
OsAlarmType *Os_CfgGetAlarmObj( AlarmType alarm_id ) {\r
#if (OS_ALARM_CNT!=0)\r
if( alarm_id < OS_ALARM_CNT) {\r
\r
StatusType rv = E_OK;\r
\r
- if( alarm_id >= Os_CfgGetAlarmCnt() ) {\r
+ if( alarm_id >= OS_ALARM_CNT ) {\r
rv = E_OS_ID;\r
} else {\r
#if (OS_ALARM_CNT!=0)\r
#define COUNTER_MAX(x) (x)->counter->alarm_base.maxallowedvalue\r
#define COUNTER_MIN_CYCLE(x) (x)->counter->alarm_base.mincycle\r
#define ALARM_CHECK_ID(x) \\r
- if( (x) > Os_CfgGetAlarmCnt()) { \\r
+ if( (x) > OS_ALARM_CNT) { \\r
rv = E_OS_ID; \\r
goto err; \\r
}\r
}\r
}\r
\r
+void Os_AlarmAutostart(void) {\r
+ int j;\r
+ for (j = 0; j < OS_ALARM_CNT; j++) {\r
+ OsAlarmType *alarmPtr;\r
+ alarmPtr = Os_CfgGetAlarmObj(j);\r
+ if (alarmPtr->autostartPtr != NULL) {\r
+ const OsAlarmAutostartType *autoPtr = alarmPtr->autostartPtr;\r
+\r
+ if (os_sys.appMode & autoPtr->appModeRef) {\r
+ if (autoPtr->autostartType == ALARM_AUTOSTART_ABSOLUTE) {\r
+ SetAbsAlarm(j, autoPtr->alarmTime, autoPtr->cycleTime);\r
+ } else {\r
+ SetRelAlarm(j, autoPtr->alarmTime, autoPtr->cycleTime);\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
\r
\r
#endif\r
\r
\r
-#define IsCounterValid(_counterId) ((_counterId) <= Os_CfgGetCounterCnt())\r
+#define IsCounterValid(_counterId) ((_counterId) <= OS_COUNTER_CNT)\r
\r
/**\r
*\r
/* Check param */\r
/** @req OS285 */\r
if( ( cPtr->type != COUNTER_TYPE_SOFT ) ||\r
- ( counter_id >= Os_CfgGetCounterCnt() ) ) {\r
+ ( counter_id >= OS_COUNTER_CNT ) ) {\r
rv = E_OS_ID;\r
Irq_Restore(flags);\r
goto err;\r
/** @req OS286 */\r
cPtr->val = Os_CounterAdd( cPtr->val, Os_CounterGetMaxValue(cPtr), 1 );\r
\r
+#if OS_ALARM_CNT!=0\r
Os_AlarmCheck(cPtr);\r
+#endif\r
+#if OS_SCHTBL_CNT!=0\r
Os_SchTblCheck(cPtr);\r
+#endif\r
\r
Irq_Restore(flags);\r
\r
cPtr->val = Os_CounterAdd( cPtr->val, Os_CounterGetMaxValue(cPtr), 1 );\r
\r
// os_sys.tick = cPtr->val;\r
-\r
+#if OS_ALARM_CNT!=0\r
Os_AlarmCheck(cPtr);\r
+#endif\r
+#if OS_SCHTBL_CNT!=0\r
Os_SchTblCheck(cPtr);\r
+#endif\r
}\r
}\r
\r
* Initialize alarms and schedule-tables for the counters\r
*/\r
void Os_CounterInit( void ) {\r
- OsCounterType *cPtr;\r
- OsAlarmType *aPtr;\r
- OsSchTblType *sPtr;\r
-\r
- /* Add the alarms to counters */\r
- for(int i=0; i < Os_CfgGetAlarmCnt(); i++ ) {\r
- aPtr = Os_CfgGetAlarmObj(i);\r
- cPtr = aPtr->counter;\r
- SLIST_INSERT_HEAD(&cPtr->alarm_head,aPtr, alarm_list);\r
+#if OS_ALARM_CNT!=0\r
+ {\r
+ OsCounterType *cPtr;\r
+ OsAlarmType *aPtr;\r
+\r
+ /* Add the alarms to counters */\r
+ for (int i = 0; i < OS_ALARM_CNT; i++) {\r
+ aPtr = Os_CfgGetAlarmObj(i);\r
+ cPtr = aPtr->counter;\r
+ SLIST_INSERT_HEAD(&cPtr->alarm_head, aPtr, alarm_list);\r
+ }\r
}\r
+#endif\r
+\r
+#if OS_SCHTBL_CNT!=0\r
+ {\r
+ OsCounterType *cPtr;\r
+ OsSchTblType *sPtr;\r
\r
- /* Add the schedule tables to counters */\r
- for(int i=0; i < Os_CfgGetSchedCnt(); i++ ) {\r
+ /* Add the schedule tables to counters */\r
+ for(int i=0; i < OS_SCHTBL_CNT; i++ ) {\r
\r
- sPtr = Os_CfgGetSched(i);\r
- cPtr = sPtr->counter;\r
- SLIST_INSERT_HEAD(&cPtr->sched_head, sPtr, sched_list);\r
+ sPtr = Os_CfgGetSched(i);\r
+ cPtr = sPtr->counter;\r
+ SLIST_INSERT_HEAD(&cPtr->sched_head, sPtr, sched_list);\r
+ }\r
}\r
+#endif\r
}\r
\r
\r
OS_DEBUG(D_EVENT,"# SetEvent %s\n",Os_TaskGetCurrent()->name);\r
\r
- if( TaskID >= Os_CfgGetTaskCnt() ) {\r
+ if( TaskID >= OS_TASK_CNT ) {\r
rv = E_OS_ID;\r
goto err;\r
}\r
OsPcbType *dest_pcb;\r
StatusType rv = E_OK;\r
\r
- if( TaskId >= Os_CfgGetTaskCnt() ) {\r
+ if( TaskId >= OS_TASK_CNT ) {\r
rv = E_OS_ID;\r
goto err;\r
}\r
os_sys.int_stack = int_stack.top + int_stack.size - 16;
// Init counter.. with alarms and schedule tables
+#if OS_COUNTER_CNT!=0
Os_CounterInit();
+#endif
+#if OS_SCHTBL_CNT!=0
Os_SchTblInit();
+#endif
// Put all tasks in the pcb list
// Put the one that belong in the ready queue there
// TODO: we should really hash on priority here to get speed, but I don't care for the moment
// TODO: Isn't this just EXTENED tasks ???
- for( i=0; i < Os_CfgGetTaskCnt(); i++) {
+ for( i=0; i < OS_TASK_CNT; i++) {
tmp_pcb = os_get_pcb(i);
assert(tmp_pcb->prio<=OS_TASK_PRIORITY_MAX);
}
/* Alarm autostart */
- for(int j=0; j < Os_CfgGetAlarmCnt(); j++ ) {
- OsAlarmType *alarmPtr;
- alarmPtr = Os_CfgGetAlarmObj(j);
- if(alarmPtr->autostartPtr != NULL ) {
- const OsAlarmAutostartType *autoPtr = alarmPtr->autostartPtr;
-
- if( os_sys.appMode & autoPtr->appModeRef) {
- if( autoPtr->autostartType == ALARM_AUTOSTART_ABSOLUTE ) {
- SetAbsAlarm(j,autoPtr->alarmTime, autoPtr->cycleTime);
- } else {
- SetRelAlarm(j,autoPtr->alarmTime, autoPtr->cycleTime);
- }
- }
- }
- }
+#if OS_ALARM_CNT!=0
+ Os_AlarmAutostart();
+#endif
+#if OS_SCHTBL_CNT!=0
Os_SchTblAutostart();
+#endif
// Set up the systick interrupt
{
*\r
*/\r
\r
-#define valid_standard_id() (rPtr->nr < Os_CfgGetResourceCnt()) //&& !(rPtr->type == RESOURCE_TYPE_INTERNAL) )\r
-#define valid_internal_id() (rPtr->nr < Os_CfgGetResourceCnt()) //&& (rPtr->type == RESOURCE_TYPE_INTERNAL) )\r
+#define valid_standard_id() (rPtr->nr < OS_RESOURCE_CNT) //&& !(rPtr->type == RESOURCE_TYPE_INTERNAL) )\r
+#define valid_internal_id() (rPtr->nr < OS_RESOURCE_CNT) //&& (rPtr->type == RESOURCE_TYPE_INTERNAL) )\r
\r
\r
void Os_ResourceAlloc( OsResourceType *rPtr, OsPcbType *pcbPtr) {\r
*\r
* Note that this applies both internal and standard resources.\r
* */\r
- for( int i=0; i < Os_CfgGetResourceCnt(); i++) {\r
+ for( int i=0; i < OS_RESOURCE_CNT; i++) {\r
rsrc_p = Os_CfgGetResource(i);\r
topPrio = 0;\r
\r
- for( int pi = 0; pi < Os_CfgGetTaskCnt(); pi++) {\r
+ for( int pi = 0; pi < OS_TASK_CNT; pi++) {\r
\r
pcb_p = os_get_pcb(pi);\r
\r
// Cancel\r
\r
#define SCHED_CHECK_ID(x) \\r
- if( (x) > Os_CfgGetSchedCnt()) { \\r
+ if( (x) > OS_SCHTBL_CNT) { \\r
rv = E_OS_ID; \\r
goto err; \\r
}\r
*/\r
void Os_SchTblInit( void ) {\r
OsSchTblType *s_p;\r
- for( int i=0; i < Os_CfgGetSchedCnt();i++ ) {\r
+ for( int i=0; i < OS_SCHTBL_CNT;i++ ) {\r
s_p = Os_CfgGetSched(i);\r
\r
ScheduleTableConsistenyCheck(s_p);\r
\r
void Os_SchTblAutostart( void ) {\r
\r
- for(int j=0; j < Os_CfgGetSchedCnt(); j++ ) {\r
+ for(int j=0; j < OS_SCHTBL_CNT; j++ ) {\r
OsSchTblType *sPtr;\r
sPtr = Os_CfgGetSched(j);\r
\r
/** @req OS067 */\r
\r
_Bool os_pcb_pid_valid( OsPcbType *restrict pcb ) {\r
- return ( pcb->pid > Os_CfgGetTaskCnt() ) ? 0 : 1;\r
+ return ( pcb->pid > OS_TASK_CNT ) ? 0 : 1;\r
}\r
/**\r
* Start an extended task.\r
\r
\r
#define TASK_CHECK_ID(x) \\r
- if( (x) > Os_CfgGetTaskCnt()) { \\r
+ if( (x) > OS_TASK_CNT) { \\r
rv = E_OS_ID; \\r
goto err; \\r
}\r