You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在for循环中按索引切换预设的EEPROM校准地址

循环中动态切换EEPROM写入地址的实现方案

你当前定义的三个校准地址0x1E、0x22、0x26刚好间隔4字节,和你每次写入4字节的操作长度匹配,可通过以下两种方案实现地址随循环索引自动切换:

方案1:地址偏移宏(适用于地址连续等差场景)

直接把宏修改为计算式,无需改动循环逻辑:

// 起始地址为0x1E,每个校准参数占4字节地址空间
#define EEPROM_ADDRESS_cal(i)  (0x1E + 4 * (i))

注意修正你代码里的宏名拼写错误:原代码中写的EEPROM_ADRESS_cal少了一个字母D,正确拼写为ADDRESS,避免编译报错。

方案2:地址查找表(适用于地址不连续场景)

如果后续校准参数地址不是等差排列,可以预先把所有地址存入常量数组,循环时按索引读取:

// 按索引顺序填入对应的EEPROM校准地址
static const uint16_t eeprom_cal_addr_table[] = {
    EEPROM_ADDRESS_cal0,
    EEPROM_ADDRESS_cal1,
    EEPROM_ADDRESS_cal2,
    0x2A, // 补全i=3对应的地址
    0x2E  // 补全i=4对应的地址
};

循环内的写入代码修改为:

mess.Stcal[i] = EEPROM_WRITE(eeprom_cal_addr_table[i], &mess.Stcal[i], 4);

注意事项

  • 你当前代码中EEPROM_WRITE每次写入4字节,请确认所用平台上double类型的长度是否为4字节。如果是8字节,需要把写入长度改为8,同时地址间隔调整为8,避免数据截断或地址冲突。
  • 确保用到的EEPROM地址区间没有被其他功能占用,避免数据被覆盖。

内容的提问来源于stack exchange,提问作者Marc Hammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:54:03