Сорри, но не забыл ли ты сказать компилятору, что твоя переменная лежит в EEPROM?
И если она изменяется/считывается разными участками программы (да еще и не является глобальной), то объявил ли ты ее как
volatile?
При наличии ровного софта и аккуратности все работает. У меня CVAVR 1.24.7d и Proteus 6.9SP5. Если забацать текст на Си:
//=======================================
eeprom volatile int MyCounter=0;
void main(void)
{
volatile int FCounter;
volatile char i=0;
printf("Program started...\r\n");
for (i=32;i‹49;i++)
{
printf("I=%1x, ",i);
MyCounter=i-16;
printf("IMyCounter=%1x, ",MyCounter);
FCounter=MyCounter-16;
printf("FCounter=%1x\r\n",FCounter);
};
}
//=======================================
и залить в Proteus в виде COF - скриншот смотри ниже.
Как говорится, легко видеть, что при текущем i=0x22 переменная MyCounter получила значение 0x12(=0x22-0d16). То, что MyCounter получила значение 0x12 на только что выполненном шаге трассировки, подчеркнуто выделением в окне EEPROM.
Считывание MyCounter из EEPROM тоже проходит корректно, иначе бы мы не получили в прошлом цикле FCounter=0х01(=0x11-0d16).
На всякий случай прицепляю архив с проектом. Если ты вдруг пишешь на АСМ, - там есть и asm-файл.
Строка "eeprom volatile int MyCounter=0;"
при трансляции выливается в ассемблерный текст
.ESEG
_MyCounter:
.DW 0x0
P.S. "volatile" для "FCounter" и "i" проставлены исключительно для наглядности; чтобы эти переменные лежали не в стеке, а в памяти и потому цеплялись бы Proteus'ным окном Variables без дополнительных шаманств.
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/22092006/2409435.png" frameborder="0" name="fr2812310" scrolling="yes" width="470" height="818" align="bottom"›[img]nuke/users_images/22092006/2409435.png[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.
‹/IFRAME›
‹/center›
Прикрепленный файл:
3418208.zip