Subversion Repositories FlightCtrl

Rev

Rev 1821 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1821 Rev 1872
Line 1... Line 1...
1
#include "dongfangMath.h"
1
#include "dongfangMath.h"
2
#include <inttypes.h>
2
#include <inttypes.h>
3
#include <avr/pgmspace.h>
3
#include <avr/pgmspace.h>
Line -... Line 4...
-
 
4
 
-
 
5
// For scope debugging only!
-
 
6
#include "output.h"
-
 
7
 
-
 
8
// Debug
-
 
9
#include "uart0.h"
4
 
10
 
5
const int16_t SIN_TABLE[] PROGMEM = { (int16_t) (0.0 * MATH_UNIT_FACTOR + 0.5),
11
const int16_t SIN_TABLE[] PROGMEM = { (int16_t) (0.0 * MATH_UNIT_FACTOR + 0.5),
6
                (int16_t) (0.01745240643728351 * MATH_UNIT_FACTOR + 0.5),
12
    (int16_t) (0.01745240643728351 * MATH_UNIT_FACTOR + 0.5),
7
                (int16_t) (0.03489949670250097 * MATH_UNIT_FACTOR + 0.5),
13
    (int16_t) (0.03489949670250097 * MATH_UNIT_FACTOR + 0.5),
8
                (int16_t) (0.05233595624294383 * MATH_UNIT_FACTOR + 0.5),
14
    (int16_t) (0.05233595624294383 * MATH_UNIT_FACTOR + 0.5),
Line 188... Line 194...
188
                                (int16_t) (32767) };
194
        (int16_t) (32767) };
Line 189... Line 195...
189
 
195
 
190
int16_t int_sin(int32_t arg) {
196
int16_t int_sin(int32_t arg) {
191
        int8_t sign;
197
  int8_t sign;
192
        int16_t result;
198
  int16_t result;
193
        arg /= MATH_DRG_FACTOR;
199
  int16_t argp = arg / MATH_DRG_FACTOR;
194
        arg %= 360;
200
  argp %= 360;
195
        if (arg < 0) {
201
  if (argp < 0) {
196
                arg = -arg;
202
    argp = -argp;
197
                sign = -1;
203
    sign = -1;
198
        } else {
204
  } else {
199
                sign = 1;
205
    sign = 1;
200
        }
206
  }
201
        if (arg >= 90) {
207
  if (argp >= 90) {
202
                arg = 180 - arg;
208
    argp = 180 - argp;
203
        }
209
  }
204
        result = pgm_read_word(&SIN_TABLE[(uint8_t) arg]);
210
  result = pgm_read_word(&SIN_TABLE[(uint8_t) argp]);
205
        return (sign == 1) ? result : -result;
211
  return (sign == 1) ? result : -result;
Line 206... Line 212...
206
}
212
}
207
 
213
 
Line 212... Line 218...
212
}
218
}
Line 213... Line 219...
213
 
219
 
214
int16_t int_tan(int32_t arg) {
220
int16_t int_tan(int32_t arg) {
215
        int8_t sign = 1;
221
  int8_t sign = 1;
216
        int16_t result;
222
  int16_t result;
217
        arg /= MATH_DRG_FACTOR;
223
  int16_t argp = arg / MATH_DRG_FACTOR;
218
        if (arg >= 90) {
224
  if (argp >= 90) {
219
                arg = 180 - arg;
225
    argp = 180 - argp;
220
                sign = -1;
226
    sign = -1;
221
        } else if (arg < -90) {
227
  } else if (argp < -90) {
222
                arg += 180;
228
    argp += 180;
223
        } else if (arg < 0) {
229
  } else if (argp < 0) {
224
                arg = -arg;
230
    argp = -argp;
225
                sign = -1;
231
    sign = -1;
226
        }
232
  }
227
        result = pgm_read_word(&TAN_TABLE[(uint8_t) arg]);
233
  result = pgm_read_word(&TAN_TABLE[(uint8_t) argp]);
228
        return (sign == 1) ? result : -result;
234
  return (sign == 1) ? result : -result;