EEPROMからRAMへ移動したがウォッチできない
現在、Atmel Studio6.2でatmega88pマイコンのプログラミングを行っています。リアルタイムデバッグではJTAGICE3を使用しています。プログラムのVersion値とeepromに保存しているVersion値を比較して、違いがあった場合は、プログラムの更新があったことを記録するため、最新のVersion値をEEPROMに書き込むプログラムを作成したのですが、EEPROMからRAM領域へ取り出したデータをリアルタイムデバッグでウォッチできない現象が起こり困っています。
なお、このプロジェクトフォルダは
https://sourceforge.jp/projects/cc1101driver/scm/svn/tree/2564/branches/test002_AVRS6_20140819/test02/
こちらで公開させてもらっています。
(EEPROM領域側)
#define EEPROM __attribute__((section(".eeprom")))
save_eeprom_data_t EEPROM save_eeprom_data;
(RAM領域側)
new_ctl_data tnew_ctl_data;
main関数スタート後
check_env()関数内でEEPROM領域からRAM領域へデータを
my_eeprom_read_block((u8 *)&tnew_ctl_data,(u8 *)&save_eeprom_data.gnew_ctl_data,sizeof(ctl_data));
この関数で読み出しているのですが、再度main関数内で
if(tnew_ctl_data.fix_osccal_flag != 0x01 || tnew_ctl_data.prog_ver != PRG_VERSION)
{
------(中略)---------------------------------
}
このコードに来たときにtnew_ctl_dataをウォッチしても
new_ctl_data.fix_osccal_flag
tnew_ctl_data.prog_ver
どちらの値も0x00と表示されてしまいます。
また、
tnew_ctl_data.prog_ver の値は0xdcのはずなのですが、0x00となっており、
PRG_VERSIONは
#define PRG_VERSION 0xDD
0x00 と0xDDでは違いが出ているのですが、そのときの条件でEEPROM内容を
tnew_ctl_data.fix_osccal_flag = 0x01;
tnew_ctl_data.prog_ver = PRG_VERSION;
eeprom_busy_wait();
eeprom_write_block(&tnew_ctl_data.fix_osccal_val,&save_eeprom_data.gnew_ctl_data.fix_osccal_val,3);
このコードで0xddにtnew_ctl_data.prog_verの領域バイトを書き換えるはずなのですが、0xdcのままになってしまいます。
このような場合、どのように修正したら良いのかをご教示頂きますよう、お願い致します。
お礼
なるほど。すっきりしました。ありがとうございました。