I am new to programming and I am not strong in pointers and typecasting, so I need some help.
I am using IAR Workbench and STM32L475. I am trying to convert 4 bytes in a struct to a float, after loading them from an Eeprom.
I know there can be challenges with Big/Little Endian and portability of code to other micro's but please do not clutter this thread with that as this is not important for me right now.
What am I doing wrong, thanks for helping?
Please keep it simple and explain "for dummies".
I am getting pe513 error.
My code:
struct Test {
    uint8_t Byte1;
    uint8_t Byte2;
    uint8_t Byte3;
    uint8_t Byte4;
} TestStruct;
float x = 0.0;
uint8_t *TestStruct_ptr;
int main(void)
{
    /* USER CODE BEGIN 1 */
    TestStruct.Byte1 = 0x41; //float value = 23.10
    TestStruct.Byte2 = 0xB8;
    TestStruct.Byte3 = 0xCC;
    TestStruct.Byte4 = 0xCD;  
    TestStruct_ptr = (float*)&TestStruct;
    x = (float*) TestStruct_ptr;
    // some code
    return 0;
}
Edit: I am loading an array from an Eeprom and must "collect" an array of four uint8 bytes to a float, they were a part of a struct before they were saved to the Eeprom. I will update with the exact error message when I get to work tomorrow.
I ended up using "union" as this seems to be the best solution.
My sample code looks like this now:
union Eeprom {
  struct {
    uint8_t Byte1;
    uint8_t Byte2;
    uint8_t Byte3;
    uint8_t Byte4;
  };
  float x;
  uint8_t Array[4];
};
int main(void)
{
  union Eeprom Test;
  //assign values to individual bytes
  Test.Byte1=0xCD; 
  Test.Byte2=0xCC;
  Test.Byte3=0xB8;
  Test.Byte4=0x41;
  //Assign values as an array (here individual bytes, overwrites above assigned values).
  //Data will be formatted as an array when loaded from E2prom.
  Test.Array[0]=0xCD;  
  Test.Array[1]=0xCC;
  Test.Array[2]=0xB8;
  Test.Array[3]=0x41;
  //Assign value as floating point value (overwrites the above assigned values)
  Test.x = 23.1;  
  printf("FPvalue %3.2f \n Byte1 %x\n Byte2 %x\n Byte3 %x\n Byte4 %x\n 
    Array[0] %x\n Array[1] %x\n Array[2] %x\n Array[3] %x\n",
    Test.x, Test.Byte1, Test.Byte2, Test.Byte3, Test.Byte4, 
    Test.Array[0], Test.Array[1], Test.Array[2], Test.Array[3]);
}
And the output looks like this:
floatvalue 23.10 
Byte1 cd
Byte2 cc
Byte3 b8
Byte4 41
Array[0] cd
Array[1] cc
Array[2] b8
Array[3] 41
 
     
     
     
     
    