File: rtGetNaN.cpp1 /* 2 * rtGetNaN.cpp 3 * 4 * Code generation for model "Controller". 5 * 6 * Model version : 1.1303 7 * Simulink Coder version : 8.3 (R2012b) 20-Jul-2012 8 * C++ source code generated on : Sun Jun 01 14:58:10 2014 9 * 10 * Target selection: grt.tlc 11 * Note: GRT includes extra infrastructure and instrumentation for prototyping 12 * Embedded hardware selection: Generic->32-bit x86 compatible 13 * Code generation objectives: Unspecified 14 * Validation result: Not run 15 */ 16 /* 17 * Abstract: 18 * Function to intialize non-finite, NaN 19 */ 20 21 #include "rtGetNaN.h" 22 #define NumBitsPerChar 8U 23 24 extern "C" { 25 /* 26 * Initialize rtNaN needed by the generated code. 27 * NaN is initialized as non-signaling. Assumes IEEE. 28 */ 29 real_T rtGetNaN(void) 30 { 31 size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar); 32 real_T nan = 0.0; 33 if (bitsPerReal == 32U) { 34 nan = rtGetNaNF(); 35 } else { 36 uint16_T one = 1U; 37 enum { 38 LittleEndian, 39 BigEndian 40 } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian; 41 switch (machByteOrder) { 42 case LittleEndian: 43 { 44 union { 45 LittleEndianIEEEDouble bitVal; 46 real_T fltVal; 47 } tmpVal; 48 49 tmpVal.bitVal.words.wordH = 0xFFF80000U; 50 tmpVal.bitVal.words.wordL = 0x00000000U; 51 nan = tmpVal.fltVal; 52 break; 53 } 54 55 case BigEndian: 56 { 57 union { 58 BigEndianIEEEDouble bitVal; 59 real_T fltVal; 60 } tmpVal; 61 62 tmpVal.bitVal.words.wordH = 0x7FFFFFFFU; 63 tmpVal.bitVal.words.wordL = 0xFFFFFFFFU; 64 nan = tmpVal.fltVal; 65 break; 66 } 67 } 68 } 69 70 return nan; 71 } 72 73 /* 74 * Initialize rtNaNF needed by the generated code. 75 * NaN is initialized as non-signaling. Assumes IEEE. 76 */ 77 real32_T rtGetNaNF(void) 78 { 79 IEEESingle nanF = { { 0 } }; 80 81 uint16_T one = 1U; 82 enum { 83 LittleEndian, 84 BigEndian 85 } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian; 86 switch (machByteOrder) { 87 case LittleEndian: 88 { 89 nanF.wordL.wordLuint = 0xFFC00000U; 90 break; 91 } 92 93 case BigEndian: 94 { 95 nanF.wordL.wordLuint = 0x7FFFFFFFU; 96 break; 97 } 98 } 99 100 return nanF.wordL.wordLreal; 101 } 102 } 103 |