CS+ cc V8.04.00 r_main.c グロバール定義の変数に値が入らない

ターゲットRL78/G13で発生した問題ですが・・・・

R_main.cで定義したグローバル変数に値が入らない問題が発生して、頭を抱えていました。

定義した変数は、volatile uint16_t 型の1次元配列です。初期値を定義したら変数に値が入るようになった。(変な話です)

マップファイルの内容を確認する為に、変数/関数配列情報の出力オプションを有効にしたら何故かしら問題が解決ししました。

経験のある方は、おられませんか。

 

Parents
  • NoMaYさん回答有難うございます。
    マイコン型式を確認しましたが、同じでした。

    変数/関数配列情報の出力オプションを有効にしたら何故かしら問題が解決した様に見えましたが、構造体の変数が特に変です。
    構造体のメンバーもvolatile指定しています。
    typedef struct tagWork_State { /* ステージ遷移登録テーブル */
    volatile uint8_t work_stage_no; /* 現在のワークがいるステージ */
    volatile uint8_t work_OkNg; /* 検査結果 OKorNG */
    volatile uint16_t stage_distance_count[stage_num]; /* ワーク検出からステージ1検査までの距離mm */
    // ステージ0はワーク検出ステージであるため常に0
    volatile uint16_t g_test_led_distance_count[stage_num]; // [0]照明点灯開始距離カウンタ
    // [1]照明消灯距離カウンタ
    } Work_State;

    volatile Work_State g_work_state[Work_No_num] ; /* ワークステージ状態構造体の実態 */

    起動時に、変数の初期化を行っていますが、ウオッチで確認すると初期化した値が入らないです。
    謎です。
Reply
  • NoMaYさん回答有難うございます。
    マイコン型式を確認しましたが、同じでした。

    変数/関数配列情報の出力オプションを有効にしたら何故かしら問題が解決した様に見えましたが、構造体の変数が特に変です。
    構造体のメンバーもvolatile指定しています。
    typedef struct tagWork_State { /* ステージ遷移登録テーブル */
    volatile uint8_t work_stage_no; /* 現在のワークがいるステージ */
    volatile uint8_t work_OkNg; /* 検査結果 OKorNG */
    volatile uint16_t stage_distance_count[stage_num]; /* ワーク検出からステージ1検査までの距離mm */
    // ステージ0はワーク検出ステージであるため常に0
    volatile uint16_t g_test_led_distance_count[stage_num]; // [0]照明点灯開始距離カウンタ
    // [1]照明消灯距離カウンタ
    } Work_State;

    volatile Work_State g_work_state[Work_No_num] ; /* ワークステージ状態構造体の実態 */

    起動時に、変数の初期化を行っていますが、ウオッチで確認すると初期化した値が入らないです。
    謎です。
Children
No Data