24#ifndef TAPROOT_CMSIS_MAT_HPP_
25#define TAPROOT_CMSIS_MAT_HPP_
32#include "modm/architecture/utils.hpp"
43template <u
int16_t ROWS, u
int16_t COLS>
46 std::array<float, ROWS * COLS>
data;
51 CMSISMat(
const float (&initialData)[ROWS * COLS])
54 arm_mat_init_f32(&
matrix, ROWS, COLS,
data.data());
62 memcpy(&this->data, &other.
data,
sizeof(this->data));
68 this->data = std::move(other.data);
79 memcpy(&this->data, &other.
data,
sizeof(this->data));
86 this->data = std::move(other.data);
93 inline void copyData(
const float (&other)[ROWS * COLS])
95 for (
size_t i = 0;
i <
data.size();
i++)
111 for (
int i = 0;
i < ROWS;
i++)
113 for (
int j = 0; j < COLS; j++)
115 data[
i * COLS + j] = (
i == j) ? 1 : 0;
125 assert(ARM_MATH_SUCCESS == arm_mat_inverse_f32(&this->matrix, &ret.
matrix));
132 assert(ARM_MATH_SUCCESS == arm_mat_trans_f32(&this->matrix, &ret.
matrix));
139template <u
int16_t A_ROWS, u
int16_t A_COLS, u
int16_t B_ROWS, u
int16_t B_COLS>
145 A_ROWS == B_ROWS && A_COLS == B_COLS,
146 "Invalid size of CMSISMat matricies in operator+");
153template <u
int16_t A_ROWS, u
int16_t A_COLS, u
int16_t B_ROWS, u
int16_t B_COLS>
159 A_ROWS == B_ROWS && A_COLS == B_COLS,
160 "Invalid size of CMSISMat matricies in operator-");
167template <u
int16_t ROWS, u
int16_t COLS>
172 assert(ARM_MATH_SUCCESS == arm_mat_scale_f32(&a.
matrix, scale, &c.
matrix));
176template <u
int16_t A_ROWS, u
int16_t A_COLS, u
int16_t B_ROWS, u
int16_t B_COLS>
181 static_assert(A_COLS == B_ROWS,
"Invalid size of CMSISMat matricies in operator*");
188template <u
int16_t ROWS, u
int16_t COLS>
192 assert(ARM_MATH_SUCCESS == arm_mat_scale_f32(&a.
matrix, b, &c.
matrix));
196template <u
int16_t ROWS, u
int16_t COLS>
200 assert(ARM_MATH_SUCCESS == arm_mat_scale_f32(&a.
matrix, b, &c.
matrix));
204template <u
int16_t ROWS, u
int16_t COLS>
209 assert(ARM_MATH_SUCCESS == arm_mat_scale_f32(&a.
matrix, b, &c.
matrix));
IUnit i
Definition dimensional_smooth_pid.hpp:2
Definition ballistics.cpp:29
CMSISMat< A_ROWS, B_COLS > operator*(const CMSISMat< A_ROWS, A_COLS > &a, const CMSISMat< B_ROWS, B_COLS > &b)
Definition cmsis_mat.hpp:177
CMSISMat< ROWS, COLS > operator/(const CMSISMat< ROWS, COLS > &a, float b)
Definition cmsis_mat.hpp:205
CMSISMat< A_ROWS, A_COLS > operator+(const CMSISMat< A_ROWS, A_COLS > &a, const CMSISMat< B_ROWS, B_COLS > &b)
Definition cmsis_mat.hpp:140
CMSISMat< A_ROWS, A_COLS > operator-(const CMSISMat< A_ROWS, A_COLS > &a, const CMSISMat< B_ROWS, B_COLS > &b)
Definition cmsis_mat.hpp:154
Definition cmsis_mat.hpp:45
arm_matrix_instance_f32 matrix
Definition cmsis_mat.hpp:47
bool constructIdentityMatrix()
Definition cmsis_mat.hpp:104
CMSISMat< COLS, ROWS > transpose() const
Definition cmsis_mat.hpp:129
CMSISMat()
Definition cmsis_mat.hpp:49
CMSISMat(const CMSISMat &other)
Definition cmsis_mat.hpp:60
CMSISMat & operator=(CMSISMat &&other)
Definition cmsis_mat.hpp:84
void copyData(const float(&other)[ROWS *COLS])
Definition cmsis_mat.hpp:93
CMSISMat< COLS, ROWS > inverse() const
Definition cmsis_mat.hpp:122
CMSISMat & operator=(const CMSISMat &other)
Definition cmsis_mat.hpp:77
CMSISMat(const float(&initialData)[ROWS *COLS])
Definition cmsis_mat.hpp:51
CMSISMat(CMSISMat &&other)
Definition cmsis_mat.hpp:66
std::array< float, ROWS *COLS > data
Definition cmsis_mat.hpp:46