/***************************************************************************************************** * Function: SchM_Start * * Description: Starts the scheduler * * Caveats: *****************************************************************************************************/ void SchM_Start(void) { u16 index_a; u16 index_b; u16 index_ControlBlock; /*Start the timer for the OS tick*/ Gpt_StartTimer(CHANNEL_0, 500u); //Gpt_StartTimer(CHANNEL_1, 20000u); //Gpt_StartTimer(CHANNEL_2, 40020u); /*Enable notification*/ Gpt_EnableNotification(CHANNEL_0); Gpt_EnableNotification(CHANNEL_1); Gpt_EnableNotification(CHANNEL_2); /* Initialize Dispacher Array Vector */ for(index_a=0U;index_a < MAX_PRIORITY;index_a++) { for(index_b=0U;index_b < CNF_MAXTASKQUEUE;index_b++) { DispacherArray[index_a][index_b] = 0xFFFF; } } BackgroundControlBlock.BackgroundContextSave.CCR_TaskContext_u16 = 0U; BackgroundControlBlock.BackgroundContextSave.D_TaskContext_u16 = 0U; BackgroundControlBlock.BackgroundContextSave.X_TaskContext_u16 = 0U; BackgroundControlBlock.BackgroundContextSave.Y_TaskContext_u16 = 0U; BackgroundControlBlock.BackgroundContextSave.PC_TaskContext_u16 = 0U; BackgroundControlBlock.BackgroundContextSave.PPAGE_TaskContext_u16 = 0U; BackgroundControlBlock.BackgroundContextSave.SP_TaskContext_u16 = 0U; BackgroundControlBlock.BackgroundInterrupted = TASK_NOPREEMPTED; TaskControlBlock = ((Task_Control_Block *__far)Mem_Alloc((MAX_NUM_TASK*sizeof(Task_Control_Block)))); for(index_ControlBlock=0U;index_ControlBlock < MAX_NUM_TASK;index_ControlBlock++) { TaskControlBlock[index_ControlBlock].Task_ID = TaskConfigInitial->ptr_Task[index_ControlBlock].Task_ID; TaskControlBlock[index_ControlBlock].Task_Priority = TaskConfigInitial->ptr_Task[index_ControlBlock].Task_Priority; TaskControlBlock[index_ControlBlock].Task_State = SUSPENDED; TaskControlBlock[index_ControlBlock].Stack_Information.StartAddress = 0U; TaskControlBlock[index_ControlBlock].Stack_Information.EndAddress = 0U; TaskControlBlock[index_ControlBlock].Task_Deadline.Relative = 0U; TaskControlBlock[index_ControlBlock].Task_Deadline.Absolute = 0U; TaskControlBlock[index_ControlBlock].Task_ContextSave.CCR_TaskContext_u16 = 0U; TaskControlBlock[index_ControlBlock].Task_ContextSave.D_TaskContext_u16 = 0U; TaskControlBlock[index_ControlBlock].Task_ContextSave.X_TaskContext_u16 = 0U; TaskControlBlock[index_ControlBlock].Task_ContextSave.Y_TaskContext_u16 = 0U; TaskControlBlock[index_ControlBlock].Task_ContextSave.PC_TaskContext_u16 = 0U; TaskControlBlock[index_ControlBlock].Task_ContextSave.PPAGE_TaskContext_u16 = 0U; TaskControlBlock[index_ControlBlock].Task_ContextSave.SP_TaskContext_u16 = 0U; TaskControlBlock[index_ControlBlock].Task_Interrupted = TASK_NOPREEMPTED; TaskControlBlock[index_ControlBlock].Task_Mode = PERIODIC; } while(1) { SchM_Background(); _FEED_COP(); } }
/** * \brief Scheduler start * \author Gerardo Valdovinos * \param void * \return void */ void SchM_Start(void) { /* Initialize OsTick timer */ Gpt_EnableNotification(0); Gpt_StartTimer(0); /* Go to a background task */ SchM_Background(); }