平成27年3月20日
しばらくジタバタと忙しくHPにまで手が回らなくなっていました。前回はイーサネットについて動作準備まで行っていたのですが、時間が空きすぎたので途中経緯をスッカリ忘れてしまいました。この続きは時間があるときに再開を考えます。
この間にPIC32でMODBusを実装する話があり、時間的な制約が厳しい内容であったため部分的な実装を行っていました。
結局、この案件はお流れになってしまい作業自体は無駄に終わったのですが、MPLAB Harmonyを実務に適用することを前提に運用することができ、このツールの使い勝手に関して幾つかの感想を得ることは出来ました。
MPLAB Harmonyを使ってみての感想
プログラムの開発手順は人によってマチマチです。どれが正しいというものでもないのですが、私はプログラムを部分的に作りながら、順番に追加していくスタイルを取っています。このようなスタイルではMPLAB Harmonyは非常に使いにくい代物です。具体的に使い難い点は下記です。
MPLAB Harmony Configuratorはプロジェクトの最初に使用する全てのデバイスやサービスを指定する使い方に向いています。
私のように機能を部分的に作っては追加していく書き方では、Harmonyが生成するファイルの管理が煩雑になります。
これをMODBusのプログラム開発手順を例に説明します。MODBus仕様では、ハードウェアとしてタイマとUARTが必要です。
少し寄り道して
MODBusに関しては、
こちらに日本語の参考になりそうな資料があります。
最初はタイマのみを使用する仕様でMPLAB Harmony Configuratorを起動して、プロジェクトファイルを作成します。
この段階では、タイマと同時に導入されるDevice Control System Serviceの
不要な関数をコメントアウトし、コメントアウトした関数から呼び出す関数記述
sys_clk.cおよびsys_clk_pic32mx.cを該当コンフィグレーションから除外する設定を行います。この処理の詳細は
こちらに書いてあります。
その後、プログラムを記述してタイマ機能の動作検証が終わります。次にはMODBusを実装するためにUARTが必要です。ここで再びMPLAB Harmony
Configuratorを起動してUARTを追加します。ここでMPLAB Harmony Configuratorは、自身が書き出したソースリストと既存のソースリストを比較し差異があれば個々のファイルごとにプログラムのマージ操作を要求します。
少なくとも数個のファイルについては、MPLAB Harmony Configuratorを使ってデバイスやサービスを追加するたびにマージ操作を行う必要があります。
更に、上記で太字で示した二つの操作のうちの
該当コンフィグレーションからの除外設定もクリアされてしまいます。そのたびに再び除外設定を行うことになります。
正直なところ、機能追加のたびにこんな面倒な操作はやりたくありません。もしMPLAB Harmony Configuratorを使ってプロジェクトを管理するなら最初に全てのデバイスやサービスを登録して以後は再びMPLAB
Harmony Configuratorを再起動しない使い方がベストです。
二つめの使い難い点は、ソースプログラムの管理方針です。MPLAB Harmony Configuratorはフレームワークを除くプログラムでは初期化・アプリケーション・割り込み処理関数といった個々の関数機能に着目してファイルを分割管理しています。
私は将来的にライブラリやオブジェクトモジュールとして管理しやすいハードウェア単位での管理の方が良いと感じます。
つまり、
MPLAB Harmony Configuratorでは、
ファイル system_init.c
timer1_init();
uart1_init();
ファイル interrupt.c
timer1_interrupt();
uart1_interrupt();
のようにファイルや関数が配置されるのに対して、
ファイル timer1.c
timer1_init();
timer1_interrupt();
ファイル uart1.c
uart1_init();
uart1_interrupt();
のようにファイルおよび関数が置かれる方が管理しやすく感じます。
最初の手間は多少増えるものの、MPLAB Harmony Configuratorを使って基本的な初期化関数や必要になるインクルードファイルを自分用のシースファイルにコピーすることで、このような運用は可能です。この方法については次回に書いていきます。