プログラム初心者です。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などで参照すべきがよいかご教授いただければ幸いです。