Eli Hughes
/
RobotPowerLogger-V2
For Terrance
Headers/FixedMath.h@0:085749c8446f, 2012-06-13 (annotated)
- Committer:
- emh203
- Date:
- Wed Jun 13 15:10:06 2012 +0000
- Revision:
- 0:085749c8446f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emh203 | 0:085749c8446f | 1 | #include "DataTypes.h" |
emh203 | 0:085749c8446f | 2 | |
emh203 | 0:085749c8446f | 3 | #ifndef FIXEDMATH_H_ |
emh203 | 0:085749c8446f | 4 | #define FIXEDMATH_H_ |
emh203 | 0:085749c8446f | 5 | |
emh203 | 0:085749c8446f | 6 | |
emh203 | 0:085749c8446f | 7 | typedef SIGNED_WORD FIXED_7_8; |
emh203 | 0:085749c8446f | 8 | typedef SIGNED_WORD FIXED_9_6; |
emh203 | 0:085749c8446f | 9 | |
emh203 | 0:085749c8446f | 10 | typedef SIGNED_WORD FIXED_0_15; |
emh203 | 0:085749c8446f | 11 | typedef SIGNED_WORD FIXED_1_14; |
emh203 | 0:085749c8446f | 12 | |
emh203 | 0:085749c8446f | 13 | |
emh203 | 0:085749c8446f | 14 | extern const FIXED_1_14 Fixed_1_14_SineTable [256]; |
emh203 | 0:085749c8446f | 15 | extern const FIXED_7_8 Fixed_7_8_SineTable [256]; |
emh203 | 0:085749c8446f | 16 | |
emh203 | 0:085749c8446f | 17 | #define FMul_15_0(A,B) (FIXED_0_15)(((FIXED_0_15)(A) * (FIXED_0_15 )(B))>>15) |
emh203 | 0:085749c8446f | 18 | #define FMul_7_8to0_15(A,B) (FIXED_7_8)(((FIXED_7_8)(A) * (FIXED_0_15)(B))>>15) |
emh203 | 0:085749c8446f | 19 | #define FMul_15_0to7_8(A,B) (SIGNED_WORD)(((SIGNED_WORD)(A) * (FIXED_7_8)(B))>>8) |
emh203 | 0:085749c8446f | 20 | |
emh203 | 0:085749c8446f | 21 | |
emh203 | 0:085749c8446f | 22 | |
emh203 | 0:085749c8446f | 23 | #define INT_7_8(A) (SIGNED_WORD)(A>>8) |
emh203 | 0:085749c8446f | 24 | #define INT_TO_7_8(A) ((FIXED_7_8)(A)<<8) |
emh203 | 0:085749c8446f | 25 | #define FRAC_7_8(A) (FIXED_7_8)(A&0xFF) |
emh203 | 0:085749c8446f | 26 | |
emh203 | 0:085749c8446f | 27 | #define INT_9_6(A) (SIGNED_WORD)(A>>6) |
emh203 | 0:085749c8446f | 28 | #define INT_TO_9_6(A) ((FIXED_9_6)(A)<<6) |
emh203 | 0:085749c8446f | 29 | #define FRAC_6_9(A) (FIXED_9_6)(A&0x3F) |
emh203 | 0:085749c8446f | 30 | |
emh203 | 0:085749c8446f | 31 | |
emh203 | 0:085749c8446f | 32 | |
emh203 | 0:085749c8446f | 33 | //#define FMul_15_0to0_15 (SIGNED_WORD)(((SIGNED_WORD)(A) * (FIXED_0_15)(B))>>16) |
emh203 | 0:085749c8446f | 34 | inline SIGNED_WORD FMul_15_0to0_15(SIGNED_WORD A,SIGNED_WORD B) |
emh203 | 0:085749c8446f | 35 | { |
emh203 | 0:085749c8446f | 36 | return (((long)(A) * (long)(B))>>15); |
emh203 | 0:085749c8446f | 37 | } |
emh203 | 0:085749c8446f | 38 | |
emh203 | 0:085749c8446f | 39 | inline SIGNED_WORD FMul_15_0to1_14(SIGNED_WORD A,SIGNED_WORD B) |
emh203 | 0:085749c8446f | 40 | { |
emh203 | 0:085749c8446f | 41 | long temp; |
emh203 | 0:085749c8446f | 42 | temp = (((long)(A) * (long)(B))>>13); |
emh203 | 0:085749c8446f | 43 | if(temp&0x01) |
emh203 | 0:085749c8446f | 44 | { |
emh203 | 0:085749c8446f | 45 | temp = temp>>1; |
emh203 | 0:085749c8446f | 46 | temp = temp +1; |
emh203 | 0:085749c8446f | 47 | } |
emh203 | 0:085749c8446f | 48 | else |
emh203 | 0:085749c8446f | 49 | { |
emh203 | 0:085749c8446f | 50 | temp = temp>>1; |
emh203 | 0:085749c8446f | 51 | } |
emh203 | 0:085749c8446f | 52 | return temp; |
emh203 | 0:085749c8446f | 53 | } |
emh203 | 0:085749c8446f | 54 | |
emh203 | 0:085749c8446f | 55 | //inline SIGNED_WORD ABS(A) |
emh203 | 0:085749c8446f | 56 | //{ |
emh203 | 0:085749c8446f | 57 | //if(A<0) |
emh203 | 0:085749c8446f | 58 | //return -A; |
emh203 | 0:085749c8446f | 59 | //else |
emh203 | 0:085749c8446f | 60 | //return A; |
emh203 | 0:085749c8446f | 61 | //} |
emh203 | 0:085749c8446f | 62 | |
emh203 | 0:085749c8446f | 63 | #endif /*FIXEDMATH_H_*/ |