From 5515304b4f3cf3bd15a63678ec852827dfa1cc55 Mon Sep 17 00:00:00 2001 From: Thefeli73 Date: Thu, 15 Apr 2021 22:10:45 +0200 Subject: [PATCH] new lqr --- simulink_export_no_kalman/Arduino_skal.cpp | 292 ++++++++++++++++++ simulink_export_no_kalman/Arduino_skal.h | 228 ++++++++++++++ .../Arduino_skal_data.cpp | 58 ++++ simulink_export_no_kalman/buildInfo.mat | Bin 0 -> 11898 bytes simulink_export_no_kalman/build_exception.mat | Bin 0 -> 1434 bytes simulink_export_no_kalman/codeInfo.mat | Bin 0 -> 3636 bytes simulink_export_no_kalman/codedescriptor.dmr | Bin 0 -> 479232 bytes simulink_export_no_kalman/defines.txt | 14 + simulink_export_no_kalman/ert_main.cpp | 102 ++++++ simulink_export_no_kalman/make_exception.mat | Bin 0 -> 881 bytes simulink_export_no_kalman/modelsources.txt | 2 + simulink_export_no_kalman/rtw_proj.tmw | 4 + simulink_export_no_kalman/rtwtypes.h | 106 +++++++ simulink_export_no_kalman/rtwtypeschksum.mat | Bin 0 -> 1510 bytes .../tmwinternal/simulink_cache.xml | 6 + simulink_export_no_kalman/tmwinternal/tr | Bin 0 -> 41703 bytes 16 files changed, 812 insertions(+) create mode 100644 simulink_export_no_kalman/Arduino_skal.cpp create mode 100644 simulink_export_no_kalman/Arduino_skal.h create mode 100644 simulink_export_no_kalman/Arduino_skal_data.cpp create mode 100644 simulink_export_no_kalman/buildInfo.mat create mode 100644 simulink_export_no_kalman/build_exception.mat create mode 100644 simulink_export_no_kalman/codeInfo.mat create mode 100644 simulink_export_no_kalman/codedescriptor.dmr create mode 100644 simulink_export_no_kalman/defines.txt create mode 100644 simulink_export_no_kalman/ert_main.cpp create mode 100644 simulink_export_no_kalman/make_exception.mat create mode 100644 simulink_export_no_kalman/modelsources.txt create mode 100644 simulink_export_no_kalman/rtw_proj.tmw create mode 100644 simulink_export_no_kalman/rtwtypes.h create mode 100644 simulink_export_no_kalman/rtwtypeschksum.mat create mode 100644 simulink_export_no_kalman/tmwinternal/simulink_cache.xml create mode 100644 simulink_export_no_kalman/tmwinternal/tr diff --git a/simulink_export_no_kalman/Arduino_skal.cpp b/simulink_export_no_kalman/Arduino_skal.cpp new file mode 100644 index 0000000..5305352 --- /dev/null +++ b/simulink_export_no_kalman/Arduino_skal.cpp @@ -0,0 +1,292 @@ +// +// Academic License - for use in teaching, academic research, and meeting +// course requirements at degree granting institutions only. Not for +// government, commercial, or other organizational use. +// +// File: Arduino_skal.cpp +// +// Code generated for Simulink model 'Arduino_skal'. +// +// Model version : 1.1 +// Simulink Coder version : 9.5 (R2021a) 14-Nov-2020 +// C/C++ source code generated on : Thu Apr 15 22:06:00 2021 +// +// Target selection: ert.tlc +// Embedded hardware selection: AMD->x86-64 (Windows64) +// Code generation objectives: +// 1. Execution efficiency +// 2. RAM efficiency +// Validation result: Not run +// +#include "Arduino_skal.h" + +// Private macros used by the generated code to access rtModel +#ifndef rtmIsMajorTimeStep +#define rtmIsMajorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MAJOR_TIME_STEP) +#endif + +#ifndef rtmIsMinorTimeStep +#define rtmIsMinorTimeStep(rtm) (((rtm)->Timing.simTimeStep) == MINOR_TIME_STEP) +#endif + +#ifndef rtmSetTPtr +#define rtmSetTPtr(rtm, val) ((rtm)->Timing.t = (val)) +#endif + +// private model entry point functions +extern void Arduino_skal_derivatives(); + +// +// This function updates continuous states using the ODE3 fixed-step +// solver algorithm +// +void Arduino_skalModelClass::rt_ertODEUpdateContinuousStates(RTWSolverInfo *si ) +{ + // Solver Matrices + static const real_T rt_ODE3_A[3] = { + 1.0/2.0, 3.0/4.0, 1.0 + }; + + static const real_T rt_ODE3_B[3][3] = { + { 1.0/2.0, 0.0, 0.0 }, + + { 0.0, 3.0/4.0, 0.0 }, + + { 2.0/9.0, 1.0/3.0, 4.0/9.0 } + }; + + time_T t = rtsiGetT(si); + time_T tnew = rtsiGetSolverStopTime(si); + time_T h = rtsiGetStepSize(si); + real_T *x = rtsiGetContStates(si); + ODE3_IntgData *id = static_cast(rtsiGetSolverData(si)); + real_T *y = id->y; + real_T *f0 = id->f[0]; + real_T *f1 = id->f[1]; + real_T *f2 = id->f[2]; + real_T hB[3]; + int_T i; + int_T nXc = 4; + rtsiSetSimTimeStep(si,MINOR_TIME_STEP); + + // Save the state values at time t in y, we'll use x as ynew. + (void) std::memcpy(y, x, + static_cast(nXc)*sizeof(real_T)); + + // Assumes that rtsiSetT and ModelOutputs are up-to-date + // f0 = f(t,y) + rtsiSetdX(si, f0); + Arduino_skal_derivatives(); + + // f(:,2) = feval(odefile, t + hA(1), y + f*hB(:,1), args(:)(*)); + hB[0] = h * rt_ODE3_B[0][0]; + for (i = 0; i < nXc; i++) { + x[i] = y[i] + (f0[i]*hB[0]); + } + + rtsiSetT(si, t + h*rt_ODE3_A[0]); + rtsiSetdX(si, f1); + this->step(); + Arduino_skal_derivatives(); + + // f(:,3) = feval(odefile, t + hA(2), y + f*hB(:,2), args(:)(*)); + for (i = 0; i <= 1; i++) { + hB[i] = h * rt_ODE3_B[1][i]; + } + + for (i = 0; i < nXc; i++) { + x[i] = y[i] + (f0[i]*hB[0] + f1[i]*hB[1]); + } + + rtsiSetT(si, t + h*rt_ODE3_A[1]); + rtsiSetdX(si, f2); + this->step(); + Arduino_skal_derivatives(); + + // tnew = t + hA(3); + // ynew = y + f*hB(:,3); + for (i = 0; i <= 2; i++) { + hB[i] = h * rt_ODE3_B[2][i]; + } + + for (i = 0; i < nXc; i++) { + x[i] = y[i] + (f0[i]*hB[0] + f1[i]*hB[1] + f2[i]*hB[2]); + } + + rtsiSetT(si, tnew); + rtsiSetSimTimeStep(si,MAJOR_TIME_STEP); +} + +// Model step function +void Arduino_skalModelClass::step() +{ + real_T tmp[2]; + real_T rtb_Saturation; + int32_T i; + if (rtmIsMajorTimeStep((&rtM))) { + // set solver stop time + rtsiSetSolverStopTime(&(&rtM)->solverInfo,(((&rtM)->Timing.clockTick0+1)* + (&rtM)->Timing.stepSize0)); + } // end MajorTimeStep + + // Update absolute time of base rate at minor time step + if (rtmIsMinorTimeStep((&rtM))) { + (&rtM)->Timing.t[0] = rtsiGetT(&(&rtM)->solverInfo); + } + + // Gain: '/Gain' incorporates: + // Integrator: '/Integrator1' + + rtb_Saturation = ((-31.622776601683942 * rtX.Integrator1_CSTATE[0] + + -21.286439360075747 * rtX.Integrator1_CSTATE[1]) + + 80.789376267003959 * rtX.Integrator1_CSTATE[2]) + + 13.42463576551093 * rtX.Integrator1_CSTATE[3]; + + // Saturate: '/Saturation' incorporates: + // Gain: '/Gain' + // Step: '/Step' + // Sum: '/Sum5' + + if (0.0 - rtb_Saturation > 11.5) { + rtb_Saturation = 11.5; + } else if (0.0 - rtb_Saturation < -11.5) { + rtb_Saturation = -11.5; + } else { + rtb_Saturation = 0.0 - rtb_Saturation; + } + + // End of Saturate: '/Saturation' + + // Sum: '/Sum2' incorporates: + // Constant: '/vartejag' + // Gain: '/Gain6' + // Integrator: '/Integrator1' + + for (i = 0; i < 2; i++) { + tmp[i] = rtConstP.vartejag_Value[i] - (((rtConstP.Gain6_Gain[i + 2] * + rtX.Integrator1_CSTATE[1] + rtConstP.Gain6_Gain[i] * + rtX.Integrator1_CSTATE[0]) + rtConstP.Gain6_Gain[i + 4] * + rtX.Integrator1_CSTATE[2]) + rtConstP.Gain6_Gain[i + 6] * + rtX.Integrator1_CSTATE[3]); + } + + // End of Sum: '/Sum2' + for (i = 0; i < 4; i++) { + // Sum: '/Sum4' incorporates: + // Gain: '/Gain2' + // Gain: '/Gain3' + // Gain: '/Gain4' + // Integrator: '/Integrator1' + // Sum: '/Sum3' + + rtDW.Sum4[i] = ((rtConstP.Gain2_Gain[i + 4] * tmp[1] + rtConstP.Gain2_Gain[i] + * tmp[0]) + rtConstP.Gain3_Gain[i] * rtb_Saturation) + + (rtConstP.Gain4_Gain[i + 12] * rtX.Integrator1_CSTATE[3] + + (rtConstP.Gain4_Gain[i + 8] * rtX.Integrator1_CSTATE[2] + + (rtConstP.Gain4_Gain[i + 4] * rtX.Integrator1_CSTATE[1] + + rtConstP.Gain4_Gain[i] * rtX.Integrator1_CSTATE[0]))); + } + + if (rtmIsMajorTimeStep((&rtM))) { + rt_ertODEUpdateContinuousStates(&(&rtM)->solverInfo); + + // Update absolute time for base rate + // The "clockTick0" counts the number of times the code of this task has + // been executed. The absolute time is the multiplication of "clockTick0" + // and "Timing.stepSize0". Size of "clockTick0" ensures timer will not + // overflow during the application lifespan selected. + + ++(&rtM)->Timing.clockTick0; + (&rtM)->Timing.t[0] = rtsiGetSolverStopTime(&(&rtM)->solverInfo); + + { + // Update absolute timer for sample time: [0.2s, 0.0s] + // The "clockTick1" counts the number of times the code of this task has + // been executed. The resolution of this integer timer is 0.2, which is the step size + // of the task. Size of "clockTick1" ensures timer will not overflow during the + // application lifespan selected. + + (&rtM)->Timing.clockTick1++; + } + } // end MajorTimeStep +} + +// Derivatives for root system: '' +void Arduino_skalModelClass::Arduino_skal_derivatives() +{ + Arduino_skalModelClass::XDot *_rtXdot; + _rtXdot = ((XDot *) (&rtM)->derivs); + + // Derivatives for Integrator: '/Integrator1' + _rtXdot->Integrator1_CSTATE[0] = rtDW.Sum4[0]; + _rtXdot->Integrator1_CSTATE[1] = rtDW.Sum4[1]; + _rtXdot->Integrator1_CSTATE[2] = rtDW.Sum4[2]; + _rtXdot->Integrator1_CSTATE[3] = rtDW.Sum4[3]; +} + +// Model initialize function +void Arduino_skalModelClass::initialize() +{ + // Registration code + { + // Setup solver object + rtsiSetSimTimeStepPtr(&(&rtM)->solverInfo, &(&rtM)->Timing.simTimeStep); + rtsiSetTPtr(&(&rtM)->solverInfo, &rtmGetTPtr((&rtM))); + rtsiSetStepSizePtr(&(&rtM)->solverInfo, &(&rtM)->Timing.stepSize0); + rtsiSetdXPtr(&(&rtM)->solverInfo, &(&rtM)->derivs); + rtsiSetContStatesPtr(&(&rtM)->solverInfo, (real_T **) &(&rtM)->contStates); + rtsiSetNumContStatesPtr(&(&rtM)->solverInfo, &(&rtM)->Sizes.numContStates); + rtsiSetNumPeriodicContStatesPtr(&(&rtM)->solverInfo, &(&rtM) + ->Sizes.numPeriodicContStates); + rtsiSetPeriodicContStateIndicesPtr(&(&rtM)->solverInfo, &(&rtM) + ->periodicContStateIndices); + rtsiSetPeriodicContStateRangesPtr(&(&rtM)->solverInfo, &(&rtM) + ->periodicContStateRanges); + rtsiSetErrorStatusPtr(&(&rtM)->solverInfo, (&rtmGetErrorStatus((&rtM)))); + rtsiSetRTModelPtr(&(&rtM)->solverInfo, (&rtM)); + } + + rtsiSetSimTimeStep(&(&rtM)->solverInfo, MAJOR_TIME_STEP); + (&rtM)->intgData.y = (&rtM)->odeY; + (&rtM)->intgData.f[0] = (&rtM)->odeF[0]; + (&rtM)->intgData.f[1] = (&rtM)->odeF[1]; + (&rtM)->intgData.f[2] = (&rtM)->odeF[2]; + (&rtM)->contStates = ((X *) &rtX); + rtsiSetSolverData(&(&rtM)->solverInfo, static_cast(&(&rtM)->intgData)); + rtsiSetSolverName(&(&rtM)->solverInfo,"ode3"); + rtmSetTPtr((&rtM), &(&rtM)->Timing.tArray[0]); + (&rtM)->Timing.stepSize0 = 0.2; + + // InitializeConditions for Integrator: '/Integrator1' + rtX.Integrator1_CSTATE[0] = 0.0; + rtX.Integrator1_CSTATE[1] = 0.0; + rtX.Integrator1_CSTATE[2] = 0.0; + rtX.Integrator1_CSTATE[3] = 0.0; +} + +// Constructor +Arduino_skalModelClass::Arduino_skalModelClass() : + rtDW(), + rtX(), + rtM() +{ + // Currently there is no constructor body generated. +} + +// Destructor +Arduino_skalModelClass::~Arduino_skalModelClass() +{ + // Currently there is no destructor body generated. +} + +// Real-Time Model get method +Arduino_skalModelClass::RT_MODEL * Arduino_skalModelClass::getRTM() +{ + return (&rtM); +} + +// +// File trailer for generated code. +// +// [EOF] +// diff --git a/simulink_export_no_kalman/Arduino_skal.h b/simulink_export_no_kalman/Arduino_skal.h new file mode 100644 index 0000000..efe489f --- /dev/null +++ b/simulink_export_no_kalman/Arduino_skal.h @@ -0,0 +1,228 @@ +// +// Academic License - for use in teaching, academic research, and meeting +// course requirements at degree granting institutions only. Not for +// government, commercial, or other organizational use. +// +// File: Arduino_skal.h +// +// Code generated for Simulink model 'Arduino_skal'. +// +// Model version : 1.1 +// Simulink Coder version : 9.5 (R2021a) 14-Nov-2020 +// C/C++ source code generated on : Thu Apr 15 22:06:00 2021 +// +// Target selection: ert.tlc +// Embedded hardware selection: AMD->x86-64 (Windows64) +// Code generation objectives: +// 1. Execution efficiency +// 2. RAM efficiency +// Validation result: Not run +// +#ifndef RTW_HEADER_Arduino_skal_h_ +#define RTW_HEADER_Arduino_skal_h_ +#include +#include "rtwtypes.h" +#include "rtw_continuous.h" +#include "rtw_solver.h" + +// Model Code Variants + +// Macros for accessing real-time model data structure +#ifndef rtmGetErrorStatus +#define rtmGetErrorStatus(rtm) ((rtm)->errorStatus) +#endif + +#ifndef rtmSetErrorStatus +#define rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val)) +#endif + +#ifndef rtmGetStopRequested +#define rtmGetStopRequested(rtm) ((rtm)->Timing.stopRequestedFlag) +#endif + +#ifndef rtmSetStopRequested +#define rtmSetStopRequested(rtm, val) ((rtm)->Timing.stopRequestedFlag = (val)) +#endif + +#ifndef rtmGetStopRequestedPtr +#define rtmGetStopRequestedPtr(rtm) (&((rtm)->Timing.stopRequestedFlag)) +#endif + +#ifndef rtmGetT +#define rtmGetT(rtm) (rtmGetTPtr((rtm))[0]) +#endif + +#ifndef rtmGetTPtr +#define rtmGetTPtr(rtm) ((rtm)->Timing.t) +#endif + +#ifndef ODE3_INTG +#define ODE3_INTG + +// ODE3 Integration Data +struct ODE3_IntgData { + real_T *y; // output + real_T *f[3]; // derivatives +}; + +#endif + +// Class declaration for model Arduino_skal +class Arduino_skalModelClass { + // public data and function members + public: + // Block signals and states (default storage) for system '' + struct DW { + real_T Sum4[4]; // '/Sum4' + }; + + // Continuous states (default storage) + struct X { + real_T Integrator1_CSTATE[4]; // '/Integrator1' + }; + + // State derivatives (default storage) + struct XDot { + real_T Integrator1_CSTATE[4]; // '/Integrator1' + }; + + // State disabled + struct XDis { + boolean_T Integrator1_CSTATE[4]; // '/Integrator1' + }; + + // Constant parameters (default storage) + struct ConstP { + // Expression: [100;200] + // Referenced by: '/vartejag' + + real_T vartejag_Value[2]; + + // Expression: A + // Referenced by: '/Gain4' + + real_T Gain4_Gain[16]; + + // Expression: C + // Referenced by: '/Gain6' + + real_T Gain6_Gain[8]; + + // Expression: L + // Referenced by: '/Gain2' + + real_T Gain2_Gain[8]; + + // Expression: B + // Referenced by: '/Gain3' + + real_T Gain3_Gain[4]; + }; + + // Real-time Model Data Structure + struct RT_MODEL { + const char_T *errorStatus; + RTWSolverInfo solverInfo; + X *contStates; + int_T *periodicContStateIndices; + real_T *periodicContStateRanges; + real_T *derivs; + boolean_T *contStateDisabled; + boolean_T zCCacheNeedsReset; + boolean_T derivCacheNeedsReset; + boolean_T CTOutputIncnstWithState; + real_T odeY[4]; + real_T odeF[3][4]; + ODE3_IntgData intgData; + + // + // Sizes: + // The following substructure contains sizes information + // for many of the model attributes such as inputs, outputs, + // dwork, sample times, etc. + + struct { + int_T numContStates; + int_T numPeriodicContStates; + int_T numSampTimes; + } Sizes; + + // + // Timing: + // The following substructure contains information regarding + // the timing information for the model. + + struct { + uint32_T clockTick0; + time_T stepSize0; + uint32_T clockTick1; + SimTimeStep simTimeStep; + boolean_T stopRequestedFlag; + time_T *t; + time_T tArray[2]; + } Timing; + }; + + // model initialize function + void initialize(); + + // model step function + void step(); + + // Constructor + Arduino_skalModelClass(); + + // Destructor + ~Arduino_skalModelClass(); + + // Real-Time Model get method + Arduino_skalModelClass::RT_MODEL * getRTM(); + + // private data and function members + private: + // Block signals and states + DW rtDW; + X rtX; // Block continuous states + + // Real-Time Model + RT_MODEL rtM; + + // Continuous states update member function + void rt_ertODEUpdateContinuousStates(RTWSolverInfo *si ); + + // Derivatives member function + void Arduino_skal_derivatives(); +}; + +// Constant parameters (default storage) +extern const Arduino_skalModelClass::ConstP rtConstP; + +//- +// These blocks were eliminated from the model due to optimizations: +// +// Block '/Kr' : Eliminated nontunable gain of 1 + + +//- +// The generated code includes comments that allow you to trace directly +// back to the appropriate location in the model. The basic format +// is /block_name, where system is the system number (uniquely +// assigned by Simulink) and block_name is the name of the block. +// +// Use the MATLAB hilite_system command to trace the generated code back +// to the model. For example, +// +// hilite_system('') - opens system 3 +// hilite_system('/Kp') - opens and selects block Kp which resides in S3 +// +// Here is the system hierarchy for this model +// +// '' : 'Arduino_skal' + +#endif // RTW_HEADER_Arduino_skal_h_ + +// +// File trailer for generated code. +// +// [EOF] +// diff --git a/simulink_export_no_kalman/Arduino_skal_data.cpp b/simulink_export_no_kalman/Arduino_skal_data.cpp new file mode 100644 index 0000000..ebb41c7 --- /dev/null +++ b/simulink_export_no_kalman/Arduino_skal_data.cpp @@ -0,0 +1,58 @@ +// +// Academic License - for use in teaching, academic research, and meeting +// course requirements at degree granting institutions only. Not for +// government, commercial, or other organizational use. +// +// File: Arduino_skal_data.cpp +// +// Code generated for Simulink model 'Arduino_skal'. +// +// Model version : 1.1 +// Simulink Coder version : 9.5 (R2021a) 14-Nov-2020 +// C/C++ source code generated on : Thu Apr 15 22:06:00 2021 +// +// Target selection: ert.tlc +// Embedded hardware selection: AMD->x86-64 (Windows64) +// Code generation objectives: +// 1. Execution efficiency +// 2. RAM efficiency +// Validation result: Not run +// +#include "Arduino_skal.h" + +// Constant parameters (default storage) +const Arduino_skalModelClass::ConstP rtConstP = { + // Expression: [100;200] + // Referenced by: '/vartejag' + + { 100.0, 200.0 }, + + // Expression: A + // Referenced by: '/Gain4' + + { 0.0, 0.0, 0.0, 0.0, 1.0, -0.20780947085442231, 0.0, -0.52810302415000854, + 0.0, 13.239785742831822, 0.0, 58.601480177829842, 0.0, 0.0, 1.0, 0.0 }, + + // Expression: C + // Referenced by: '/Gain6' + + { 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 }, + + // Expression: L + // Referenced by: '/Gain2' + + { 116.63033952875418, 3387.8673967111704, -1.4473912197449676, + -115.34372132703447, -1.0534041975488044, -48.223441605702455, + 117.16185100039935, 3490.0480780568214 }, + + // Expression: B + // Referenced by: '/Gain3' + + { 0.0, 2.078094708544223, 0.0, 5.2810302415000852 } +}; + +// +// File trailer for generated code. +// +// [EOF] +// diff --git a/simulink_export_no_kalman/buildInfo.mat b/simulink_export_no_kalman/buildInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..20c5f361013e8c8f53eba94c29a220cb9b26374c GIT binary patch literal 11898 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 literal 0 HcmV?d00001 diff --git a/simulink_export_no_kalman/build_exception.mat b/simulink_export_no_kalman/build_exception.mat new file mode 100644 index 0000000000000000000000000000000000000000..83578dc094d28e08a34a11ba90551f1bc6a0b8fb GIT binary patch literal 1434 zcmV;L1!ek8K~zjZLLfCRFd$7qR4ry{Y-KDUP;6mzW^ZzBIv`L(S4mDbG%O%Pa%Ew3 zWn>_4ZaN@TXmub#aB?6qH6SuFIxsdmFf|}DFfuV9ARr(hARr(hARr(hARr(hARr(h zARr(hARr(hARr(hARr(hARr*x00000000000ZB~{0000|0001Zoa19)VCVp1HX!Bz zVnGH7U}RusNUcZ)(ku+V&i=uSKrt>L_I0gDPAw?O%+G_U;{#$3B>lWl{j5+v8`vxe zW`Ob~Ak4c=NOCX?03clmzYhQa0JsDI0C=43Sxs--HW;Q|H%*2%&CvGLbr3pW?cmK$ zf^G|fu83nSaDf@g8YAgJfJaNTEm$H2Qi?Mm7<%k+r(wq)ckI7ee#U;nNPU@RWXrbF zq6ZTolt+Bum(Tm~!&JBq09gGJfEDrNbq$2&W`qm8UOoz+q7)+x3NM=iuk*U|Xyji^ z@sDfxz7(_-BAaIY@Hme1-xs4epGWqEz-R=06Z5~l#@KN8z~5;P2#T>rpNzRi7#-g zk2Dqq)Ql*i_M~YUlrYluv=fW@(AMhZvbMds^`myS^?hYiyU?%$2S|JR!?W)?mZzOs z*d#;t%@b`1nTCm{b%~G7igrM#MuPdrzU3Vu?K#x?6m@@k-1j_}?N+P9;jrRBuRkPo zz$%^e)3!_lqw;AL2 ztD>*K^H@wFba|7(<51yoxUepKx6peCH@Pli0@tt^WWrUMWxm`~cnF*lEzx&jU9>*}UEB;l zdkUYuMRgIV6ACfQyjWBE6*vhIz0Z~ZJ3Gk#&kP=Ig-3hd{F&wWeES*%sBI8BS~?c? z5XI2en;hGt)iaAe8wxK`t@h|w%JeD9rH}sCC#_G`I(ne+5_mieUr}x94ME<0_qUn$ z-D8E%@$5Rq3h9A3d^13lYvNMt40=cphP>_ZgD3JTZV-Q#`Ey(0Bd{DQj+6JCw$vqE zm%lT3bQB()>(zyyIpnoD1+Zah2O(Or_|6%+z&mUP841z*QFb?!}KC7 zw3=l;-BtJqtb|(X@&R=@&)`v0c+~Rh!t8h%Wqzls-^CjoG5dPfNmkwmO5O+g^A1mU z?p6M2{ohjh7dQ&B%>N_g-%$E*v?{+&_C z@E7*|4Bk5mZ-E#6N40uBQuB+8oL`zQw-vwmOr_>4>(VGr)udjiuONizB*T$6o)8@yd`&Uu^2R}vNPJObt?f?J) literal 0 HcmV?d00001 diff --git a/simulink_export_no_kalman/codeInfo.mat b/simulink_export_no_kalman/codeInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..d83a5afce682156e996ca93e4b5c3c3656c4e8f4 GIT binary patch literal 3636 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 z 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 literal 0 HcmV?d00001 diff --git a/simulink_export_no_kalman/defines.txt b/simulink_export_no_kalman/defines.txt new file mode 100644 index 0000000..bbdce29 --- /dev/null +++ b/simulink_export_no_kalman/defines.txt @@ -0,0 +1,14 @@ +MODEL=Arduino_skal +NUMST=2 +NCSTATES=4 +HAVESTDIO +MODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 +CLASSIC_INTERFACE=0 +ALLOCATIONFCN=0 +TID01EQ=1 +TERMFCN=0 +ONESTEPFCN=1 +MAT_FILE=0 +MULTI_INSTANCE_CODE=1 +INTEGER_CODE=0 +MT=0 diff --git a/simulink_export_no_kalman/ert_main.cpp b/simulink_export_no_kalman/ert_main.cpp new file mode 100644 index 0000000..5d7cdcb --- /dev/null +++ b/simulink_export_no_kalman/ert_main.cpp @@ -0,0 +1,102 @@ +// +// Academic License - for use in teaching, academic research, and meeting +// course requirements at degree granting institutions only. Not for +// government, commercial, or other organizational use. +// +// File: ert_main.cpp +// +// Code generated for Simulink model 'Arduino_skal'. +// +// Model version : 1.1 +// Simulink Coder version : 9.5 (R2021a) 14-Nov-2020 +// C/C++ source code generated on : Thu Apr 15 22:06:00 2021 +// +// Target selection: ert.tlc +// Embedded hardware selection: AMD->x86-64 (Windows64) +// Code generation objectives: +// 1. Execution efficiency +// 2. RAM efficiency +// Validation result: Not run +// +#include +#include // This ert_main.c example uses printf/fflush +#include "Arduino_skal.h" // Model's header file +#include "rtwtypes.h" + +static Arduino_skalModelClass rtObj; // Instance of model class + +// +// Associating rt_OneStep with a real-time clock or interrupt service routine +// is what makes the generated code "real-time". The function rt_OneStep is +// always associated with the base rate of the model. Subrates are managed +// by the base rate from inside the generated code. Enabling/disabling +// interrupts and floating point context switches are target specific. This +// example code indicates where these should take place relative to executing +// the generated code step function. Overrun behavior should be tailored to +// your application needs. This example simply sets an error status in the +// real-time model and returns from rt_OneStep. +// +void rt_OneStep(void); +void rt_OneStep(void) +{ + static boolean_T OverrunFlag = false; + + // Disable interrupts here + + // Check for overrun + if (OverrunFlag) { + rtmSetErrorStatus(rtObj.getRTM(), "Overrun"); + return; + } + + OverrunFlag = true; + + // Save FPU context here (if necessary) + // Re-enable timer or interrupt here + // Set model inputs here + + // Step the model for base rate + rtObj.step(); + + // Get model outputs here + + // Indicate task complete + OverrunFlag = false; + + // Disable interrupts here + // Restore FPU context here (if necessary) + // Enable interrupts here +} + +// +// The example "main" function illustrates what is required by your +// application code to initialize, execute, and terminate the generated code. +// Attaching rt_OneStep to a real-time clock is target specific. This example +// illustrates how you do this relative to initializing the model. +// +int_T main(int_T argc, const char *argv[]) +{ + // Unused arguments + (void)(argc); + (void)(argv); + + // Initialize model + rtObj.initialize(); + + // Simulating the model step behavior (in non real-time) to + // simulate model behavior at stop time. + + while ((rtmGetErrorStatus(rtObj.getRTM()) == (NULL)) && !rtmGetStopRequested + (rtObj.getRTM())) { + rt_OneStep(); + } + + // Disable rt_OneStep() here + return 0; +} + +// +// File trailer for generated code. +// +// [EOF] +// diff --git a/simulink_export_no_kalman/make_exception.mat b/simulink_export_no_kalman/make_exception.mat new file mode 100644 index 0000000000000000000000000000000000000000..12cc437bb6d54d5886deb8c9a71ffe5a2475ae03 GIT binary patch literal 881 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NSF?*vkDf4da@3Qki9BNIi62V8@w1&QX56SBV6k<9im^TaqJI7k z+X-hLx6V4w^>nl2*|e6f<{v@=&tlb7EG5_&G?;lVg6wEz0@<-N>|)+!1ChNicdc~| zc)-8rHZ-l%wZ$cnII#;rub0CpQ9qBXY$Mk zOuK^*yATU=`A_|!1!`B^k_-CQHJF?QP^nGu~ya_XX3_t!d>3RAxmHR*M@>~D&PuFMh z*Ea1a>WFzNn9I*JJ<#tsQ!QUbQ~HYiySwL=evezEUw!^|>=#~F#d$(oJ}3QuS*dVA zqr=APdH?o{GQ}c+jmJzn_n28NYfWDr9BTnS9E{UB5kFb}fV5n+J=_#QMtv;`~ecx?Y{EU77rnTS-P}2CLx7$G>G) zou3&i{-^%Q?*pgYv+kRH__lM)`K@A~V_uie`u=d;QRDZy6Zh+!+xlt8jhgCxi>&xJ z%n_em|8~u{`5Btk9INK(rR+42N)78;w`He}_}Qhec1K+2n{wQ-dndnf{Mo3lc3H1p u*S|WSTe!D_6xGk2fzs&{|2-gkujW0x86-64 (Windows64) +// Code generation objectives: +// 1. Execution efficiency +// 2. RAM efficiency +// Validation result: Not run +// + +#ifndef RTWTYPES_H +#define RTWTYPES_H + +// Logical type definitions +#if (!defined(__cplusplus)) +#ifndef false +#define false (0U) +#endif + +#ifndef true +#define true (1U) +#endif +#endif + +//=======================================================================* +// Target hardware information +// Device type: AMD->x86-64 (Windows64) +// Number of bits: char: 8 short: 16 int: 32 +// long: 32 long long: 64 +// native word size: 64 +// Byte ordering: LittleEndian +// Signed integer division rounds to: Zero +// Shift right on a signed integer as arithmetic shift: on +// ======================================================================= + +//=======================================================================* +// Fixed width word size data types: * +// int8_T, int16_T, int32_T - signed 8, 16, or 32 bit integers * +// uint8_T, uint16_T, uint32_T - unsigned 8, 16, or 32 bit integers * +// real32_T, real64_T - 32 and 64 bit floating point numbers * +// ======================================================================= +typedef signed char int8_T; +typedef unsigned char uint8_T; +typedef short int16_T; +typedef unsigned short uint16_T; +typedef int int32_T; +typedef unsigned int uint32_T; +typedef long long int64_T; +typedef unsigned long long uint64_T; +typedef float real32_T; +typedef double real64_T; + +//===========================================================================* +// Generic type definitions: boolean_T, char_T, byte_T, int_T, uint_T, * +// real_T, time_T, ulong_T, ulonglong_T. * +// =========================================================================== +typedef double real_T; +typedef double time_T; +typedef unsigned char boolean_T; +typedef int int_T; +typedef unsigned int uint_T; +typedef unsigned long ulong_T; +typedef unsigned long long ulonglong_T; +typedef char char_T; +typedef unsigned char uchar_T; +typedef char_T byte_T; + +//=======================================================================* +// Min and Max: * +// int8_T, int16_T, int32_T - signed 8, 16, or 32 bit integers * +// uint8_T, uint16_T, uint32_T - unsigned 8, 16, or 32 bit integers * +// ======================================================================= +#define MAX_int8_T ((int8_T)(127)) +#define MIN_int8_T ((int8_T)(-128)) +#define MAX_uint8_T ((uint8_T)(255U)) +#define MAX_int16_T ((int16_T)(32767)) +#define MIN_int16_T ((int16_T)(-32768)) +#define MAX_uint16_T ((uint16_T)(65535U)) +#define MAX_int32_T ((int32_T)(2147483647)) +#define MIN_int32_T ((int32_T)(-2147483647-1)) +#define MAX_uint32_T ((uint32_T)(0xFFFFFFFFU)) +#define MAX_int64_T ((int64_T)(9223372036854775807LL)) +#define MIN_int64_T ((int64_T)(-9223372036854775807LL-1LL)) +#define MAX_uint64_T ((uint64_T)(0xFFFFFFFFFFFFFFFFULL)) + +// Block D-Work pointer type +typedef void * pointer_T; + +#endif // RTWTYPES_H + +// +// File trailer for generated code. +// +// [EOF] +// diff --git a/simulink_export_no_kalman/rtwtypeschksum.mat b/simulink_export_no_kalman/rtwtypeschksum.mat new file mode 100644 index 0000000000000000000000000000000000000000..fd240a4940ae25f65194e9dfbd831b1024788ba2 GIT binary patch literal 1510 zcmV_4ZaN@TXmub#aB?6qH6SuFIxsdmFft%AFfuV9ARr(hARr(hARr(hARr(hARr(h zARr(hARr(hARr(hARr(hARr(B00000000000ZB~{0000e0RRAaoV}9GYlA=##V2Az zLPH4j(5uJx5a=ODPsOwr5{RY51fe&{ZsS0+E9>T?{l|0dE@~4+BBT)Eq4RvdopG=W z0FDXJRQHyW0qJ#>)r})vD@CCo+fdN)D$a5y++^?fN-rw#wq8A>OtO=}kGPOUZ_G*t zz=X49$qTq3KK@XELaLO^Esv8t=|}h}r?`xyYBUrmBi+%(&6KYhnejCB$_R#xCWjf| zUC>zYg%|Gh={_=9vgXcx#JymgLML+Y1>#6F43a&Y)hU*l#w4R`pUo`y%p`w4Y=6m(r)<3yX&D^)8xph7C z-2T(<(eB#=>n=b>_%^Wz_wWn1dt2cT0001m0001Zoa19)VEDnvz`zEiIe?gn0RmW| zd`2Y92gDhPMJeTpMX4^S1v&YZAayJZ0#Nw`Aoj`6OZO|yb;>L$2AkuVSAxuC2+qha zLKblb8i=d_q#xM~7~eNPC6xi{1_K6!d)e@~mjUb_Mg|2s>k}YT9|xKG9I)u)A)pTw zZy+`RSkfj&4*&oF`2YX_c$}?J!AiqG5S^AC+BpK@WPo^vp?@ay8c_{oEVD zO{jl)KB1mT#@rD%u#cCDQ8jbzaD^OEfxFUcWel;4Xk!#^_qt-SjVtA3OIH3Q@6$v(;3xT zktl3B<)V_BGW#J^hU_wSb(nM4n{zQd?k{xy4}Sl5ioWrIy-q#v;U6Eb{`lDHzFqD4 zH%+2M{0{&C0H6W@0C=43SKUtAFcfxCL1U}fq}}XldxZ^9#U<+>i`25IO$T?##3!vq z;#9VSfG65x?2^lAPc%D;+axV1g)%K@M{?6I=X|!mb55;#2O;$1EkaxB`9h5i6x(Kk zE2&XaLr_2TD7&zj8^m!{^gi*QDsl@19kCXcxEnZF(tx3qwXdjs%z-om0%`9N zutrEdX|a~wW}z=o&f6S^?4kv3)?vJDE(aZl_3ab;dIBQnwW+TbZg5IQkmvSoi%H-v zcJeM|7IVCiz<~Nf^3aLq?gaceVC}w*ETKQ|vL3!t`SL9SOj4Hu?*bdiapL_JaEZ@7 zI0-lz(3|X*Q6DCr+K{iPdd;rdzZ72x?@$l!@DB6_Wd$?OXpzOWSya8qE3dr; zNiyDWGEt&bZY-v{1c)xkRMt>H^Lr0Vl|9SH`7#WJs!v>{0q{%eWb(12#z!>k(`xcQ z-KW*$sqKwI=UBipp0OEk@p{`E^XpYoyp81Bf8P3dl?A*lw4C>0jr&}sUv6vnJ4fU9 zRrET+zfp8jSVWyd2eG?HSq5tFkQ!`)Kh-nA2Abd)o8Z0OOt66_IL0QpzMly;&;-Z0 z5dR#5TpW5*9U~-~_pqQ&n*TCaCyjfb zPtSB7&+OU$9@>}xlrHPI^txW@oyYACBqW7CI5SQ&K{ z^x@uaiR)F+ho#n4)Q3h`8Fdx(VST^E^(yGYQtK+}LnG`lx_&;9u2t`g>KZ(EUtC4U z?Gx!ZSfXPSW$UA{tN(>RvM%emKjrUh#%4TpFJ94lhfDIaoy(8LK4sLWH;}%k{H^=x ML)X*x2UnPZf^3S+yZ`_I literal 0 HcmV?d00001 diff --git a/simulink_export_no_kalman/tmwinternal/simulink_cache.xml b/simulink_export_no_kalman/tmwinternal/simulink_cache.xml new file mode 100644 index 0000000..6b20995 --- /dev/null +++ b/simulink_export_no_kalman/tmwinternal/simulink_cache.xml @@ -0,0 +1,6 @@ + + + + jUWCD6upU5eKEHQT+1NwAiXXhPHl8CuLumYkuZ/nhqUqt9Bgq71EB7eSu+x+mM96egeRAwLhm/aq3c0y4CL1kg== + + \ No newline at end of file diff --git a/simulink_export_no_kalman/tmwinternal/tr b/simulink_export_no_kalman/tmwinternal/tr new file mode 100644 index 0000000000000000000000000000000000000000..4435341898b30521d57a7c7058f3744d7d32c562 GIT binary patch literal 41703 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 literal 0 HcmV?d00001