Program to control an accelerometer, motors and a rangefinder using the ScmRTOS ported to mbed. (Work in progress and buggy)

Dependencies:   mbed

Committer:
jberry
Date:
Mon Nov 01 20:39:01 2010 +0000
Revision:
0:9b057566f9ee

        

Who changed what in which revision?

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