Dependencies:   keypad SDHCFileSystem TextLCD mbed FPointer wave_player

Committer:
daryl2110
Date:
Mon Feb 20 07:32:56 2012 +0000
Revision:
0:57ece500234e

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daryl2110 0:57ece500234e 1 //******************************************************************************
daryl2110 0:57ece500234e 2 //*
daryl2110 0:57ece500234e 3 //* FULLNAME: Single-Chip Microcontroller Real-Time Operating System
daryl2110 0:57ece500234e 4 //*
daryl2110 0:57ece500234e 5 //* NICKNAME: scmRTOS
daryl2110 0:57ece500234e 6 //*
daryl2110 0:57ece500234e 7 //* PURPOSE: OS Kernel Source
daryl2110 0:57ece500234e 8 //*
daryl2110 0:57ece500234e 9 //* Version: 3.10
daryl2110 0:57ece500234e 10 //*
daryl2110 0:57ece500234e 11 //* $Revision: 256 $
daryl2110 0:57ece500234e 12 //* $Date:: 2010-01-22 #$
daryl2110 0:57ece500234e 13 //*
daryl2110 0:57ece500234e 14 //* Copyright (c) 2003-2010, Harry E. Zhurov
daryl2110 0:57ece500234e 15 //*
daryl2110 0:57ece500234e 16 //* Permission is hereby granted, free of charge, to any person
daryl2110 0:57ece500234e 17 //* obtaining a copy of this software and associated documentation
daryl2110 0:57ece500234e 18 //* files (the "Software"), to deal in the Software without restriction,
daryl2110 0:57ece500234e 19 //* including without limitation the rights to use, copy, modify, merge,
daryl2110 0:57ece500234e 20 //* publish, distribute, sublicense, and/or sell copies of the Software,
daryl2110 0:57ece500234e 21 //* and to permit persons to whom the Software is furnished to do so,
daryl2110 0:57ece500234e 22 //* subject to the following conditions:
daryl2110 0:57ece500234e 23 //*
daryl2110 0:57ece500234e 24 //* The above copyright notice and this permission notice shall be included
daryl2110 0:57ece500234e 25 //* in all copies or substantial portions of the Software.
daryl2110 0:57ece500234e 26 //*
daryl2110 0:57ece500234e 27 //* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
daryl2110 0:57ece500234e 28 //* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
daryl2110 0:57ece500234e 29 //* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
daryl2110 0:57ece500234e 30 //* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
daryl2110 0:57ece500234e 31 //* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
daryl2110 0:57ece500234e 32 //* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
daryl2110 0:57ece500234e 33 //* THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
daryl2110 0:57ece500234e 34 //*
daryl2110 0:57ece500234e 35 //* =================================================================
daryl2110 0:57ece500234e 36 //* See http://scmrtos.sourceforge.net for documentation, latest
daryl2110 0:57ece500234e 37 //* information, license and contact details.
daryl2110 0:57ece500234e 38 //* =================================================================
daryl2110 0:57ece500234e 39 //*
daryl2110 0:57ece500234e 40 //******************************************************************************
daryl2110 0:57ece500234e 41
daryl2110 0:57ece500234e 42 #include "scmRTOS.h"
daryl2110 0:57ece500234e 43
daryl2110 0:57ece500234e 44 using namespace OS;
daryl2110 0:57ece500234e 45 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 46 OS::TKernel OS::Kernel;
daryl2110 0:57ece500234e 47
daryl2110 0:57ece500234e 48 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 49 #if scmRTOS_CONTEXT_SWITCH_SCHEME == 0
daryl2110 0:57ece500234e 50 void TKernel::Sched()
daryl2110 0:57ece500234e 51 {
daryl2110 0:57ece500234e 52 byte NextPrty = GetHighPriority(ReadyProcessMap);
daryl2110 0:57ece500234e 53 if(NextPrty != CurProcPriority)
daryl2110 0:57ece500234e 54 {
daryl2110 0:57ece500234e 55 TStackItem* Next_SP = ProcessTable[NextPrty]->StackPointer;
daryl2110 0:57ece500234e 56 TStackItem** Curr_SP_addr = &(ProcessTable[CurProcPriority]->StackPointer);
daryl2110 0:57ece500234e 57 CurProcPriority = NextPrty;
daryl2110 0:57ece500234e 58 OS_ContextSwitcher(Curr_SP_addr, Next_SP);
daryl2110 0:57ece500234e 59 }
daryl2110 0:57ece500234e 60 }
daryl2110 0:57ece500234e 61 #else
daryl2110 0:57ece500234e 62 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 63 void TKernel::Sched()
daryl2110 0:57ece500234e 64 {
daryl2110 0:57ece500234e 65 byte NextPrty = GetHighPriority(ReadyProcessMap);
daryl2110 0:57ece500234e 66 if(NextPrty != CurProcPriority)
daryl2110 0:57ece500234e 67 {
daryl2110 0:57ece500234e 68 SchedProcPriority = NextPrty;
daryl2110 0:57ece500234e 69
daryl2110 0:57ece500234e 70 RaiseContextSwitch();
daryl2110 0:57ece500234e 71 do
daryl2110 0:57ece500234e 72 {
daryl2110 0:57ece500234e 73 EnableContextSwitch();
daryl2110 0:57ece500234e 74 DUMMY_INSTR();
daryl2110 0:57ece500234e 75 DisableContextSwitch();
daryl2110 0:57ece500234e 76 }
daryl2110 0:57ece500234e 77 while(!IsContextSwitchDone());
daryl2110 0:57ece500234e 78 }
daryl2110 0:57ece500234e 79 }
daryl2110 0:57ece500234e 80 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 81 TStackItem* OS_ContextSwitchHook(TStackItem* sp) { return OS::Kernel.ContextSwitchHook(sp); }
daryl2110 0:57ece500234e 82 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 83 #endif // scmRTOS_CONTEXT_SWITCH_SCHEME
daryl2110 0:57ece500234e 84 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 85 void TBaseProcess::Sleep(TTimeout timeout)
daryl2110 0:57ece500234e 86 {
daryl2110 0:57ece500234e 87 TCritSect cs;
daryl2110 0:57ece500234e 88
daryl2110 0:57ece500234e 89 Kernel.ProcessTable[Kernel.CurProcPriority]->Timeout = timeout;
daryl2110 0:57ece500234e 90 Kernel.SetProcessUnready(Kernel.CurProcPriority);
daryl2110 0:57ece500234e 91 Kernel.Scheduler();
daryl2110 0:57ece500234e 92 }
daryl2110 0:57ece500234e 93 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 94 void OS::WakeUpProcess(TBaseProcess& p)
daryl2110 0:57ece500234e 95 {
daryl2110 0:57ece500234e 96 TCritSect cs;
daryl2110 0:57ece500234e 97
daryl2110 0:57ece500234e 98 if(p.Timeout)
daryl2110 0:57ece500234e 99 {
daryl2110 0:57ece500234e 100 p.Timeout = 0;
daryl2110 0:57ece500234e 101 Kernel.SetProcessReady(p.Priority);
daryl2110 0:57ece500234e 102 Kernel.Scheduler();
daryl2110 0:57ece500234e 103 }
daryl2110 0:57ece500234e 104 }
daryl2110 0:57ece500234e 105 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 106 void OS::ForceWakeUpProcess(TBaseProcess& p)
daryl2110 0:57ece500234e 107 {
daryl2110 0:57ece500234e 108 TCritSect cs;
daryl2110 0:57ece500234e 109
daryl2110 0:57ece500234e 110 p.Timeout = 0;
daryl2110 0:57ece500234e 111 Kernel.SetProcessReady(p.Priority);
daryl2110 0:57ece500234e 112 Kernel.Scheduler();
daryl2110 0:57ece500234e 113 }
daryl2110 0:57ece500234e 114 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 115