Browse Source
This patch reorders px4_defines.h to make it more readable (I think) but more importantly, cleans up the #include <math.h>/<cmath> and [std::]isfinite stuff. My main goal was to completely get rid of including math.h/cmath, because that doesn't really belong in a header that is supposed to define macro's and is included in almost every source file (if not all). I'm not sure what it did before ;) (pun intended), but now it does the following: PX4_ISFINITE is only used in C++ code (that was already the case, but hereby is official; for C code just use 'isfinite()') and is defined to be std::isfinite, except on __PX4_QURT because that uses the HEXAGON toolset which (erroneously) defines isfinite as macro. I would have liked to remove PX4_ISFINITE completely from the code and just use std::isfinite whereever that is needed, but that would have required changing the libecl submodule, and at the moment I'm getting tired of changing submodules... so maybe something for the future. Also, all includes of <math.h> or <cmath> have been removed except for __PX4_NUTTX. Like the HEXAGON toolset NuttX currently defines isfinite as macro for C++. So, we could have solved this in the same was as __P4_QURT; but since we can fix NuttX ourselves I chose to add a kludge to px4_defines.h instead that fixes this problem, until the time that NuttX can be fixed (again postponing changing a submodule). The kludge still demands including <cmath>, thus. After removal of the math header file, it needed to be included in source files that actually need it, of course. Finally, I had a look at the math macro's (like M_PI, M_PI_F, M_DEG_TO_RAD etc). These are sometimes (erroneously) defined in certain math.h header files (like both, hexagon and nuttx). This is incorrect: neither the C nor the C++ standard defines math constants (neither as macro nor otherwise). The "problem" here was that px4_defines.h defined some of the M_*_F float constants in terms of the M_* double constant, which are sometimes not defined either thus. So, I cleaned this up by defining the M_*_F math constants as float literals in px4_defines.h, except when they are defined in math.h for that platform. This means that math.h has to be always included when using those constants, but well; not much difference there as those files usually also need/use the macro NAN (which *is* a standard macro defined by math.h). Finally finally, DEFAULT_PARAM_FILE was removed as it isn't used anymore. All in all I think the resulting px4_defines.h is nice, giving me much less the feeling of a nearly unmaintainable and over time slowly growing collection of kludges and hacks.sbg
11 changed files with 122 additions and 124 deletions
Loading…
Reference in new issue