読者です 読者をやめる 読者になる 読者になる

mcommit's message

大阪でソフトウェア開発の仕事をしている simotinこと宮崎といいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

RXマイコン PDG(Peripheral Driver Generator)の活用法

組み込み C言語 RX

ちょうど1年半ほど前にPDG(Peripheral Driver Generator)を使ったという記事

RX62N UART通信 - mcommit's message

を書きましたが久しぶりに組み込みの仕事でRXマイコンを使うことになり今回もPDGを活用しているのでいろいろと使ってみた結果についてまとめておきたいと思います。

■PDG(Peripheral Driver Generator)とは

そもそもPDG(Peripheral Driver Generator)とは何か。

その名の通り、マイコンの周辺機能(UART,タイマ,I2C,SPI,RTC...etc)のドライバ層のソースコードを生成してくれるツール(windowsソフト)です。

ルネサスによって提供されています。
http://japan.renesas.com/products/tools/coding_tools/coding_assistance/pdg/downloads.jsp#
※PDGが生成してくれるのはRXファミリの他SHやM16、H8等のシリーズにも対応しているようです。

通常、マイコンの周辺機能のドライバでは、各レジスタに対して適切な順番で、適切な設定値を書き込まなければなりません。

実はこれがすごく面倒なんです。

面倒な理由の1つは、

ちょっと間違えただけで全然動かない

ちょっと間違えた(例えばレジスタ設定値が1bit値が違う)だけなんだからある程度動いてくれればよいのですがそうはいきません。

結果としてCPUはうんともすんとも言わず何が悪いのか手さぐりで調べる必要が出てきます。
この調査もICE/JTAG/エミュレータ等と言われるツール(ハードウェア)を使って調べるので結構時間がかかったりします。

ドライバの生成ツールがあるということはドライバのコードを書く時間を短縮できるのはもちろんなのですが、こういったうまくいかないときの調査にかかる時間を短縮できるということでもあります。

■PDGを使うメリット

なんといってもその名の通りドライバジェネレータなので周辺機能のちょっとした動作確認が

ちょーーーーーーーーーーーーーーーーーーーーーーー簡単にできちゃいます。

GUI上でターゲットの仕様や、やりたい事を入力するだけでペリフェラルのドライバとなるソースコードが生成されます。
コード生成後、ワンタッチでHEWやCubeSuite+のような開発環境に取り込めます。

従来、ペリフェラルの機能を触る場合、

1.ハードウェアマニュアルを読む
2.マニュアルを読んでもよく分からない点もあるがとりあえずおっかなびっくりでコードを書く
3.動かない(>_<)
4.レジスタ設定値とマニュアルを何度もにらめっこする。
5.ネットでググる
6.ハードウェアを疑ってオシロスコープで信号を見たりする
7.設定値をいろいろ変えてみる
8.動いた!(^_^)

というような流れになります。

文章で書くとわずか8ステップですが、時間にすると1日~1週間くらいかかることもあります。
※特に、あまりなじみのないCPUやペリフェラルの機能であれば実装と動作確認にすごく時間がかかります。

で、PDGを使った場合ですが、同じことがわずか数十分~数時間でできてしまいます。

特に、PDGを使うと上記の2~5のフェーズを一気に短縮できます。

また、レジスタの設定値がGUIに表示されたり、実際にデバッグする際にエミュレータ経由で確認できる点は本当に便利です。
マニュアルを読んでも、いまいちどのような値を設定すればよいのかわからないということはよくあります。

それはそれで問題なのですが、

取り急ぎ正解が知りたい!

という時間に追われている状況におかれることもよくある話です。

さて、上記のようなメリットを考慮すると、

・RXを候補としてCPUの選定をする場合
・実現性の調査やプロトタイプでの開発
・別の装置の対向機器として利用する場合(UARTやI2C,SPI等をつなぐ場合等)

のような場合にすごく開発効率を上げれると思います。
むしろ使わないと損しているくらいかもしれません。

また、PDGの隠れたメリットとして、メーカーが提供するいわばお手本となる設定なので、ソフトに自信を持って動作確認できます。
※まぁ要するに何かあった場合に早い段階でハードのせいにできるということです。

■PDGのデメリット

いいことずくめのPDGですが、デメリットはあるだろうかと考えてみました。
パッと思いつきませんでしたが下にも書いたようにPDGのドライバがライブラリで提供されているためになんというか小回りが利かないような印象は受けます。

ライブラリのソースコードも汎用性と最適化を意識しているためか自作したライブラリよりはっきり言って可読性はよくないです。
※性能面とかフットプリントとかまではまだ調べていませんが。

■PDGのライブラリのデバッグ方法

PDGはユーザが利用するソースコードを生成してくれますが、生成されたソースコードはドライバを呼び出すいわばラッパー関数です。
では実際のドライバはどこにあるのかというと、

PDGをインストールした先の


C:\Renesas\PDG2\lib

以下のフォルダにライブラリとして存在し、リンクすることでユーザプロジェクトから利用できるようになります。

で、実際にターゲットを使ってあれやこれやと動かしているとうまく動かなくて

ライブラリが何をやっているか知りたい

という瞬間がやってきます。

要するにステップ実行でデバッグしたいのですが、PDGはライブラリなのでデバッグできない!!

と私は思い込んでいました。

いろいろ調べた結果分かったのですが、(というか自分の無知ですが)

PDGのライブラリはデバッグできます!

PDGのライブラリのソースコードは、


C:\Renesas\PDG2\source\RX

以下に提供されています。

ライブラリをデバッグしたい場合は、


RX63N_library_100_little_debug.lib

のように _debugが追加ライブラリをリンクし、デバッグ時に
上記ソースフォルダ内のソースコードを指定することでデバッグができました。
※ただし対象のソースファイルは事前にgrepするなどして見つけておく必要があります。

この辺の情報はマニュアル等では説明されていません。

と思ったらルネサスのFAQには記事が上がっていました。


※更新履歴が2014年2月10日なのでちょうど去年の今頃アップされたようです。
私が前のRX62Nの記事を書いたタイミングではアップされていなかったのかもしれません。

ちなみにライブラリ内のデバッグをしてみた感想ですが、最適化が利いているせいかプログラムカウンタ(PC)があっちにいったりこっちにいったりします。

このような場合ローカル変数にvolatileをつけるとPCが落ち着くので、私はよくデバッグ時はバシバシvolatileを使ってます。

ルネサスもこの辺の情報を出してくれると親切なのですが、PDGのマニュアル等で触れていません。
※調べてみたら英語版のマニュアルには記載がありましたが日本語版のマニュアルではデバッグに関する記載がありませんでした。

あんまりソースにケチつけられたくないとかそういう理由なのかな。
PDGはすごく便利なのでケチなんかつけないんだけどなぁ。

他機種(SH,H8)のPDGもできれば充実させて欲しいですね!

■最後に

ルネサスの経営についてはネガティブな記事を目にすることが多いですが国産半導体メーカーとして頑張って欲しいです。
RXはPDGがあることで手軽に使えるしGR-SAKURAのような安価で高機能なボードもあるし!
世間的にはARM系CPUが圧倒的に普及していますが国産マイコンですしRXはもっと触ったり勉強して行きたいです。


ちなみにRXの開発環境は比較的安価に揃えることができます。
私の場合、RXの開発学習用にはGR-SAKURAとE1エミュレータを購入しました。
※私は関西に住んでいるのでどちらも日本橋共立電子にて購入しました。GR-SAKURAの方は販売店は限られているようですが、E1エミュレータ秋月電子amazonでも販売されているようですね。

RXの特徴については雑誌Intarfaceの記事を読んだり、「RXマイコンのすべて」という書籍の情報を参考にしています。
「RXマイコンのすべて」の基礎編にはRXのアーキテクチャの特徴やプログラミングの方法など詳しく書かれているので大変勉強になりました。
※スタートアップ処理についても説明がされているので新規にRXを触って動かす場合にありがたいですね。

RXマイコンのすべて 応用編―RX62Nの「通信機能」を中心に、実際の使用例とプログラムが学べる

RXマイコンのすべて 応用編―RX62Nの「通信機能」を中心に、実際の使用例とプログラムが学べる

動かしながら学ぶRXマイコン活用法 (Tech Iシリーズ)

動かしながら学ぶRXマイコン活用法 (Tech Iシリーズ)

「応用編」の方は後から買いましたが、I2C,SPI,USBなど各種IFのプログラミング方法について詳しく説明されています。
私の場合は仕事でRXのI2C(RIIC)のデバイスドライバを書く必要があって参考に購入しました。
I2CはUART等と比べるとデバッグが面倒なIFになるのでこういった書籍で事前に正しい知識を身に付けておくと開発中に精神的に楽ですね!


今回の記事で取り上げているPDGはHEWやCubeSuite+等の開発環境から利用できます。
コンパイラは試用版60日間機能無制限で利用でき、60日を過ぎるとリンクサイズが128KBに制限されてしまいます。
学習目的には128KBの制限でもまずは問題ないと言えるでしょう。
japan.renesas.com

E1エミュレータは10000円を超えるので正直購入しようか躊躇いましたが、ステップ実行できたり、ROM更新がE1経由で気軽にできるのは有りがたく重宝しています。
RXを仕事で本格的に使うために学習される方にはおすすめです。