cancel
Showing results for 
Search instead for 
Did you mean: 

I migrated a successfully generated iar program manually in to stm32cube IDE. Even though the declaration is correct it keep saying conflicting type. Why is it so?

Nmv1608
Associate II
 
5 REPLIES 5

Error says what specifically? And what do those lines have on them? Most of this stuff can be troubleshooted if you provide sufficient/adequate information.

Some of the newer compilers have a lot more rigour in what they complain about, and aren't going to tolerate a redefinition of types.

Check the version of C/C++ the GNU compiler is implementing/enforcing, check if that is consistent with IAR

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Andrew Neil
Evangelist III

Usually, GCC does not just say "conflicting type" and leave it at that - it will usually go on to detail what type it was expecting, and what it saw instead.

As @Community member​  says, you haven't given enough detail to make any more specific suggestions.

You need to post the code that gives the error, and the complete, unabridged message - use copy & paste; do not manually re-type.

Use the 'Code Snippet' button.

S.Ma
Principal

I had a similar compiler issue because for gcc "int" is different type than "uint32_t" as return parameter of a function.

Maybe something like this ?

Nmv1608
Associate II
void parse_ipv6_address(uint8 *v, uint8 *buf)
{
  uint8 value = 0;
  uint8 offset = 0;
  uint8 index = 0;
  uint16 buffer_offset = 0;
  uint8 temp_buff[10];
  uint32 v6[4] = {'\0'};
  temp_buff[0] = '\0';
  uint8 i = 0;
  //! Total 8 octets
  for(index = 0; index < 8 ;index++)
  {
    //! each octet contains max of 5 characters including . dot
    for(offset = 0;offset < 5 ; offset++)
    {
      value = buf[buffer_offset++];
      if((value == '.') || (value == ':'))
      {
        break;
      }
      temp_buff[offset] =  value;    
    }
    temp_buff[offset]= '\0';
    if(index % 2 == 0)
    {
      v6[index/2] = (parseHex(temp_buff) << 16);
    }
    else
    {
      v6[index/2] |= parseHex(temp_buff);
    }
    temp_buff[0] = '\0';
  }
 
  for(i = 0; i < 4; i++)
  {
    rsi_uint32_to_4bytes((v+(4*i)), v6[i]); //  Function definition
 
  }
}

the problem started when I migrated the code to gcc compiler.

void rsi_uint32_to_4bytes(uint8 *dBuf, uint32 val);
void rsi_uint16_to_2bytes(uint8 *dBuf, uint16 val);// function declaration
void string2array(uint8 *dst, uint8 *src, uint32 length);
../Core/Src/wifidrv/rsi_app_util.c:626:5: error: too many arguments to function 'rsi_uint32_to_4bytes'

the error is showing there is conflicting types and when i made changes it keep saying the above error.

  for(i = 0; i < 4; i++)
  {
    rsi_uint32_to_4bytes((v+(4*i)), v6[i]); //  Function definition
 
  }

No, that is not the function definition!

That is a call to the function!

../Core/Src/wifidrv/rsi_app_util.c:626:5: error: too many arguments to function 'rsi_uint32_to_4bytes'

Note that this tells you exactly where the error is detected: it's at line 626 in the file rsi_app_util.c