将数组保存在EEPROM中

时间:2015-06-08 13:15:32

标签: c avr

我有一个vectorx [8]并且我想将它的值保存在XMEGA的EEPROM中,因为这就是我所做的::

............................
    int16_t  vec1[8]; 
    int16_t  vec2[8]; 
    int16_t  vec3[8];
    int i =  0, j =1; 
    for ( i =0 ; i<8; i++){ // ini 
       vec1[i] = 23500; 
       vec2[i] = 20000;
       vec3[i] = 20000;
    }


for ( i =0; i<8 ; i++) {
 eeprom_update_word (( uint16_t *)j++, vec1[i]);
 eeprom_update_word (( uint16_t *)j++, vec2[i]);
 eeprom_update_word (( uint16_t *)j++, vec3[i]);
}

现在,当我尝试使用以下方法使用保存的值时: ................................

int16_t tempX[8];
int j  =2 ;
for ( i = 0 ; i < NUMBEROFSENSORS ; i++ ){

        tempX[i] = (int16_t) eeprom_read_word(j);
        j=  j+3;  // reading only vec1 
        printf(" j  read Value is : %d  \n",(int16_t)tempX[i]);
    }

我得到-13158而不是23500,所以我的问题是我在这里做错了什么?

将K改为某一点我得到了这个输出:

read Value is : 2627 

读取值为:2714 读取值为:2714 读取值为:2714 读取值为:23450 读取值为:-3584 读取值为:31744 读取值为:11008

1 个答案:

答案 0 :(得分:2)

j定义为uint16_t * j。然后++操作将使用2而不是1正确地增加它。并且您不需要强制转换:eeprom_update_word (j++, vec1[i])