RL78 CS+のシュミレート と E1エミュレータ での設定の差

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;
}
}
}
}

Parents
  • 
    /***********************************************************************/
    /* */
    /* 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() の関数プロトタイプ宣言をヘッダの拠らずに自前でやってるところも気になります。
  • チョコさん
    ご返事ありがとうございます。

    volatile を付けてみましたが、やはり上手くいきません。

    timerjobでIOアクセスを毎回行うようにすると
    ここで、Sycnt1が0リセットするようです。
    どうもIOアクセスを行うと、RAM変数がリセットするようです。



    /***********************************************************************/
    /* */
    /* FILE :Main.c */
    /* */
    /***********************************************************************/
    #include "iodefine.h"

    #define DI __DI
    #define EI __EI

    #define HARISW P0_bit.no0
    #define RXDDT P0_bit.no1
    #define LEDBIT P0_bit.no2 // OUT
    #define PWBIT P0_bit.no3 // OUT

    #define BUZZPT P0_bit.no4
    #define HIMO_SW P13_bit.no7

    volatile int Sycnt1;
    volatile char Ledflg;


    void R_TAU0_Channel0_Start(void);



    void timerjob(void)
    {
    if(Sycnt1-- == 0)
    {
    Sycnt1 = 1000; // 100msec

    LEDBIT ^= 1;    // IOアクセス

    if(Ledflg == 1)
    {
    LEDBIT ^= 1;
    }
    }


    }


    void mainjob(void)
    {
    R_TAU0_Channel0_Start();
    EI();
    PWBIT = 1;

    for(;;)
    {
    PWBIT ^= 1;
    // LEDBIT ^= 1;


    /*
    if(PWBIT == 1) // 電源?
    {
    if(HARISW == 0) // 貼り付けSW ON?
    {
    Ledflg = 1;
    }
    else
    {
    Ledflg = 0;
    }
    }
    */
    }
    }
Reply
  • チョコさん
    ご返事ありがとうございます。

    volatile を付けてみましたが、やはり上手くいきません。

    timerjobでIOアクセスを毎回行うようにすると
    ここで、Sycnt1が0リセットするようです。
    どうもIOアクセスを行うと、RAM変数がリセットするようです。



    /***********************************************************************/
    /* */
    /* FILE :Main.c */
    /* */
    /***********************************************************************/
    #include "iodefine.h"

    #define DI __DI
    #define EI __EI

    #define HARISW P0_bit.no0
    #define RXDDT P0_bit.no1
    #define LEDBIT P0_bit.no2 // OUT
    #define PWBIT P0_bit.no3 // OUT

    #define BUZZPT P0_bit.no4
    #define HIMO_SW P13_bit.no7

    volatile int Sycnt1;
    volatile char Ledflg;


    void R_TAU0_Channel0_Start(void);



    void timerjob(void)
    {
    if(Sycnt1-- == 0)
    {
    Sycnt1 = 1000; // 100msec

    LEDBIT ^= 1;    // IOアクセス

    if(Ledflg == 1)
    {
    LEDBIT ^= 1;
    }
    }


    }


    void mainjob(void)
    {
    R_TAU0_Channel0_Start();
    EI();
    PWBIT = 1;

    for(;;)
    {
    PWBIT ^= 1;
    // LEDBIT ^= 1;


    /*
    if(PWBIT == 1) // 電源?
    {
    if(HARISW == 0) // 貼り付けSW ON?
    {
    Ledflg = 1;
    }
    else
    {
    Ledflg = 0;
    }
    }
    */
    }
    }
Children
  • > ここで、Sycnt1が0リセットするようです。
    > どうもIOアクセスを行うと、RAM変数がリセットするようです。

    ステップ実行で確認できることと思いますが「~ようです」と推測の表現となっているのはなぜでしょうか?

  • fujitaさん

    ご返事ありがとうございます。
    その様な動作をしている のニュアンスを書いています。
    記載を気を付けます。

    IOをアクセスすると、RAM変数がリセットします。

    HEWで30年H8を使ってきてこんな事はなく、CS+に切り替えた途端起きて戸惑っています。