Type conversion 将float/double写入EEPROM将double/float转换为uint8\t
您好,我有两个简单的函数将值写入EEPROM,但这不能正常工作。我做错了什么?转换有什么问题吗? 例子 写入输入:1 读取输出:0 写入输入:1.1 读取输出:-1717986944 写入输入:500.03 读取输出:-515396064Type conversion 将float/double写入EEPROM将double/float转换为uint8\t,type-conversion,stm32,Type Conversion,Stm32,您好,我有两个简单的函数将值写入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
#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;
}
#定义EEPROM_基地址0x08080000UL
HAL_StatusTypeDef WriteePromByte(uint32地址,uint8数据){
HAL_状态类型定义状态;
地址=地址+EEPROM\u基地址;
HAL_flashx_DATAEEPROM_Unlock();//解除EEPROM的保护以允许写入
状态=HAL_闪存X_数据EEPROM_程序(类型程序数据_字节、地址、数据);
HAL_flashx_DATAEEPROM_Lock();//重新保护EEPROM
返回状态;
}
uint8\u t readEEPROMByte(uint32\u t地址){
uint8_t数据=0;
地址=地址+EEPROM\u基地址;
数据=*(\uu IO uint8\u t*)地址;
返回数据;
}
void saveConfigToEEPROM(uint32\u t地址,双数据)
{
uint8_t*阵列;
数组=(uint8_t*)(&data);
对于(int i=0;iNo)您对上一个问题的反馈(请参阅),现在您正在使用相同的代码打开一个新问题?