Dependencies:   mbed

Committer:
mbed714
Date:
Tue Sep 21 19:48:05 2010 +0000
Revision:
0:331db0b44b67

        

Who changed what in which revision?

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