Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

fixedpt.c

Go to the documentation of this file.
00001 /*! \file fixedpt.c \brief Fixed-point math function library. */
00002 //*****************************************************************************
00003 //
00004 // File Name    : 'fixedpt.c'
00005 // Title        : Fixed-point math function library
00006 // Author       : Pascal Stang - Copyright (C) 2003
00007 // Created      : 2003.01.26
00008 // Revised      : 2003.02.02
00009 // Version      : 0.1
00010 // Target MCU   : Atmel AVR Series
00011 // Editor Tabs  : 4
00012 //
00013 // NOTE: This code is currently below version 1.0, and therefore is considered
00014 // to be lacking in some functionality or documentation, or may not be fully
00015 // tested.  Nonetheless, you can expect most functions to work.
00016 //
00017 // This code is distributed under the GNU Public License
00018 //      which can be found at http://www.gnu.org/licenses/gpl.txt
00019 //
00020 //*****************************************************************************
00021 
00022 
00023 #include "fixedpt.h"
00024 
00025 // Program ROM constants
00026 
00027 // Global variables
00028 u08 FixedPtBits;
00029 
00030 // Functions
00031 
00032 // fixedptInit() initializes fixed-point math function library
00033 void fixedptInit(u08 fixedPtBits)
00034 {
00035     // set the number of bits to use behind the point
00036     FixedPtBits = fixedPtBits;
00037 }
00038 
00039 s32 fixedptConvertFromInt(s32 int_number)
00040 {
00041     // convert integer to fixed-point number
00042     return (int_number<<FixedPtBits);
00043 }
00044 
00045 s32 fixedptConvertToInt(s32 fp_number)
00046 {
00047     // convert fixed-point number to integer
00048     // do rounding
00049     if( fp_number & 1<<(FixedPtBits-1) )
00050     {
00051         // bit behind the point was a '1'
00052         // round up to next higher integer
00053         return (fp_number>>FixedPtBits)+1;
00054     }
00055     else
00056     {
00057         // bit behind the point was a '0'
00058         // round down (truncate) to next lower integer
00059         return (fp_number>>FixedPtBits);
00060     }
00061 }
00062 
00063 s32 fixedptAdd(s32 a, s32 b)
00064 {
00065     // add a and b (a+b) with fixed-point math
00066     return a+b;
00067 }
00068 
00069 s32 fixedptSubtract(s32 a, s32 b)
00070 {
00071     // subtract a and b (a-b) with fixed-point math
00072     return a-b;
00073 }
00074 
00075 s32 fixedptMultiply(s32 a, s32 b)
00076 {
00077     // multiply a and b (a*b) with fixed-point math
00078     return (a*b)>>FixedPtBits;
00079 }
00080 
00081 s32 fixedptDivide(s32 numer, s32 denom)
00082 {
00083     // divide numer by denom (numer/denom) with fixed-point math
00084     return (numer<<FixedPtBits)/denom;
00085 }

Generated on Sun Oct 29 03:41:06 2006 for Procyon AVRlib by  doxygen 1.4.2