CubeSuite+ のコード生成(以下Cg と略)が自動生成するファイルを解説します。
先ず、使用マイコンを、なんでも良いので適当に選んで、新しいプロジェクトを作成すると、コード生成プレビュータグの画面が現れます。この時、プロジェクト・ツリーのクロック発生回路に“! マーク”が付いています。最初に、このマークに対応します。
! マークが付いた、クロック発生回路をダブルクリックして下さい。端子割り当て設定タブに、赤字表記で、“はじめに必ず設定してください。また、この設定は1 度行うと変更ができません 。”が現れます。PIOR00 ビット=1などを選択すると、端子と機能が自動的に変わります。CubeSuite+のCg を使うには、この端子と機能を確定する必要があります 。
図01 クロック発生回路に!マークが付いた初期画面
ここでは、適当にPIOR のチェックボックスを選択して、“確定するボタン”を押し、その後、“コード生成(G )ボタン”を押します。すると、プロジェクト・ツリーのファイル+コード生成箇所に、自動的にいくつかのC ファイルとヘッダーファイルが生成されます。生成ファイル名には、先頭に“r_ ”が付いたものと、“r_cg_ ”の付いた2 種類があります。
この”r_” は、ルネサスを、“cg_” は、コード生成を意味し、ユーザが独自に作成するファイルと、Cg が作成したファイルを区別する役目を果たします。”cg_” の後は、マイコン内蔵の周辺名と、macrodriver.h/userdefine.h が続きます。
r_lk.dr も生成されますが、別の機会に解説します。
図02 コード生成が生成したファイル
まとめると、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+ 「コード生成」の使い方”を参照してください。