1/*
2 * File: rt_nonfinite.c
3 *
4 * Code generated for Simulink model 'PMSM_Controller'.
5 *
6 * Model version : 1.885
7 * Simulink Coder version : 9.4 (R2020b) 29-Jul-2020
8 * C/C++ source code generated on : Sat Jan 8 15:44:11 2022
9 *
10 * Target selection: ert.tlc
11 * Embedded hardware selection: ARM Compatible->ARM Cortex-M
12 * Code generation objectives:
13 * 1. Execution efficiency
14 * 2. RAM efficiency
15 * Validation result: Not run
16 */
17
18/*
19 * Abstract:
20 * Function to initialize non-finites,
21 * (Inf, NaN and -Inf).
22 */
23#include "rt_nonfinite.h"
24#include "rtGetNaN.h"
25#include "rtGetInf.h"
26#define NumBitsPerChar 8U
27
28real_T rtInf;
29real_T rtMinusInf;
30real_T rtNaN;
31real32_T rtInfF;
32real32_T rtMinusInfF;
33real32_T rtNaNF;
34
35/*
36 * Initialize the rtInf, rtMinusInf, and rtNaN needed by the
37 * generated code. NaN is initialized as non-signaling. Assumes IEEE.
38 */
39void rt_InitInfAndNaN(size_t realSize)
40{
41 (void) (realSize);
42 rtNaN = rtGetNaN();
43 rtNaNF = rtGetNaNF();
44 rtInf = rtGetInf();
45 rtInfF = rtGetInfF();
46 rtMinusInf = rtGetMinusInf();
47 rtMinusInfF = rtGetMinusInfF();
48}
49
50/* Test if value is infinite */
51boolean_T rtIsInf(real_T value)
52{
53 return (boolean_T)((value==rtInf || value==rtMinusInf) ? 1U : 0U);
54}
55
56/* Test if single-precision value is infinite */
57boolean_T rtIsInfF(real32_T value)
58{
59 return (boolean_T)(((value)==rtInfF || (value)==rtMinusInfF) ? 1U : 0U);
60}
61
62/* Test if value is not a number */
63boolean_T rtIsNaN(real_T value)
64{
65 boolean_T result = (boolean_T) 0;
66 size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);
67 if (bitsPerReal == 32U) {
68 result = rtIsNaNF((real32_T)value);
69 } else {
70 union {
71 LittleEndianIEEEDouble bitVal;
72 real_T fltVal;
73 } tmpVal;
74
75 tmpVal.fltVal = value;
76 result = (boolean_T)((tmpVal.bitVal.words.wordH & 0x7FF00000) == 0x7FF00000 &&
77 ( (tmpVal.bitVal.words.wordH & 0x000FFFFF) != 0 ||
78 (tmpVal.bitVal.words.wordL != 0) ));
79 }
80
81 return result;
82}
83
84/* Test if single-precision value is not a number */
85boolean_T rtIsNaNF(real32_T value)
86{
87 IEEESingle tmp;
88 tmp.wordL.wordLreal = value;
89 return (boolean_T)( (tmp.wordL.wordLuint & 0x7F800000) == 0x7F800000 &&
90 (tmp.wordL.wordLuint & 0x007FFFFF) != 0 );
91}
92
93/*
94 * File trailer for generated code.
95 *
96 * [EOF]
97 */
98