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
  • msatoさん、こんにちは。NoMaYです。

    可能であれば、以下の2つについて、プロジェクトのファイル一式をzipファイルに固めたものを添付して頂けるとうれしいです。それを実際に見て、状況の確認がしたいです。

    (1) 以下のエラーが発生していた以前のプロジェクトのファイル一式

    > r_cg_userdefine.h 内でグローバル変数を宣言するのがセオリーですか?左記ヘッダはr_cg_main.c、r_cg_cmt_user.cでインクルードしています。
    > ただ、これを行うと色々エラーが出て、

    (2) 以下の疑問点が生じている現在のプロジェクトのファイル一式

    > 現在行き着いた(エラーが出なくなった)のは、
    。。。
    > externは他で定義されているグローバル変数を参照するための識別子となると、r_cg_userdefine.hでグローバル変数の実体は定義されていないように思えます。
    > 上記の場合実体の定義はr_cg_cmt_user.cでされているのでしょうか?その場合、r_cg_main.cはなぜ宣言なしでその変数を使えているのでしょうか?

Reply
  • msatoさん、こんにちは。NoMaYです。

    可能であれば、以下の2つについて、プロジェクトのファイル一式をzipファイルに固めたものを添付して頂けるとうれしいです。それを実際に見て、状況の確認がしたいです。

    (1) 以下のエラーが発生していた以前のプロジェクトのファイル一式

    > r_cg_userdefine.h 内でグローバル変数を宣言するのがセオリーですか?左記ヘッダはr_cg_main.c、r_cg_cmt_user.cでインクルードしています。
    > ただ、これを行うと色々エラーが出て、

    (2) 以下の疑問点が生じている現在のプロジェクトのファイル一式

    > 現在行き着いた(エラーが出なくなった)のは、
    。。。
    > externは他で定義されているグローバル変数を参照するための識別子となると、r_cg_userdefine.hでグローバル変数の実体は定義されていないように思えます。
    > 上記の場合実体の定義はr_cg_cmt_user.cでされているのでしょうか?その場合、r_cg_main.cはなぜ宣言なしでその変数を使えているのでしょうか?

Children
No Data