CS+でシュミレータ動作確認とE1エミュレータでデバッグしていますが、RAM変数の動作が違います。
タイマー割り込みと、メインルーチンで簡単なプログラムを確認しています。
タイマー割恋でRAM変数にセットしますが、メインに戻りIOポートをアクセスすすると
RAM変数がクリアーされます。
CS+の設定の問題なのでしょうか。
教えてください。
以下。テストプログラムです。
/***********************************************************************//* *//* FILE :Main.c *//* DATE : *//* DESCRIPTION :Main Program *//* CPU TYPE : *//* *//* NOTE:THIS IS A TYPICAL EXAMPLE. *//* *//***********************************************************************/#include "iodefine.h"
#define DI __DI#define EI __EI
#define RXDDT P0_bit.no0#define LEDBIT P0_bit.no1#define HARISW P0_bit.no2#define PWBIT P0_bit.no3#define BUZZPT P0_bit.no4#define HIMO_SW P13_bit.no7
int Sycnt1;
void mainjob(void);void R_TAU0_Channel0_Start(void);
void timerjob(void){ if(Sycnt1-- == 0) { Sycnt1 = 1000; } }
void mainjob(void){ R_TAU0_Channel0_Start(); EI(); for(;;) { if(PWBIT == 1) // 電源? { if(HARISW == 1) // 貼り付けSW ON? { P0_bit.no1 = 1; } } }}
チョコです。
RL78/G10ですか。安全機能が悪さをしているかが気になっていたのですが,G10では無関係ですね。
シミュレータは,ハードウェアの全てをカバーできている訳ではないので,そこらが影響している可能性はあります。電源電圧が規格を満足していないとかノイズが大きいとかはないでしょうか。
シミュレータで確認したことはないのですが,ウォッチドッグタイマが悪さをしていないかも気になります。
また,E1でタイマ割り込みがきちんとかかっているかも確認する必要があります。
/***********************************************************************/ /* */ /* FILE :Main.c */ /* DATE : */ /* DESCRIPTION :Main Program */ /* CPU TYPE : */ /* */ /* NOTE:THIS IS A TYPICAL EXAMPLE. */ /* */ /***********************************************************************/ #include "iodefine.h" #define DI __DI #define EI __EI #define RXDDT P0_bit.no0 #define LEDBIT P0_bit.no1 #define HARISW P0_bit.no2 #define PWBIT P0_bit.no3 #define BUZZPT P0_bit.no4 #define HIMO_SW P13_bit.no7 int Sycnt1; void mainjob(void); void R_TAU0_Channel0_Start(void); void timerjob(void) { if(Sycnt1-- == 0) { Sycnt1 = 1000; } } void mainjob(void) { R_TAU0_Channel0_Start(); EI(); for(;;) { if(PWBIT == 1) // 電源? { if(HARISW == 1) // 貼り付けSW ON? { P0_bit.no1 = 1; } } } }
関係あるかわかりませんが割り込み処理で値の更新をしてるらしき Sycnt1 の宣言で volatile が付いてないのは気になりますね。あと R_TAU0_Channel0_Start() の関数プロトタイプ宣言をヘッダの拠らずに自前でやってるところも気になります。
関係あるかわかりませんが割り込み処理で値の更新をしてるらしき
Sycnt1 の
宣言で volatile が付いてないのは気になりますね。あと
R_TAU0_Channel0_Start() の関数プロトタイプ宣言をヘッダの拠らずに自前でやってるところも気になります。
きたさん、こんにちは。NoMaYと申します。宜しければ、シュミレータでうまく動いた状況が分かるCS+の画面コピーと、E1エミュレータでうまく動かなかった状況が分かるCS+の画面コピーの、2つの(それ以上でも可)の画面コピーを添付して、見せて頂けないでしょうか?(どんな操作をされて確認されたのかというイメージが沸いて来ないですので、、、)
NoMaYさん
画面コーピーを送ります
E1画面
シュミレータ画面
> ここで、Sycnt1が0リセットするようです。 > どうもIOアクセスを行うと、RAM変数がリセットするようです。 ステップ実行で確認できることと思いますが「~ようです」と推測の表現となっているのはなぜでしょうか?
きたさん、こんにちは。NoMaYです。画面コピー、どうも有難う御座いました。状況が理解出来ました。奇妙な症状ですね。次は、すみませんが、timerjob()の逆アセンブルウィンドウの画面コピーを見せて頂けませんか?