首页 > 解决方案 > 将 float/double 写入 EEPROM 将 double/float 转换为 uint8_t

问题描述

您好,我有两个简单的函数可以将值写入 EEPROM,但这不能正常工作。我在转换中做错了什么?示例写入输入:1 读取输出:0

写输入:1.1 读输出:-1717986944

写输入:500.03 读输出:-515396064

#define EEPROM_BASE_ADDRESS 0x08080000UL

HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data) {
  HAL_StatusTypeDef  status;
  address = address + EEPROM_BASE_ADDRESS;
  HAL_FLASHEx_DATAEEPROM_Unlock();  //Unprotect the EEPROM to allow writing
  status = HAL_FLASHEx_DATAEEPROM_Program(TYPEPROGRAMDATA_BYTE, address, data);
  HAL_FLASHEx_DATAEEPROM_Lock();  // Reprotect the EEPROM
  return status;
  }

uint8_t readEEPROMByte(uint32_t address) {
  uint8_t data = 0;
  address = address + EEPROM_BASE_ADDRESS;
  data = *(__IO uint8_t*)address;
  return data;
  }

void saveConfigToEEPROM (uint32_t address, double data)
{
    uint8_t *array;
    array = (uint8_t*)(&data);
    for(int i=0;i<8;i++) //float to array of uint8_t
    {
        writeEEPROMByte(address+i, array[i]);
    }
}

double loadConfigFromEEPROM (uint32_t address)
{
    double value = 0;
    uint8_t data[8];
    for(int i=0;i<8;i++) //float to array of uint8_t
    {
        data[i] = readEEPROMByte(address+i);
    }
    value = *(double *)(&data);
    //memcpy(&value, data, sizeof(value));
    return value;
}

标签: type-conversionstm32

解决方案


推荐阅读