CS+コードジェネレータソースコードにおける変数の宣言の仕方について

プログラム初心者です。
CS+のコードジェネレータを使ったファイルにおいて変数の宣言の仕方(セオリー?一般論?)についてご教授ください

RX231スターターキットのチュートリアルプログラムを変更しています。
グローバル変数を宣言し
r_cg_main.c、r_cg_cmt_user.c
にてその変数を使用したいです。

具体的には、r_cg_cmt_user.cにおいて、
cmt0のインタラプト(1msecでコンペアマッチする設定としている)で、g_ms_count、g_sec_countという変数で ミリ秒、秒 をカウントし
r_cg_main.cのメインループにて、g_sec_count変数のとある条件で各種作業を行い、その変数が10秒になったらg_ms_count、g_sec_countをクリアし
再び10秒カウントに入り上記動作を繰り返したいと思っています。

見よう見まねで色々試行錯誤はしてみたのですが、以下どう考えればよいのかお教えいただければと思います。

質問
r_cg_userdefine.h 内でグローバル変数を宣言するのがセオリーですか?左記ヘッダはr_cg_main.c、r_cg_cmt_user.cでインクルードしています。
ただ、これを行うと色々エラーが出て、現在行き着いた(エラーが出なくなった)のは、
r_cg_userdefine.h にて、extern volatile uint16_t g_sec_count; と宣言
r_cg_main.c にて、特に宣言なし
r_cg_cmt_user.c にて、volatile uint16_t g_ms_counter; と宣言
としています。
externは他で定義されているグローバル変数を参照するための識別子となると、r_cg_userdefine.hでグローバル変数の実体は定義されていないように思えます。
上記の場合実体の定義はr_cg_cmt_user.cでされているのでしょうか?その場合、r_cg_main.cはなぜ宣言なしでその変数を使えているのでしょうか?

取り留めのない質問となりますが、グローバル変数やローカル変数はどこに配置し、どのようにexternなどで参照すべきがよいかご教授いただければ幸いです。

Parents
  • 昔からのやり方ですが参考になれば。

    r_cg_userdefine.hに以下を記述します。
    GLOBAL int var1;

    main.cには以下を記述します。
    #include "r_cg_userdefine.h"
    #define GLOBAL // "GLOBAL"が消えるのでmain.cでvar1の実体を宣言することになります

    その他のCソースファイルには以下を記述します。
    #include "r_cg_userdefine.h"
    #define GLOBAL extern // 参照になります
  • Moo様

    ご教授ありがとうございます。
    やってみたのですが、私のやり方がマズイせいか上手くいきませんでした。
    もう少々格闘してみます。
Reply
  • Moo様

    ご教授ありがとうございます。
    やってみたのですが、私のやり方がマズイせいか上手くいきませんでした。
    もう少々格闘してみます。
Children
No Data