This program control a 5 axis arm robot from lynx motion

Dependencies:   TextLCD mbed

Committer:
msimmerl
Date:
Tue Feb 15 07:49:25 2011 +0000
Revision:
0:b6608b36efd7

        

Who changed what in which revision?

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