说我有3个向量:
int16_t v1[8];
int16_t v2[8];
int16_t v3[8];
int8_t lock = 0;
我想将数组的值保存在EEPROM中。为此,这就是我所做的:
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;
}
我希望保存以下值:
// .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]);
}
要检查值是否已正确保存,我尝试将它们打印出来,如:
for (i=1; i < 26;i++ ){
ratio =(short)eeprom_read_word((uint8_t*)i);
printf(" WORD %d %d \n", i,ratio);
}
我真的不明白输出:
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
知道如何以正确的方式获得这个吗?
我&#39; v eexpend for循环,输出看起来一半正确! ! :
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
我无法解释这里发生的事情!
**更新** 将循环更改为:
for (i=1; i < 25;i++ ){
ratio =eeprom_read_word(j);
printf(" WORD %d %d \n", i,ratio);
j = j +2;
}
输出现在是:
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
来自哪里?
答案 0 :(得分:1)
您有24个16位值,总共48个字节,存储在EEPROM中,从地址2开始,最后一个字节存储在地址49.读取这些字节,从地址1开始,您尚未填充。你递增1但每次读两个字节,对吗?
我建议将i分配为short *类型,因此sizeof(short)会增加。另外,我会修复该起始地址以供阅读。
哦,对于24个值,循环结束值需要修复。
答案 1 :(得分:0)
正如donjuedo所说,你正在使用uint16_t类型指针来更新eeprom中的数据。增加此指针时,将在地址中向前移动2个字节。在读取时,你提供了一个uint8_t指针(对于函数&#34; eeprom_read_word&#34;),它只会增加一个字节。因此,您将获得备用垃圾值,而且只有总预期值的一半。 希望这可以帮助。