RL78/G1x用テンプレート販売

RL78/G13とG14ソフト開発に使えるテンプレートを、1000円で販売いたします。

このテンプレートは、CubeSuite+のプロジェクトファイルで、LED点灯やタクトSW入力、LCD表示機能などの組込み処理に最低限必要な機能は、あらかじめプログラム済みで市販ボードで動作確認済みです。

テンプレートの開発動機は、以下です。

アプリ開発の早期着手:CubeSuite+の新たにプロジェクト作成時は、毎回多くのパラメタ設定が必要で、ミスの可能性もあります。これら開発の前段階を少なくし、早くアプリ開発に着手したい。

既存関数の部品的流用:参考になるアプリケーションノートのサンプルプロジェクトを、理解した後は、なるべくそのまま部品的に使いたい。また、これまで開発してきた関数を、部品として使いたい。

これらを満たす方法の1つとして、各種パラメタ設定済みのプロジェクトに、最低限必要な機能を盛り込み、市販ボードで動作するテンプレートプロジェクトを作成しました。このテンプレートは、なるべくトリッキーな方法を使わずに、素直にプログラムしておくことと、サンプルや既存関数をそのまま使えるように関数間のインタフェースを簡単にしておくことが重要です。時間がたってテンプレートを観た時、思い出し易いからです。また、アプリ開発では、開発が進むにつれ、要求の追加/変更が生じますので、開発当初は、市販ボード上にサッと組んで、ボトルネックになりそうな箇所の見通しをつける事も大切です。スケジュールが押し迫ってから、マイコン性能が足りない等の問題が見つかると最悪ですから。市販ボードなら、ハードウエアの完成を待たずに、確実に動くハードで開発ソフトを検証できます。

このテンプレートは、初級~中級のソフト開発者には最適です。上級者は、これに似たテンプレートを既に持っているからです。本来は、上級者がテクニックを含む自分のテンプレートを初心~中級者へ教え、教えられた側でさらに、テンプレートに修正を加えれば、技術継承も容易です。しかし、テンプレートは、習得済みの者にとっては、オーバーヘッドで、未収得の者にとっては、理解不能な面が多いので、技術継承はスムーズにいきません。

テンプレート説明ページ1
テンプレート説明ページ1

販売するテンプレートの、もくじ付き解説文書のうち、最初の1ページ(jpg文書)を示します。もくじの内容から、テンプレート詳細が、だれにでも解ると思います。購入ご希望の方は、メール(宛先:info@happytech.jp)にてお知らせください。銀行振込口座を返信いたしますので、この口座へ代金の1000円を振込でください。振込確認後、全ての解説文書(全てPDF文書)とテンプレートプロジェクトをメールにてお送りします。後は、ご自由にテンプレート変更や修正を加えて頂いて、少しでも本来のアプリ開発に役立てて頂ければ、幸いです。

※2013年11月28日、テンプレートをVersion2へ更新いたしました。Version2はコチラをご覧ください。

RL78マイコンコーステキスト更新

ルネサス半導体セミナー無償テキストのRL78マイコンコースが、2013年2月28日 Rev.1.22版から2013年4月18日 Rev.1.23へ更新されました。どこが変更されたかは、変更履歴が無いので不明です。

このテキストは、RL78/G13とG14の割込み制御や割込みレジスタバンクの効能、SADDRとCALLTの効能、G14イベントリンクコントローラなどが記述された解りやすい解説書ですので、旧版をダウンロードした方は、最新版に更新することをお勧めします。

マイコン・トレーニング・キット¥9,980

スマートフォンとの連携利用ができるRL78/G14のマイコン・トレーニング・キット:MTK-RL78G14が6月末まで¥9980の限定価格で販売されます(マルツパーツ館の情報。ルネサスエレクトロニクスサイトに2013年5月22日現在、掲載無し)。

実装されているマイコンは、RL78/G14(R5F104PJAFB:100ピン、256K-ROM、LQFP-0.5mm)で、無償版CubeSuite+は、64K-ROMコンパイル制限のために使えません。但し、カフェルネ情報では、裏ワザで回避策があるそうです。

スマートフォンとの連携動作のために、802.11b(11nではない)モジュールや3軸加速度センサーが付くなど、マイコン以外の周辺回路も豊富で、これで¥9980なら安い気がします。CPUコアがS3のRL78/G14でなく、S2のG13なら即購入なのですが、興味のある方は、6月末までに購入すると良さそうです。

RL78 CPUコアをS1/S2/S3で分類

2013/04/11発行のRL78 ファミリ ユーザーズマニュアル  ソフトウェア編で、RL78 ファミリのCPUコアがS1/S2/S3の3種類に分類されました。本ブログ関連のRL78/G13とG14は、S2コアとS3コアに分類されます。

表 各CPUコア機能差と製品例

項目 RL78-S1コア RL78-S2コア RL78-S3コア
CPU 8ビット 16ビット
命令の種類 74種類 75種類 81種類
汎用レジスタ 8ビット・レジスタ×8(バンクなし) 8ビット・レジスタ×8×4バンク
乗除算積和演算命令 なし あり
製品例 RL78/G10 RL78/G13RL78/G12、RL78/G1A、RL78/G1C、RL78/I1A等 RL78/G14

 

前の版、2011年1月31日Rev.1.00のユーザーズマニュアル  ソフトウェア編では、このCPUコア分類はありませんでした。製品が多くなったので、分類が追加され、これですっきりした感じがします。旧NEC系がS1、旧ルネサス系がS3、両者融合の現社ルネサスエレクトロニクスがS2といったところでしょうか?

RL78-S2コアでソフト設計しておけば、適用製品が多いソフト開発ができそうです。

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

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. アセンブリ言語レベルの最適化

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

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を自動生成しますが、プロジェクト作成の度にこれらを設定する必要があり、この段階で設定忘れやミスなどが発生しやすく、本来のアプリ開発をする前の手間や時間がかかります。

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

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

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

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