diff options
author | Yilun Lin <yllin@google.com> | 2018-10-04 10:19:57 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-10-04 12:55:53 -0700 |
commit | 315aaca9467f49bc432ef5f2de9c0e3bb56f0251 (patch) | |
tree | 3ea739aca1db340e93b9daee7958d5afc5c9f31f /include | |
parent | ece03ab4d09b157c5e6f3c4fe0446678c0d8684b (diff) | |
download | chrome-ec-315aaca9467f49bc432ef5f2de9c0e3bb56f0251.tar.gz |
mag_cal: Support fixed-point calculation.
Modified from floating point version. This includes changes to
vec3, vec4, mat33, mat44, and mag_cal.
Now fixed-point type (fp_*) functions is a function wrapper for both
fixed-point and floating point version operations:
* define CONFIG_FPU to use floating version mag_cal
* undef CONFIG_FPU to use fixed-point version mag_cal
Also, add tests for both float and fp types operations.
TEST=define CONFIG_FPU; flash on reef; See ARC++ magnetmeter app moving.
TEST=undef CONFIG_FPU; flash on reef; See ARC++ magnetmeter app moving.
TEST=make runtests -j
TEST=make buildalltests -j
BUG=b:113364863
BRANCH=None
Change-Id: Ie695945acb666912babb2a603e09c602a0624d44
Signed-off-by: Yilun Lin <yllin@google.com>
Reviewed-on: https://chromium-review.googlesource.com/1260704
Commit-Ready: Yilun Lin <yllin@chromium.org>
Tested-by: Yilun Lin <yllin@chromium.org>
Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/mag_cal.h | 6 | ||||
-rw-r--r-- | include/mat33.h | 22 | ||||
-rw-r--r-- | include/mat44.h | 13 | ||||
-rw-r--r-- | include/vec3.h | 12 | ||||
-rw-r--r-- | include/vec4.h | 3 |
5 files changed, 31 insertions, 25 deletions
diff --git a/include/mag_cal.h b/include/mag_cal.h index 753052f55f..b0b35ded6f 100644 --- a/include/mag_cal.h +++ b/include/mag_cal.h @@ -29,9 +29,9 @@ struct mag_cal_t { * | x | y | z | 1 | * +----+----+----+----+ */ - mat44_float_t acc; - floatv4_t acc_w; - float radius; + mat44_fp_t acc; + fpv4_t acc_w; + fp_t radius; intv3_t bias; diff --git a/include/mat33.h b/include/mat33.h index 0b8b0123cb..fdd7e954ac 100644 --- a/include/mat33.h +++ b/include/mat33.h @@ -7,25 +7,25 @@ #define __CROS_EC_MAT_33_H -#include "vec3.h" +#include "math_util.h" #include "util.h" +#include "vec3.h" typedef float mat33_float_t[3][3]; typedef size_t sizev3_t[3]; -void init_zero_matrix(mat33_float_t A); -void init_diagonal_matrix(mat33_float_t A, float x); - -void mat33_float_scalar_mul(mat33_float_t A, float c); +void mat33_fp_init_zero(mat33_fp_t A); +void mat33_fp_init_diagonal(mat33_fp_t A, fp_t x); -void mat33_float_swap_rows(mat33_float_t A, const size_t i, const size_t j); +void mat33_fp_scalar_mul(mat33_fp_t A, fp_t c); -void mat33_float_get_eigenbasis(mat33_float_t S, floatv3_t eigenvals, - mat33_float_t eigenvecs); +void mat33_fp_swap_rows(mat33_fp_t A, const size_t i, const size_t j); -size_t mat33_float_maxind(mat33_float_t A, size_t k); +void mat33_fp_get_eigenbasis(mat33_fp_t S, fpv3_t eigenvals, + mat33_fp_t eigenvecs); -void mat33_float_rotate(mat33_float_t A, float c, float s, - size_t k, size_t l, size_t i, size_t j); +size_t mat33_fp_maxind(mat33_fp_t A, size_t k); +void mat33_fp_rotate(mat33_fp_t A, fp_t c, fp_t s, + size_t k, size_t l, size_t i, size_t j); #endif /* __CROS_EC_MAT_33_H */ diff --git a/include/mat44.h b/include/mat44.h index d8a8209055..2faa093c8e 100644 --- a/include/mat44.h +++ b/include/mat44.h @@ -8,17 +8,18 @@ #define __CROS_EC_MAT_44_H -#include "vec4.h" +#include "math_util.h" #include "util.h" +#include "vec4.h" typedef float mat44_float_t[4][4]; +typedef fp_t mat44_fp_t[4][4]; typedef size_t sizev4_t[4]; -void mat44_float_decompose_lup(mat44_float_t LU, sizev4_t pivot); - -void mat44_float_swap_rows(mat44_float_t A, const size_t i, const size_t j); +void mat44_fp_decompose_lup(mat44_fp_t LU, sizev4_t pivot); -void mat44_float_solve(mat44_float_t A, floatv4_t x, const floatv4_t b, - const sizev4_t pivot); +void mat44_fp_swap_rows(mat44_fp_t A, const size_t i, const size_t j); +void mat44_fp_solve(mat44_fp_t A, fpv4_t x, const fpv4_t b, + const sizev4_t pivot); #endif /* __CROS_EC_MAT_44_H */ diff --git a/include/vec3.h b/include/vec3.h index 367956b2a1..39514157dd 100644 --- a/include/vec3.h +++ b/include/vec3.h @@ -7,11 +7,13 @@ #ifndef __CROS_EC_VEC_3_H #define __CROS_EC_VEC_3_H -typedef float floatv3_t[3]; +#include "math_util.h" -void floatv3_scalar_mul(floatv3_t v, float c); -float floatv3_dot(const floatv3_t v, const floatv3_t w); -float floatv3_norm_squared(const floatv3_t v); -float floatv3_norm(const floatv3_t v); +typedef float floatv3_t[3]; +typedef fp_t fpv3_t[3]; +void fpv3_scalar_mul(fpv3_t v, fp_t c); +fp_t fpv3_dot(const fpv3_t v, const fpv3_t w); +fp_t fpv3_norm_squared(const fpv3_t v); +fp_t fpv3_norm(const fpv3_t v); #endif /* __CROS_EC_VEC_3_H */ diff --git a/include/vec4.h b/include/vec4.h index 05257e584b..b35431c098 100644 --- a/include/vec4.h +++ b/include/vec4.h @@ -7,7 +7,10 @@ #define __CROS_EC_VEC_4_H +#include "math_util.h" + typedef float floatv4_t[4]; +typedef fp_t fpv4_t[4]; #endif /* __CROS_EC_VEC_4_H */ |