首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从EEPROM读取

从EEPROM读取
EN

Stack Overflow用户
提问于 2015-06-08 16:53:53
回答 2查看 693关注 0票数 4

假设我有三个向量:

代码语言:javascript
复制
int16_t v1[8];
int16_t v2[8];
int16_t v3[8];
int8_t lock = 0; 

我想在EEPROM中保存数组的值。为此,以下是我所做的:

代码语言:javascript
复制
int i = 0; 
uint16_t * j =  (uint16_t*) 2 ;
short ratio=0;  
for ( i =0; i<8;i++){


    v1[i] = 22500;
    v2[i] = 10500;
    v3[i] = 20888;
}

我想保存如下的值:

代码语言:javascript
复制
//  .startat at the 3rd byte 

//  v1[0]v2[0]v3[0]v1[1]v2[1]v3[1] ----------> v1[7]v2[7]v3[7]



for ( i = 0 ; i <8; i++ ){
    //printf("j = %d \n",j);
    eeprom_update_word (j++, v1[i]);
    eeprom_update_word (j++, v2[i]);
    eeprom_update_word (j++, v3[i]);
}

为了检查值是否被正确保存,我尝试将它们打印出来如下:

代码语言:javascript
复制
for (i=1; i < 26;i++ ){
    ratio =(short)eeprom_read_word((uint8_t*)i);
    printf(" WORD  %d     %d \n", i,ratio);
}

我真的不明白输出:

代码语言:javascript
复制
 WORD  1     -7168
 WORD  2     22500
 WORD  3     1111
 WORD  4     10500
 WORD  5     -26583
 WORD  6     20888
 WORD  7     -7087
 WORD  8     22500
 WORD  9     1111
 WORD  10     10500
 WORD  11     -26583
 WORD  12     20888
 WORD  13     -7087
 WORD  14     22500
 WORD  15     1111
 WORD  16     10500
 WORD  17     -26583
 WORD  18     20888
 WORD  19     -7087
 WORD  20     22500
 WORD  21     1111
 WORD  22     10500
 WORD  23     -26583
 WORD  24     20888
 WORD  25     -7087

知道怎么才能找到正确的方法吗?

我使用for循环,输出看起来一半正确!

代码语言:javascript
复制
 WORD  1     -7168
 WORD  2     22500
 WORD  3     -4009
 WORD  4     22000
 WORD  5     9813
 WORD  6     21030
 WORD  7     -7086
 WORD  8     22500
 WORD  9     -4009
 WORD  10     22000
 WORD  11     9813
 WORD  12     21030
 WORD  13     -7086
 WORD  14     22500
 WORD  15     -4009
 WORD  16     22000
 WORD  17     9813
 WORD  18     21030
 WORD  19     -7086
 WORD  20     22500
 WORD  21     -4009
 WORD  22     22000
 WORD  23     9813
 WORD  24     21030
 WORD  25     -7086
 WORD  26     22500
 WORD  27     -4009
 WORD  28     22000
 WORD  29     9813
 WORD  30     21030
 WORD  31     -7086
 WORD  32     22500
 WORD  33     -4009
 WORD  34     22000
 WORD  35     9813
 WORD  36     21030
 WORD  37     -7086
 WORD  38     22500
 WORD  39     -4009
 WORD  40     22000
 WORD  41     9813
 WORD  42     21030
 WORD  43     -7086
 WORD  44     22500
 WORD  45     -4009
 WORD  46     22000
 WORD  47     9813
 WORD  48     21030
 WORD  49     82
 WORD  50     0
 WORD  51     0

我无法解释这里发生了什么!

**更新**将循环更改为:

代码语言:javascript
复制
for (i=1; i < 25;i++ ){
            ratio =eeprom_read_word(j);
            printf(" WORD  %d     %d \n", i,ratio);
            j  = j +2; 
        }

现在的产出是:

代码语言:javascript
复制
 WORD  1     22500
 WORD  2     21030
 WORD  3     22000
 WORD  4     22500
 WORD  5     21030
 WORD  6     22000
 WORD  7     22500
 WORD  8     21030
 WORD  9     22000
 WORD  10     22500
 WORD  11     21030
 WORD  12     22000
 WORD  13     22500
 WORD  14     22000
 WORD  15     0
 WORD  16     0
 WORD  17     22500
 WORD  18     22000
 WORD  19     0
 WORD  20     0
 WORD  21     22500
 WORD  22     22000
 WORD  23     0
 WORD  24     0

我还是不明白0是从哪里来的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-08 17:12:13

您有24个16位值,总共48字节,存储在从地址2开始的EEPROM中,最后一个字节存储在地址49。读取这些字节后,您将从地址1开始,而该地址尚未填充。增加1,但每次读取两个字节,对吗?

我建议将I作为一个短*类型分配,因此增量增加了相当大(短)。另外,我还会修改阅读的起始地址。

哦,对于24个值,循环结束值需要修复。

票数 1
EN

Stack Overflow用户

发布于 2015-06-08 19:12:29

正如donjuedo所说,您正在使用uint16_t类型指针来更新eeprom中的数据。当您增加此指针时,您将在地址中向前移动2个字节。在读取时,您提供了一个uint8_t指针(用于函数"eeprom_read_word"),它只会增加一个字节。因此,您得到的是替代垃圾值,并且只有总期望值的一半。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30714927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档