147 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 * rtGetInf.cpp
 | 
						|
 *
 | 
						|
 * 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.
 | 
						|
 *
 | 
						|
 * Code generation for model "Arduino_skal".
 | 
						|
 *
 | 
						|
 * Model version              : 1.1
 | 
						|
 * Simulink Coder version : 9.5 (R2021a) 14-Nov-2020
 | 
						|
 * C++ source code generated on : Thu Apr 15 15:56:50 2021
 | 
						|
 *
 | 
						|
 * Target selection: grt.tlc
 | 
						|
 * Note: GRT includes extra infrastructure and instrumentation for prototyping
 | 
						|
 * Embedded hardware selection: Intel->x86-64 (Windows64)
 | 
						|
 * Code generation objective: Debugging
 | 
						|
 * Validation result: Not run
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * Abstract:
 | 
						|
 *      Function to initialize non-finite, Inf
 | 
						|
 */
 | 
						|
#include "rtGetInf.h"
 | 
						|
#define NumBitsPerChar                 8U
 | 
						|
 | 
						|
extern "C" {
 | 
						|
  /*
 | 
						|
   * Initialize rtInf needed by the generated code.
 | 
						|
   * Inf is initialized as non-signaling. Assumes IEEE.
 | 
						|
   */
 | 
						|
  real_T rtGetInf(void)
 | 
						|
  {
 | 
						|
    size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);
 | 
						|
    real_T inf = 0.0;
 | 
						|
    if (bitsPerReal == 32U) {
 | 
						|
      inf = rtGetInfF();
 | 
						|
    } else {
 | 
						|
      uint16_T one = 1U;
 | 
						|
      enum {
 | 
						|
        LittleEndian,
 | 
						|
        BigEndian
 | 
						|
      } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;
 | 
						|
      switch (machByteOrder) {
 | 
						|
       case LittleEndian:
 | 
						|
        {
 | 
						|
          union {
 | 
						|
            LittleEndianIEEEDouble bitVal;
 | 
						|
            real_T fltVal;
 | 
						|
          } tmpVal;
 | 
						|
 | 
						|
          tmpVal.bitVal.words.wordH = 0x7FF00000U;
 | 
						|
          tmpVal.bitVal.words.wordL = 0x00000000U;
 | 
						|
          inf = tmpVal.fltVal;
 | 
						|
          break;
 | 
						|
        }
 | 
						|
 | 
						|
       case BigEndian:
 | 
						|
        {
 | 
						|
          union {
 | 
						|
            BigEndianIEEEDouble bitVal;
 | 
						|
            real_T fltVal;
 | 
						|
          } tmpVal;
 | 
						|
 | 
						|
          tmpVal.bitVal.words.wordH = 0x7FF00000U;
 | 
						|
          tmpVal.bitVal.words.wordL = 0x00000000U;
 | 
						|
          inf = tmpVal.fltVal;
 | 
						|
          break;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    return inf;
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
   * Initialize rtInfF needed by the generated code.
 | 
						|
   * Inf is initialized as non-signaling. Assumes IEEE.
 | 
						|
   */
 | 
						|
  real32_T rtGetInfF(void)
 | 
						|
  {
 | 
						|
    IEEESingle infF;
 | 
						|
    infF.wordL.wordLuint = 0x7F800000U;
 | 
						|
    return infF.wordL.wordLreal;
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
   * Initialize rtMinusInf needed by the generated code.
 | 
						|
   * Inf is initialized as non-signaling. Assumes IEEE.
 | 
						|
   */
 | 
						|
  real_T rtGetMinusInf(void)
 | 
						|
  {
 | 
						|
    size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);
 | 
						|
    real_T minf = 0.0;
 | 
						|
    if (bitsPerReal == 32U) {
 | 
						|
      minf = rtGetMinusInfF();
 | 
						|
    } else {
 | 
						|
      uint16_T one = 1U;
 | 
						|
      enum {
 | 
						|
        LittleEndian,
 | 
						|
        BigEndian
 | 
						|
      } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;
 | 
						|
      switch (machByteOrder) {
 | 
						|
       case LittleEndian:
 | 
						|
        {
 | 
						|
          union {
 | 
						|
            LittleEndianIEEEDouble bitVal;
 | 
						|
            real_T fltVal;
 | 
						|
          } tmpVal;
 | 
						|
 | 
						|
          tmpVal.bitVal.words.wordH = 0xFFF00000U;
 | 
						|
          tmpVal.bitVal.words.wordL = 0x00000000U;
 | 
						|
          minf = tmpVal.fltVal;
 | 
						|
          break;
 | 
						|
        }
 | 
						|
 | 
						|
       case BigEndian:
 | 
						|
        {
 | 
						|
          union {
 | 
						|
            BigEndianIEEEDouble bitVal;
 | 
						|
            real_T fltVal;
 | 
						|
          } tmpVal;
 | 
						|
 | 
						|
          tmpVal.bitVal.words.wordH = 0xFFF00000U;
 | 
						|
          tmpVal.bitVal.words.wordL = 0x00000000U;
 | 
						|
          minf = tmpVal.fltVal;
 | 
						|
          break;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    return minf;
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
   * Initialize rtMinusInfF needed by the generated code.
 | 
						|
   * Inf is initialized as non-signaling. Assumes IEEE.
 | 
						|
   */
 | 
						|
  real32_T rtGetMinusInfF(void)
 | 
						|
  {
 | 
						|
    IEEESingle minfF;
 | 
						|
    minfF.wordL.wordLuint = 0xFF800000U;
 | 
						|
    return minfF.wordL.wordLreal;
 | 
						|
  }
 | 
						|
}
 |