マイコンセミナーテキストの概要

2013年4月2日発行のルネサスエレクトロニクスセミナーニュースVol.83によると、マイコンセミナーのテキストをPDFで公開しており、セミナー受講に関係なく閲覧ができます。そこで、RL78とR8Cのテキストをダウンロードしましたので、その概要を示します。

セミナーテキストは、1ページに“スライド+解説”の構成で、網羅的記述のユーザーズマニュアルよりは、理解しやすいものです(但し、下記に示すように結構ページ数がある)。また、ユーザーズマニュアルの重要項目のみを抜き出して解説しているので、この内容を理解していれば、RL78、R8Cマイコンを使用するには十分な内容と推測されます。機種は、RL78/G14に限定して解説していますが、G13にもほとんどそのまま適用できます。

テキスト名 概要
RL78マイコンコース2013/2/26 Rev.1.22

(全243ページ)

RL78/G14のユーザーズマニュアル・ハードウエア編のサブセット。

G14特有のイベント・リンク・コントローラ、データ・トランスファ・コントローラの記述あり。第6章の割込み制御は、理解しやすく良くできている。CubeSuite+のコード生成を利用する際に、割込み優先順位とバンク設定の考え方の参考になる。

RL78コンパイラコース2013/3/18 Rev.1.05

(全194ページ)

ユーザーズマニュアル・RL78、78K0Rコーティング編のサブセット。

共用体を配列として宣言する場合は、全体が偶数サイズとなるようにメンバ調整が必須などの注意事項記述。第3章の効率アップ手法と、第6章のスタックサイズの算出は、必読。

R8Cマイコンコース2012/3/21 Rev.2.20

(全238ページ)

R8C/25のハードウエアユーザーズマニュアルと、Cコンパイラユーザーズマニュアルのサブセット。

R8Cは、3/x、5/xと性能と使いやすさを追求して展開中であるが、本テキストは、R8C/25に限定して解説しており、個人的にはうれしいし、役立つ。全体の目次ページが無いので、各章目次を抜き出したものを以下に添付。

 

R8Cマイコンコーステキスト全体目次

第1章 概要

1.1 R8Cファミリの特徴

1.2 R8Cファミリのシリーズ展開

1.3 R8C/25グループ概略仕様

1.4 開発ツール

第2章 R8C/2xシリーズのハードウェア

2.1 アドレス空間

2.2 リセット動作と電圧検出回路

2.3 発振回路

2.4 パワーコントロール

2.5 プロテクト機能

第3章 R8Cファミリのアーキテクチャ

3.1 SFR領域と固定ベクタテーブル

3.2 レジスタセット

3.3 扱えるデータタイプ

3.4 メモリとレジスタ上のデータ配置

3.5 アドレッシングモード

3.6 命令セット

第4章 NC30の実装仕様

4.1 概要

4.2 データ型と修飾子

4.3 絶対番地へのアクセス

4.4 メモリ配置

第5章 スタートアッププログラム

5.1 役割と構成

5.2 プログラム例

5.3 スタック使用量の算出

第6章 R8Cファミリの割り込み制御

6.1 割り込みの動作と使用方法

6.2 INT割り込み

第7章 割り込みプログラムの記述

7.1 割り込みを使うには

7.2 スタートアッププログラム

7.3 割り込みの初期化

7.4 割り込み関数

第8章 R8C/25グループの内蔵周辺機能

8.1 プログラマブル入出力ポート

8.2 タイマ

8.3 ウォッチドッグタイマ

8.4 シリアルインタフェース

8.5 A/Dコンバータ

8.6 フラッシュメモリ

付録

A. NC30起動オプション一覧

B. アセンブリ言語レベルの最適化

構造体と共用体

構造体と共用体は、マイコンのソフト作成時、初心者には必須技術です。既存ソースの理解や、コード生成ソースの解読に欠かせないからです。そこで、初心者も判りやすいシンプルな解説書を作成しました。

構造体は、“複数の既存型で、新しい型を作る”。共用体は、“複数の既存型で、メモリを共有する”。この2点を覚えてください。そうすれば、以下の例(R8C/25)が理解できます。RL78の場合は、”bit”が予約語になっているので、適当に変えれば(私の場合は、”b”を使用)使えます。

構造体の解説
構造体の解説
構造体の中身
構造体の中身

 

共用体の解説
共用体の解説
共用体の中身
共用体の中身

 

コード生成の不具合とリリース・ノート一読の薦め

ソフトにバグは付き物です。CubeSuite+のコード生成にも、このバグがあります。自作ソフトのバグと、純正ツールが生成したバグ、両方に対処する必要があるのは残念ですが、やむを得ません。今回は、2013年2月15日にリリースされたコード生成バグで、RL78/G13とG14に関するものを2点紹介します。

CA78K0Rの更新履歴
CA78K0Rの更新履歴

ここ1年のCubeSuite+、CA78K0Rの更新履歴を診ると、2~3か月でバージョンアップされていることが判ります。CA78K0Rは、純正ビルド・ツールで、コード生成もこのツール出力です。各版フォルダ内にDocフォルダがあり、この中にリリース・ノートがあります。

リリース・ノートには、変更点と注意事項があり、使用前に必ず読むようにありますが、初心者は読まないでしょう。ツール更新が自動化され、更新完了すると、なるべく早く開発を継続したいからです。そうすると、自作バグと純正ツールバグの切り分けができず、ハマッテしまいます。経験者は、このハマッタ経験があるから、ツール更新時は、落ち着いてリリース・ノートを読みます。

RL78/G13とG14の注意点:スタートアップ・ルーチン

スタートアップルーチンの注意事項
スタートアップルーチンの注意事項

初心~中級者は、スタック領域サイズを変更することはないと思います、が、念のため読んでおきましょう。コード生成が出力するr_systeminit.cのhdwinit関数は、main関数前に処理されるので、デバッガダウンロード時、デフォルト設定なら自動実行されます。また、r_systeminit.cは、コード生成に問題がない時は、全く気にしないファイルです。従って、かなり見つけにくいバグになるでしょう。この場合には、デバッガのデフォルト設定(指定シンボル:_main)を変更し、コード生成出力に、回避策を手動で追加する必要があります。

RL78/G14のタイマRD/RJの注意点:

RL78/G14の特徴に、高速オンチップオシレータ64MHz対応のタイマRD PWMモードがあります。この特徴を使ったタイマRDの、コード生成出力のデューティ比が、正しくない不具合があります。また、ポート割当てとの競合を示す!マークも正しく表示されません。

タイマRJのパルス周期計測モード使用時、コード生成の計測計算に、誤りがあります

これらの不具合には、リリース・ノート記載の回避策に沿って対処します。根本的には、次回2013年4月頃予定のCubeSuite+次期バージョンで改善されるそうです。しかし万一、これらが原因でハマッテしまった場合、切り分けや、抜け出すのが困難であることが判るでしょう。ツール更新時は、リリース・ノート一読をお薦めする理由です。

アプリ時分割起動処理

組込みマイコンのIDEが出力するmain()には、普通while文の無限ループによるアプリ起動処理が一か所記述されます。CubeSuite+のコード生成出力にもこれがあります。このアプリ起動処理を、起動されるアプリ側から検討します。

CubeSuite+が生成するmain()の無限ループ
CubeSuite+が生成するmain()の無限ループ

起動されるアプリには、割込みの確認/応答などのようにリアルタイム処理が必要なものから、スイッチチャタリング処理などの数ミリsec~数10ミリsec程度の処理間隔時間が必要なものまで様々です。このように処理時間が異なるアプリを、一か所の処理から起動すると、問題点がアプリ側に生じます。

スイッチチャタリング(以下SWと略す)処理を例に示します。1回目に起動されたSW処理で、スイッチのOn/Offを検出し、2回目に起動された時に再検出して1回目のOn/Offと同じであれば、スイッチの値を確定するような処理です。使用するスイッチにもよりますが、1回目と2回目の検出には、数ミリsec~数10ミリsecの時間間隔が必要です。この間は、On/Off値がハード的にバタついて安定しないからです。もし、起動処理が一か所の場合には、アプリのSW処理側でこの時間間隔分の検出処理をしない、“飛ばし”が必要になります。この“飛ばし”をn回とします。n回起動されるまで2回目のOn/Offを調べない訳です。

起動処理は一か所ですので、他のアプリも起動します。起動側のアプリにもSW処理と同様、処理を“飛ばす”場合があると、結果として、SW処理の起動間隔は別アプリの“飛ばし”有無により変わってしまいます。SW処理は、他のアプリの“飛ばし”有無は判りませんので、このままではSW処理プログラムが書けません

これを解決する方法の1つは、SW処理アプリが、“他のアプリ処理に係らず、常に例えば10ミリsecの一定間隔で起動“されることです。これならSW処理に“飛ばし”は不要です。このように本来は、アプリの要求時間に応じて、複数の起動処理が必要なのです。ここが、初心者が見落としがちな箇所です。アプリケーションノートには、説明を簡単にするため、1アプリ起動例しか載せないことが多いことが原因です。

複数の起動処理としては、1msec/10msec/100msec/1sec4つの時分割起動で、起動側のアプリ例は、表のようにした場合に経験的に上手く機能しました。この時分割は、マイコン内臓タイマを使い、CubeSuite+のコード生成に追加します。これが、前回紹介した追加コードです。そして、このコードを追加したものがテンプレートです。

アプリ起動間隔 起動されるアプリ例
1msec 割込み確認、割込み応答処理など、リアルタイム性が要求される処理
10msec スイッチチャタリング処理、LCD初期設定など
100msec LED処理、LCD表示など
1sec 人間相手の処理、ウオッチドックタイマのリセットなど

 

テンプレートの時分割起動部分ソースを示します。これなら、たとえ10ミリsecSW処理以外に複数アプリが起動されても、アプリ側で“飛ばし”が不要ですので、他のアプリ処理有無に係らずSW処理のプログラミングができます。

時分割アプリ起動処理を加えたテンプレート
時分割アプリ起動処理を加えたテンプレート

 

CubeSuite+を使ったRL78/G1xの開発シナリオ

CubeSuite+は、設定項目が多く、コード生成ツールも、利用する周辺ハードのAPIを自動生成しますが、プロジェクト作成の度にこれらを設定する必要があり、この段階で設定忘れやミスなどが発生しやすく、本来のアプリ開発をする前の手間や時間がかかります。

効果的な対策は、各種の設定済みのプロジェクトを再利用することです。生成ソースの指定エリアに、コードを追加記述していれば、設定を変更して再コード生成しても、追加分はそのままマージされるからです。これで設定ミスなどは減らせます。

開発シナリオの比較
開発シナリオの比較

追加するコードは、アプリを時分割起動する処理にします。そして、このアプリ起動処理追加済みのプロジェクトをテンプレートにします。アプリ開発は、このテンプレートをコピーし、別名、例えば、アプリ名で保存した後、始めます。アプリを起動する処理は、既にテンプレートに記述済みなので、即アプリ開発に着手できます。

この追加コードの詳細は、近日中に明らかにします。

コード生成の設定順序

CubeSuite+のコード生成では、クロック発生回路の“端子割り当て設定タブ”で、はじめに必ず設定してください。この設定は1度行うと変更できませんと、赤コメントが表示されます。今回は、この理由とコード生成の周辺機能の設定順序について示します。

周辺機能ピンの確定必要性
周辺機能ピンの確定必要性

RL78マイコンは、1つのピンに複数の周辺機能のI/Oピンを割付け可能です。これらI/Oピンには、再配置が可能なものもあります。例えば、64ピンパッケージのRL78/G13の割込みINTP10ピンは、P52P76のどちらかにでも割付け可能です。コード生成ツール(以下Cgと略す)は、GUIで周辺機能を簡単に設定できますが、対象となる周辺機能がどのピンを使うかが決まっていないと、ピンの競合判断ができません。そこで、最初に、周辺機能ピンの確定が必要になります。これを行うのが、“端子割り当て設定タブ”で、はじめに必ず…が表示される理由です。

Cgのクロック発生回路の次には、上から順にポート、割り込み、シリアル…と続きます。これは、使用頻度の高い機能順だろうと思います。しかし設定する時は、ポートを最後にすることをお勧めします。理由は、Cgが競合判断を行うからです。

ポートでは、各ポートの入出力や内臓プルアップの設定などができます。但し、デフォルトでは、全て“使用しない”となっています。この“使用しない”とは、“単純なI/Oポートとしては使用しないという意味”です。例えば、端子割り当てタブでPIOR0ビット=1にして、INTP10P76に確定したとしましょう。ポートの“ポート7”タブでのP76は、他のポートと同じ表示です。しかし、割り込みを先に設定した場合には、P76赤!マークが付きます。このマークにカーソルを合わせると、「P76INTP10で使われています。」というメッセージが表示されます。Cgが競合ありと判断したのです。

コード生成ツールの競合判断
コード生成ツールの競合判断

このように、ポート設定を周辺機能の後に行うと、既に使用済みのI/Oピンには、赤!マークが付きますので、デフォルトのままにできます。このマーク付きのピンを、どうしてもI/Oポートとして使いたい場合には、周辺機能を無効にするか、または最初のピン確定を変える必要があります。ピン確定は1度しかできませんので、新たなプロジェクト作成となります。

コード生成(設計ツール)の設定順序をまとめます。

(1) クロック発生回路>端子割り当て設定タブで、再配置可能な周辺機能の使用ピンを確定。

(2) ポート以外の使用周辺機能を設定。未使用周辺は、デフォルト無効なので、そのままでOK

(3) ポート>ポートnタブで、競合なしピンを設定。競合ピンをI/Oピンとして使う場合は、使用周辺機能を無効にするか、新プロジェクト作成が必要。

他の周辺機能に比べ、ポートは、ピン配置の自由度が高いので、最後に設定するのが良いでしょう。Cgでは、クロック発生回路のすぐ下にありますので、先に設定しがちですが、これを先にすると、周辺機能に赤!マークが付いて設定できなくなります。

CubeSuite+のコード生成にユーザ処理を追加する方法

CubeSuite+のコード生成(以下Cgと略す)の目的は、以前このブログで記載しました。今回は、ユーザ処理の追加方法を示します。

Cgは、使用周辺機能に応じたAPIと、メイン関数を含むテンプレートを生成します。ユーザは、このCg生成ファイルに必要なユーザ処理を追加すれば、プログラムが完成する仕組みです。この仕組みを使って完成したプログラムは、Cg指定のユーザ処理追加部分に記述していれば、RLマイコンの機種やピン数が変わって再コード生成しても、そのままファイルマージされ使えます。APIが、機種やピン数のハード依存部分を隠ぺいするからです。

では、どのようにCubeSuite+へユーザ処理を追加すれば、良いのでしょうか?大別すると、2つあります。1つは、Cg生成ファイルに直接追記する方法、もう1つは、別ファイルで追加する方法です。

APIを活かしてユーザ処理を追加するなら、別ファイルで追加する方法を用いましょう。CubeSuite+のファイルカテゴリ追加機能を使って、コード生成とは別カテゴリを作り、この中にユーザ処理ファイルを追加することをお勧めします。これにより、バグの可能性のあるユーザファイルと、(おそらくバグのない)APIファイルを分離でき、メンテナンス性が向上します。また、ユーザファイルは、機種依存しないハズですから、そのまま別機種マイコンへ移植できる可能性も高まります

ユーザ処理追加方法
ユーザ処理追加方法

 

デバッグツールの差

CubeSuite+には、5種類のRL78デバッグツールが使えます。今回は、これらのうち、E1EZ Emulator、シミュレータの解析機能を比較します。

デバッグツールは、バグ取りが主目的です。これに加えて、ツールタイマを使ってプログラム解析もできます。以下に各ツール接続時の解析内容と、画面右下に表示される各ツールのステータス情報を示します。

解析機能 E1 EZ Emulator Simulator
制御品質解析(変数やパラメタの時間変化) あり あり あり
実行性能解析(関数処理の時間割合) なし なし 選択可能
パフォーマンス解析(特定区間の実行時間計測) なし なし 選択可能
カバレッジ解析(実行網羅率測定) なし なし 選択可能

 

ステータス情報(CubeSuite+画面右下)

デバッグツールの差
デバッグツールの差

 

E1EZ Emulatorは、CubeSuite+以外に専用ハードウエアが必要です。シミュレータは、CubeSuite+のみで実行できます。E1EZ Emulatorの違いは、ありません。シミュレータの解析内容が一番豊富です。シミュレータでは、ステータス情報の足/時計/タイルアイコンクリックで解析機能の“あり/なしの選択も可能”です。RL78のカタログに記載されている実行性能解析は、シミュレータでのみ可能です。

しかし、シミュレータ解析は時間がかかります。専用ハードを使うE1EZ Emulatorは実時間処理なので、実行時間1秒の間に解析結果が得られます。同じ時間をシミュレータで解析すると、制御品質解析に加えて実行性能/パフォーマンス/カバレッジ解析ができますが、トレースメモリを2Mフレーム使用して、1分以上かかります。シミュレータは、トレース範囲の設定とトレース・メモリ・サイズに注意が必要です。E1/EZ Emulatorとシュミレータの使い分けが必要でしょう。

外付け20MHzの必要性検証実験

現在入手可能なRL78/G13の評価ボード:QB-R5F100LE-TBRL78/G13 Stick スターターキット、RSK for RL78/G13には、どれも外付け20MHz発振器が実装されており、メインクロックを供給しています。

RL78/G13性能は、内臓32MHzをメインクロックとして使った時に最高となるので、なぜ外付け20MHzがこれら評価ボードに実装されているかが疑問でした。

考えられるのは、プログラミングに必須となる可能性です。R8C/25でも同じ経験がありました。そこで、最もシンプルなQB-R5F100LE-TBを使って、プログラミング時に20MHz供給の必要性を検証します。

RL78/G13 Target Board
RL78/G13 Target Board

 

QB-R5F100LE-TBは、ショートパッドのパターンカットでクロック供給/停止を変えられます。結果は、外付け20MHzなしでも問題なくプログラミングでき、プログラミング後、内臓クロックで動作しました。

コスト重視の評価ボードで外付け20MHzの実装の理由は、未だはっきりしません。この疑問が解けましたら、本ブログに記載する予定です。

最新ユーザマニュアルの簡単参照方法とエラーメッセージ対処方法

CubeSuite+がアップデートされると、設計編~メッセージ編のPDFユーザマニュアルも更新されます。ツールニュースでの更新通知で、これら最新マニュアルをダウンロードし、参照される方が多いと思います。このマニュアルのもっと簡単な参照方法を示します。

CubeSuite+ヘルプを使う方法です。ヘルプは、大きく分けて2種類のドキュメントを含みます。チュートリアルと、起動編~メッセージ編までのマニュアルです。後者の内容は、最新ユーザマニュアルと同じです。ヘルプファイルなので、追記はできませんが、PDFマニュアルのダウンロードは不要で、簡単に参照できます。

もう一つのTipsとして、CubeSuite+の出力ウインドのエラーメッセージ番号の上にカーソルを載せて、F1:ヘルプを押すと、メッセージ編の記載場所へジャンプします。出力ウインドよりも詳細なエラー内容や、対処方法が記載されています。頻繁に使いますし、しかも便利な機能です。

最新ユーザマニュアル参照方法
最新ユーザマニュアル参照方法