This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

STM32F1 compiler issues

Hello,

I am trying to compile a project for STM32F103CB, but it doesn't seem to work properly.
First of all, this project compiles and runs on IAR SDK.
I ported it on uVision 5 SDK, and, after quite some pain, I made it compile.
The problem is, I am still getting this warning:

Libraries\X_Lib\src\X_Configuration.c(438): warning:  #223-D: function "roundf" declared implicitly
        GAverage[0] = (u32)(roundf((float)GAverage[0]/(float)(GSampleCount)));

although I am including the math.h file in X_Configuration.c:

#include <math.h>

in math.h, roundf is defined as

extern _ARMABI_FPEXCEPT double round(double /*x*/);
extern _ARMABI_FPEXCEPT float roundf(float /*x*/);
_ARMDEFLD1(round);

...what am I doing wrong?
Is there some precise setting I overlooked?

Thanks a lot for your time!

Parents
  • indeed. In fact, there is an option in
    Project -> Options for target ... -> C/C++ tab to define/undefine Preprocessor Symbols.

    I'm afraid you missed my point. The problem is not about where you make that #define, whether in source or in the compiler flags. It's about whether you're allowed to #define that macro at all. If you're not, you might break a lot more than you fixed.

    Now, the official definition of the C programming language says you're not allowed to do this, because names starting on a double underscore are reserved to the language's implementors (e.g.: Keil or IAR). So you would need some other instance to give you this permission, thus overriding the language standard. The only applicable candidate to be that instance is the documentation of the compiler or library you found this in. So please: look it up.

Reply
  • indeed. In fact, there is an option in
    Project -> Options for target ... -> C/C++ tab to define/undefine Preprocessor Symbols.

    I'm afraid you missed my point. The problem is not about where you make that #define, whether in source or in the compiler flags. It's about whether you're allowed to #define that macro at all. If you're not, you might break a lot more than you fixed.

    Now, the official definition of the C programming language says you're not allowed to do this, because names starting on a double underscore are reserved to the language's implementors (e.g.: Keil or IAR). So you would need some other instance to give you this permission, thus overriding the language standard. The only applicable candidate to be that instance is the documentation of the compiler or library you found this in. So please: look it up.

Children
No data