CubeSuite+のコード生成(以下Cgと略)が自動生成するファイルを解説します。
先ず、使用マイコンを、なんでも良いので適当に選んで、新しいプロジェクトを作成すると、コード生成プレビュータグの画面が現れます。この時、プロジェクト・ツリーのクロック発生回路に“!マーク”が付いています。最初に、このマークに対応します。
!マークが付いた、クロック発生回路をダブルクリックして下さい。端子割り当て設定タブに、赤字表記で、“はじめに必ず設定してください。また、この設定は1度行うと変更ができません。”が現れます。PIOR00ビット=1などを選択すると、端子と機能が自動的に変わります。CubeSuite+のCgを使うには、この端子と機能を確定する必要があります。
ここでは、適当にPIORのチェックボックスを選択して、“確定するボタン”を押し、その後、“コード生成(G)ボタン”を押します。すると、プロジェクト・ツリーのファイル+コード生成箇所に、自動的にいくつかのCファイルとヘッダーファイルが生成されます。生成ファイル名には、先頭に“r_”が付いたものと、“r_cg_”の付いた2種類があります。
この”r_”は、ルネサスを、“cg_”は、コード生成を意味し、ユーザが独自に作成するファイルと、Cgが作成したファイルを区別する役目を果たします。”cg_”の後は、マイコン内蔵の周辺名と、macrodriver.h/userdefine.hが続きます。
r_lk.drも生成されますが、別の機会に解説します。
まとめると、Cgは、以下の5種類のファイルを生成します。
表01 CubeSuite+のコード生成が作るファイル種類
生成ファイル名 | 説明 | 補足 |
r_main.c | main()を含む | 内蔵周辺のAPIヘッダーファイルは、Cgが追加済み。 |
r_systeminit.c | hwdinit()を含む | 内蔵周辺のAPIヘッダーファイルは、Cgが追加済み。hdwinit()は、main()を起動。hdwinit()は、スタートアップ・ルーチンが起動。 |
r_cg_周辺.cとh | 内蔵周辺に応じてCg自動生成 | 周辺設定に応じてCgが生成したAPI関数を含むcファイルと、そのAPI関連のマクロ、プロトタイプ宣言を含むヘッダーファイル。周辺をユーザがどう使うかを記述するr_cg_周辺_user.cファイル(デフォルト中身は空)。 |
r_cg_macrodriver.h | システム定義ファイル(#progma sfrなど) | 全ファイルに自動追加 |
r_cg_userdefine.h | ユーザ独自定義ファイル | 全ファイルに自動追加(デフォルト中身は空) |
ソースの起動順序は、スタートアップ・ルーチン→hdwinit()→main()なので、もし、Cgを使わずに、全ソースをユーザが作る場合は、“r_”なしの、main.cとsysteminit.cファイルを最低限記述すれば良いことも判ります。
r_cg_macrodriver.hは、#progma sfrや#progma NOPなどと、最低限の型を定義したファイルで、r_cg_userdefine.hは、ユーザが追加する型や、プロトタイプ宣言を記述するファイルでデフォルトは空です。どちらのファイルもCgが、全てのソースファイルに追加済みです。
このように、Cgを使うと、使用する内臓周辺に応じてファイルが分離されたプログラムの入れ物:スケルトンテンプレートを作ってくれます。後は、このテンプレートへ、周辺をどのように使うかをr_cg_周辺_user.cで追加したり、Cgが生成したAPI関数をどのように使うかをmain()などに記述したりすれば、プログラム完成です。
また、端子と機能を除く、周辺機能は、Cgで再設定ができます。Cgが生成したソースのコメント、/* Start user code for pragma. Do not edit comment generated here */と、/* End user code. Do not edit comment generated here */の間に、ユーザが追加したソースは、そのまま再設定後コード生成したソースへ上書きされるからです。詳しくは、4月14日の“CubeSuite+「コード生成」の使い方”を参照してください。