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 //* PROCESSOR: ARM Cortex-M3
daryl2110 0:57ece500234e 8 //*
daryl2110 0:57ece500234e 9 //* TOOLKIT: EWARM (IAR Systems)
daryl2110 0:57ece500234e 10 //*
daryl2110 0:57ece500234e 11 //* PURPOSE: Target Dependent Stuff Source
daryl2110 0:57ece500234e 12 //*
daryl2110 0:57ece500234e 13 //* Version: 3.10
daryl2110 0:57ece500234e 14 //*
daryl2110 0:57ece500234e 15 //* $Revision: 195 $
daryl2110 0:57ece500234e 16 //* $Date:: 2008-06-19 #$
daryl2110 0:57ece500234e 17 //*
daryl2110 0:57ece500234e 18 //* Copyright (c) 2003-2010, Harry E. Zhurov
daryl2110 0:57ece500234e 19 //*
daryl2110 0:57ece500234e 20 //* Permission is hereby granted, free of charge, to any person
daryl2110 0:57ece500234e 21 //* obtaining a copy of this software and associated documentation
daryl2110 0:57ece500234e 22 //* files (the "Software"), to deal in the Software without restriction,
daryl2110 0:57ece500234e 23 //* including without limitation the rights to use, copy, modify, merge,
daryl2110 0:57ece500234e 24 //* publish, distribute, sublicense, and/or sell copies of the Software,
daryl2110 0:57ece500234e 25 //* and to permit persons to whom the Software is furnished to do so,
daryl2110 0:57ece500234e 26 //* subject to the following conditions:
daryl2110 0:57ece500234e 27 //*
daryl2110 0:57ece500234e 28 //* The above copyright notice and this permission notice shall be included
daryl2110 0:57ece500234e 29 //* in all copies or substantial portions of the Software.
daryl2110 0:57ece500234e 30 //*
daryl2110 0:57ece500234e 31 //* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
daryl2110 0:57ece500234e 32 //* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
daryl2110 0:57ece500234e 33 //* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
daryl2110 0:57ece500234e 34 //* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
daryl2110 0:57ece500234e 35 //* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
daryl2110 0:57ece500234e 36 //* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
daryl2110 0:57ece500234e 37 //* THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
daryl2110 0:57ece500234e 38 //*
daryl2110 0:57ece500234e 39 //* =================================================================
daryl2110 0:57ece500234e 40 //* See http://scmrtos.sourceforge.net for documentation, latest
daryl2110 0:57ece500234e 41 //* information, license and contact details.
daryl2110 0:57ece500234e 42 //* =================================================================
daryl2110 0:57ece500234e 43 //*
daryl2110 0:57ece500234e 44 //******************************************************************************
daryl2110 0:57ece500234e 45 //* Ported by Andrey Chuikin, Copyright (c) 2008-2010
daryl2110 0:57ece500234e 46
daryl2110 0:57ece500234e 47
daryl2110 0:57ece500234e 48 #include <scmRTOS.h>
daryl2110 0:57ece500234e 49
daryl2110 0:57ece500234e 50 using namespace OS;
daryl2110 0:57ece500234e 51
daryl2110 0:57ece500234e 52 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 53 //
daryl2110 0:57ece500234e 54 // OS Process's constructor
daryl2110 0:57ece500234e 55 //
daryl2110 0:57ece500234e 56 // Performs:
daryl2110 0:57ece500234e 57 // * initializing process data;
daryl2110 0:57ece500234e 58 // * registering of the process in kernel;
daryl2110 0:57ece500234e 59 // * preparing stack frame;
daryl2110 0:57ece500234e 60 //
daryl2110 0:57ece500234e 61 //
daryl2110 0:57ece500234e 62 TBaseProcess::TBaseProcess(TStackItem* Stack, word stack_size, TPriority pr, void (*exec)())
daryl2110 0:57ece500234e 63 : StackPointer(Stack)
daryl2110 0:57ece500234e 64 , StackSize(stack_size)
daryl2110 0:57ece500234e 65 , Timeout(0)
daryl2110 0:57ece500234e 66 , Priority(pr)
daryl2110 0:57ece500234e 67 {
daryl2110 0:57ece500234e 68 Kernel.RegisterProcess(this);
daryl2110 0:57ece500234e 69
daryl2110 0:57ece500234e 70 #ifdef DEBUG_STACK
daryl2110 0:57ece500234e 71 //---------------------------------------------------------------
daryl2110 0:57ece500234e 72 // Fill stack area with some value to be able later to define stack usage
daryl2110 0:57ece500234e 73 for (StackPointer-=(StackSize/sizeof(TStackItem)); StackPointer < Stack; *(StackPointer++) = STACK_FILL_CONST);
daryl2110 0:57ece500234e 74 #endif //DEBUG_STACK
daryl2110 0:57ece500234e 75
daryl2110 0:57ece500234e 76 //---------------------------------------------------------------
daryl2110 0:57ece500234e 77 //
daryl2110 0:57ece500234e 78 // Prepare Process Stack Frame
daryl2110 0:57ece500234e 79 //
daryl2110 0:57ece500234e 80 *(--StackPointer) = 0x01000000L; // xPSR
daryl2110 0:57ece500234e 81 *(--StackPointer) = reinterpret_cast<dword>(exec); // Entry Point
daryl2110 0:57ece500234e 82 StackPointer -= 14; // emulate "push R14,R12,R3,R2,R1,R0,R11-R4"
daryl2110 0:57ece500234e 83
daryl2110 0:57ece500234e 84 // The code below can be used for debug purpose. In this case comment
daryl2110 0:57ece500234e 85 // line above and uncomment block below.
daryl2110 0:57ece500234e 86 /*
daryl2110 0:57ece500234e 87 *(--StackPointer) = 0xFFFFFFFEL; // R14 (LR) (init value will cause fault if ever used)
daryl2110 0:57ece500234e 88 *(--StackPointer) = 0x12121212L; // R12
daryl2110 0:57ece500234e 89 *(--StackPointer) = 0x03030303L; // R3
daryl2110 0:57ece500234e 90 *(--StackPointer) = 0x02020202L; // R2
daryl2110 0:57ece500234e 91 *(--StackPointer) = 0x01010101L; // R1
daryl2110 0:57ece500234e 92 *(--StackPointer) = 0x00000000L; // R0
daryl2110 0:57ece500234e 93
daryl2110 0:57ece500234e 94 // Remaining registers saved on process stack
daryl2110 0:57ece500234e 95 *(--StackPointer) = 0x11111111L; // R11
daryl2110 0:57ece500234e 96 *(--StackPointer) = 0x10101010L; // R10
daryl2110 0:57ece500234e 97 *(--StackPointer) = 0x09090909L; // R9
daryl2110 0:57ece500234e 98 *(--StackPointer) = 0x08080808L; // R8
daryl2110 0:57ece500234e 99 *(--StackPointer) = 0x07070707L; // R7
daryl2110 0:57ece500234e 100 *(--StackPointer) = 0x06060606L; // R6
daryl2110 0:57ece500234e 101 *(--StackPointer) = 0x05050505L; // R5
daryl2110 0:57ece500234e 102 *(--StackPointer) = 0x04040404L; // R4
daryl2110 0:57ece500234e 103 */
daryl2110 0:57ece500234e 104 }
daryl2110 0:57ece500234e 105 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 106 //
daryl2110 0:57ece500234e 107 // Idle Process
daryl2110 0:57ece500234e 108 //
daryl2110 0:57ece500234e 109 typedef process<prIDLE, scmRTOS_IDLE_PROCESS_STACK_SIZE> TIdleProcess;
daryl2110 0:57ece500234e 110
daryl2110 0:57ece500234e 111 TIdleProcess IdleProcess;
daryl2110 0:57ece500234e 112
daryl2110 0:57ece500234e 113 template<> OS_PROCESS void TIdleProcess::Exec()
daryl2110 0:57ece500234e 114 {
daryl2110 0:57ece500234e 115 for(;;)
daryl2110 0:57ece500234e 116 {
daryl2110 0:57ece500234e 117 #if scmRTOS_IDLE_HOOK_ENABLE == 1
daryl2110 0:57ece500234e 118 IdleProcessUserHook();
daryl2110 0:57ece500234e 119 #endif
daryl2110 0:57ece500234e 120 }
daryl2110 0:57ece500234e 121 }
daryl2110 0:57ece500234e 122 //------------------------------------------------------------------------------
daryl2110 0:57ece500234e 123 OS_INTERRUPT void OS::SysTick_Handler()
daryl2110 0:57ece500234e 124 {
daryl2110 0:57ece500234e 125 scmRTOS_ISRW_TYPE ISR;
daryl2110 0:57ece500234e 126
daryl2110 0:57ece500234e 127 Kernel.SystemTimer();
daryl2110 0:57ece500234e 128
daryl2110 0:57ece500234e 129 #if scmRTOS_SYSTIMER_NEST_INTS_ENABLE == 0
daryl2110 0:57ece500234e 130 DISABLE_NESTED_INTERRUPTS();
daryl2110 0:57ece500234e 131 #endif
daryl2110 0:57ece500234e 132
daryl2110 0:57ece500234e 133 #if scmRTOS_SYSTIMER_HOOK_ENABLE == 1
daryl2110 0:57ece500234e 134 SystemTimerUserHook();
daryl2110 0:57ece500234e 135 #endif
daryl2110 0:57ece500234e 136 }
daryl2110 0:57ece500234e 137 //------------------------------------------------------------------------------