type-conversion - 将 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;
}
解决方案
推荐阅读
- javascript - 如何使用两个词命名 Google Map Marker Icon 类型?
- sql-server - dtexec /val /proj my.ispac /pack my.dtsx /rep v 立即返回,没有任何消息
- javascript - 无法从 React 前端的 ActionCable 访问数据
- python - 使用 tkinter 创建进度条
- c++ - VTK - 从 6.1 迁移到 8.2 [2]
- r - Filter read_lines output?
- mysql - 如何使用 MySQL 禁止 2 个用户在 Web 应用程序中编辑相同的数据(如果可能,使用 CodeIgniter)
- angular - Angular Protractor E2E-Test 用于 PDF 内容/文件流测试
- openshift - 我们可以向 OpenShift 默认 UI 添加功能吗
- web-scraping - 抓取、上传和通知