diff options
author | px4dev <px4@purgatory.org> | 2013-04-26 11:27:26 -0700 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2013-04-26 11:27:26 -0700 |
commit | 3acdc9d4ce3d83af6bb7f953e466620be690658e (patch) | |
tree | c1c792b44f7454ce36a288034179764ebc355daa /apps/position_estimator_mc/codegen/rtGetNaN.c | |
parent | 8224adf52a126105c72e41db2ba35b1aaed3e301 (diff) | |
parent | 556a017444b809c18e2ce495a2fd00380960e0f4 (diff) | |
download | px4-firmware-3acdc9d4ce3d83af6bb7f953e466620be690658e.tar.gz px4-firmware-3acdc9d4ce3d83af6bb7f953e466620be690658e.tar.bz2 px4-firmware-3acdc9d4ce3d83af6bb7f953e466620be690658e.zip |
Merge branch 'master' into export-build
Diffstat (limited to 'apps/position_estimator_mc/codegen/rtGetNaN.c')
-rwxr-xr-x | apps/position_estimator_mc/codegen/rtGetNaN.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/apps/position_estimator_mc/codegen/rtGetNaN.c b/apps/position_estimator_mc/codegen/rtGetNaN.c new file mode 100755 index 000000000..552770149 --- /dev/null +++ b/apps/position_estimator_mc/codegen/rtGetNaN.c @@ -0,0 +1,96 @@ +/* + * rtGetNaN.c + * + * Code generation for function 'kalman_dlqe2' + * + * C source code generated on: Thu Feb 14 12:52:29 2013 + * + */ + +/* + * Abstract: + * MATLAB for code generation function to initialize non-finite, NaN + */ +#include "rtGetNaN.h" +#define NumBitsPerChar 8U + +/* Function: rtGetNaN ================================================== + * Abstract: + * Initialize rtNaN needed by the generated code. + * NaN is initialized as non-signaling. Assumes IEEE. + */ +real_T rtGetNaN(void) +{ + size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar); + real_T nan = 0.0; + if (bitsPerReal == 32U) { + nan = rtGetNaNF(); + } 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 = 0xFFF80000U; + tmpVal.bitVal.words.wordL = 0x00000000U; + nan = tmpVal.fltVal; + break; + } + + case BigEndian: + { + union { + BigEndianIEEEDouble bitVal; + real_T fltVal; + } tmpVal; + + tmpVal.bitVal.words.wordH = 0x7FFFFFFFU; + tmpVal.bitVal.words.wordL = 0xFFFFFFFFU; + nan = tmpVal.fltVal; + break; + } + } + } + + return nan; +} + +/* Function: rtGetNaNF ================================================== + * Abstract: + * Initialize rtNaNF needed by the generated code. + * NaN is initialized as non-signaling. Assumes IEEE. + */ +real32_T rtGetNaNF(void) +{ + IEEESingle nanF = { { 0 } }; + uint16_T one = 1U; + enum { + LittleEndian, + BigEndian + } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian; + switch (machByteOrder) { + case LittleEndian: + { + nanF.wordL.wordLuint = 0xFFC00000U; + break; + } + + case BigEndian: + { + nanF.wordL.wordLuint = 0x7FFFFFFFU; + break; + } + } + + return nanF.wordL.wordLreal; +} + +/* End of code generation (rtGetNaN.c) */ |