    1/*

    2 * rtGetNaN.c

    3 *

    4 * Code generation for model "PMSM_Motor_TL3_sf".

    5 *

    6 * Model version              : 1.825

    7 * Simulink Coder version : 9.4 (R2020b) 29-Jul-2020

    8 * C source code generated on : Fri Apr 14 12:51:02 2023

    9 *

    10 * Target selection: rtwsfcn.tlc

    11 * Note: GRT includes extra infrastructure and instrumentation for prototyping

    12 * Embedded hardware selection: ARM Compatible->ARM Cortex-M

    13 * Emulation hardware selection:

    14 *    Differs from embedded hardware (MATLAB Host)

    15 * Code generation objectives:

    16 *    1. Execution efficiency

    17 *    2. RAM efficiency

    18 * Validation result: Not run

    19 */

    20

    21/*

    22 * Abstract:

    23 *      Function to initialize non-finite, NaN

    24 */

    25#include "rtGetNaN.h"

    26#define NumBitsPerChar                 8U

    27

    28/*

    29 * Initialize rtNaN needed by the generated code.

    30 * NaN is initialized as non-signaling. Assumes IEEE.

    31 */

    32real_T rtGetNaN(void)

    33{

    34  size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);

    35  real_T nan = 0.0;

    36  if (bitsPerReal == 32U) {

    37    nan = rtGetNaNF();

    38  } else {

    39    uint16_T one = 1U;

    40    enum {

    41      LittleEndian,

    42      BigEndian

    43    } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;

    44    switch (machByteOrder) {

    45     case LittleEndian:

    46      {

    47        union {

    48          LittleEndianIEEEDouble bitVal;

    49          real_T fltVal;

    50        } tmpVal;

    51

    52        tmpVal.bitVal.words.wordH = 0xFFF80000U;

    53        tmpVal.bitVal.words.wordL = 0x00000000U;

    54        nan = tmpVal.fltVal;

    55        break;

    56      }

    57

    58     case BigEndian:

    59      {

    60        union {

    61          BigEndianIEEEDouble bitVal;

    62          real_T fltVal;

    63        } tmpVal;

    64

    65        tmpVal.bitVal.words.wordH = 0x7FFFFFFFU;

    66        tmpVal.bitVal.words.wordL = 0xFFFFFFFFU;

    67        nan = tmpVal.fltVal;

    68        break;

    69      }

    70    }

    71  }

    72

    73  return nan;

    74}

    75

    76/*

    77 * Initialize rtNaNF needed by the generated code.

    78 * NaN is initialized as non-signaling. Assumes IEEE.

    79 */

    80real32_T rtGetNaNF(void)

    81{

    82  IEEESingle nanF = { { 0 } };

    83

    84  uint16_T one = 1U;

    85  enum {

    86    LittleEndian,

    87    BigEndian

    88  } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;

    89  switch (machByteOrder) {

    90   case LittleEndian:

    91    {

    92      nanF.wordL.wordLuint = 0xFFC00000U;

    93      break;

    94    }

    95

    96   case BigEndian:

    97    {

    98      nanF.wordL.wordLuint = 0x7FFFFFFFU;

    99      break;

    100    }

    101  }

    102

    103  return nanF.wordL.wordLreal;

    104}

    105