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 //* PURPOSE: User Suport Library Source
jberry 0:9b057566f9ee 8 //*
jberry 0:9b057566f9ee 9 //* Version: 3.10
jberry 0:9b057566f9ee 10 //*
jberry 0:9b057566f9ee 11 //* $Revision: 256 $
jberry 0:9b057566f9ee 12 //* $Date:: 2010-01-22 #$
jberry 0:9b057566f9ee 13 //*
jberry 0:9b057566f9ee 14 //* Copyright (c) 2003-2010, Harry E. Zhurov
jberry 0:9b057566f9ee 15 //*
jberry 0:9b057566f9ee 16 //* Permission is hereby granted, free of charge, to any person
jberry 0:9b057566f9ee 17 //* obtaining a copy of this software and associated documentation
jberry 0:9b057566f9ee 18 //* files (the "Software"), to deal in the Software without restriction,
jberry 0:9b057566f9ee 19 //* including without limitation the rights to use, copy, modify, merge,
jberry 0:9b057566f9ee 20 //* publish, distribute, sublicense, and/or sell copies of the Software,
jberry 0:9b057566f9ee 21 //* and to permit persons to whom the Software is furnished to do so,
jberry 0:9b057566f9ee 22 //* subject to the following conditions:
jberry 0:9b057566f9ee 23 //*
jberry 0:9b057566f9ee 24 //* The above copyright notice and this permission notice shall be included
jberry 0:9b057566f9ee 25 //* in all copies or substantial portions of the Software.
jberry 0:9b057566f9ee 26 //*
jberry 0:9b057566f9ee 27 //* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
jberry 0:9b057566f9ee 28 //* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
jberry 0:9b057566f9ee 29 //* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
jberry 0:9b057566f9ee 30 //* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
jberry 0:9b057566f9ee 31 //* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
jberry 0:9b057566f9ee 32 //* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
jberry 0:9b057566f9ee 33 //* THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
jberry 0:9b057566f9ee 34 //*
jberry 0:9b057566f9ee 35 //* =================================================================
jberry 0:9b057566f9ee 36 //* See http://scmrtos.sourceforge.net for documentation, latest
jberry 0:9b057566f9ee 37 //* information, license and contact details.
jberry 0:9b057566f9ee 38 //* =================================================================
jberry 0:9b057566f9ee 39 //*
jberry 0:9b057566f9ee 40 //******************************************************************************
jberry 0:9b057566f9ee 41
jberry 0:9b057566f9ee 42 #include <usrlib.h>
jberry 0:9b057566f9ee 43 #include <commdefs.h>
jberry 0:9b057566f9ee 44
jberry 0:9b057566f9ee 45 using namespace usr;
jberry 0:9b057566f9ee 46
jberry 0:9b057566f9ee 47 //------------------------------------------------------------------------------
jberry 0:9b057566f9ee 48 //
jberry 0:9b057566f9ee 49 /// Circular buffer function-member description
jberry 0:9b057566f9ee 50 //
jberry 0:9b057566f9ee 51 //
jberry 0:9b057566f9ee 52 //
jberry 0:9b057566f9ee 53 TCbuf::TCbuf(byte* const Address, const byte Size) :
jberry 0:9b057566f9ee 54 buf(Address),
jberry 0:9b057566f9ee 55 size(Size),
jberry 0:9b057566f9ee 56 count(0),
jberry 0:9b057566f9ee 57 first(0),
jberry 0:9b057566f9ee 58 last(0)
jberry 0:9b057566f9ee 59 {
jberry 0:9b057566f9ee 60 }
jberry 0:9b057566f9ee 61 //------------------------------------------------------------------------------
jberry 0:9b057566f9ee 62 bool TCbuf::write(const byte* data, const byte Count)
jberry 0:9b057566f9ee 63 {
jberry 0:9b057566f9ee 64 if( Count > (size - count) )
jberry 0:9b057566f9ee 65 return false;
jberry 0:9b057566f9ee 66
jberry 0:9b057566f9ee 67 for(byte i = 0; i < Count; i++)
jberry 0:9b057566f9ee 68 push(*(data++));
jberry 0:9b057566f9ee 69
jberry 0:9b057566f9ee 70 return true;
jberry 0:9b057566f9ee 71 }
jberry 0:9b057566f9ee 72 //------------------------------------------------------------------------------
jberry 0:9b057566f9ee 73 void TCbuf::read(byte* data, const byte Count)
jberry 0:9b057566f9ee 74 {
jberry 0:9b057566f9ee 75 byte N = Count <= count ? Count : count;
jberry 0:9b057566f9ee 76
jberry 0:9b057566f9ee 77 for(byte i = 0; i < N; i++)
jberry 0:9b057566f9ee 78 data[i] = pop();
jberry 0:9b057566f9ee 79 }
jberry 0:9b057566f9ee 80 //------------------------------------------------------------------------------
jberry 0:9b057566f9ee 81 byte TCbuf::get_byte(const byte index) const
jberry 0:9b057566f9ee 82 {
jberry 0:9b057566f9ee 83 byte x = first + index;
jberry 0:9b057566f9ee 84
jberry 0:9b057566f9ee 85 if(x < size)
jberry 0:9b057566f9ee 86 return buf[x];
jberry 0:9b057566f9ee 87 else
jberry 0:9b057566f9ee 88 return buf[x - size];
jberry 0:9b057566f9ee 89 }
jberry 0:9b057566f9ee 90
jberry 0:9b057566f9ee 91 //------------------------------------------------------------------------------
jberry 0:9b057566f9ee 92 bool TCbuf::put(const byte item)
jberry 0:9b057566f9ee 93 {
jberry 0:9b057566f9ee 94 if(count == size)
jberry 0:9b057566f9ee 95 return false;
jberry 0:9b057566f9ee 96
jberry 0:9b057566f9ee 97 push(item);
jberry 0:9b057566f9ee 98 return true;
jberry 0:9b057566f9ee 99 }
jberry 0:9b057566f9ee 100 //------------------------------------------------------------------------------
jberry 0:9b057566f9ee 101 byte TCbuf::get()
jberry 0:9b057566f9ee 102 {
jberry 0:9b057566f9ee 103 if(count)
jberry 0:9b057566f9ee 104 return pop();
jberry 0:9b057566f9ee 105 else
jberry 0:9b057566f9ee 106 return 0;
jberry 0:9b057566f9ee 107 }
jberry 0:9b057566f9ee 108 //------------------------------------------------------------------------------
jberry 0:9b057566f9ee 109 //
jberry 0:9b057566f9ee 110 /// \note
jberry 0:9b057566f9ee 111 /// For internal purposes.
jberry 0:9b057566f9ee 112 /// Use this function with care - it doesn't perform free size check.
jberry 0:9b057566f9ee 113 //
jberry 0:9b057566f9ee 114 void TCbuf::push(const byte item)
jberry 0:9b057566f9ee 115 {
jberry 0:9b057566f9ee 116 buf[last] = item;
jberry 0:9b057566f9ee 117 last++;
jberry 0:9b057566f9ee 118 count++;
jberry 0:9b057566f9ee 119
jberry 0:9b057566f9ee 120 if(last == size)
jberry 0:9b057566f9ee 121 last = 0;
jberry 0:9b057566f9ee 122 }
jberry 0:9b057566f9ee 123 //------------------------------------------------------------------------------
jberry 0:9b057566f9ee 124 //
jberry 0:9b057566f9ee 125 /// \note
jberry 0:9b057566f9ee 126 /// For internal purposes.
jberry 0:9b057566f9ee 127 /// Use this function with care - it doesn't perform free size check.
jberry 0:9b057566f9ee 128 //
jberry 0:9b057566f9ee 129 byte TCbuf::pop()
jberry 0:9b057566f9ee 130 {
jberry 0:9b057566f9ee 131 byte item = buf[first];
jberry 0:9b057566f9ee 132
jberry 0:9b057566f9ee 133 count--;
jberry 0:9b057566f9ee 134 first++;
jberry 0:9b057566f9ee 135 if(first == size)
jberry 0:9b057566f9ee 136 first = 0;
jberry 0:9b057566f9ee 137
jberry 0:9b057566f9ee 138 return item;
jberry 0:9b057566f9ee 139 }
jberry 0:9b057566f9ee 140 //------------------------------------------------------------------------------