平成27年3月21日
MPLAB Harmonyを使ってみての感想(続き)
昨日からの続きになります。
MPLAB Harmony Configuratorの使い難い点として下記二点を挙げました。
・プロジェクトを開始するときに使用する全てのデバイス・サービスを登録する分には問題ないが、後から追加するのはそれなりに面倒
・ファイルや関数の管理方針が機能ごとに管理されており、ハードウェアごとに管理する方式の方がモジュール単位での管理がやりやすい
使い難い点としての三番目はMPLAB Harmonyに含まれているライブラリ関数です。デバッグ時にブレークポイントを設定できない関数が大半です。
補足
混乱しやすいのですが、XC32Cコンパイラにはplib.hというインクルードファイルによって宣言されるplibなる周辺機能ライブラリが添付されています。将来的にはコンパイラに添付するのは廃止されるようですが、少なくとも現時点では添付された状態です。このplibはPICシリーズの下位CPUとの互換性を意識したライブラリで、CPUを変更してもプログラムの変更が最小になるよう考慮されたライブラリです。
これとは別にMPLAB Harmonyにはperipherals.hというインクルードファイルで宣言されるperipheralライブラリが使用されています。名前が良く似ていますが全くの別物です。こちらはMPLAB
Harmonyのドライバを記述するために用意されています。従って現時点ではPIC32専用のライブラリということになります。
このperipheralライブラリですが、宣言の多くがインライン関数として登録されています。このインライン関数で定義された関数にはブレークポイントを設定できないようです。設定しても無効な状態で登録されます。動作確認はICD3で行いました。ソフトウェアブレーク・ハードウェアブレーク共に設定できません。
補足
インライン関数というのは、ほぼマクロ機能と同じですが、マクロよりも型チェックが厳しい分安全性が高いと記されています。C99標準で追加された機能のようです。
デバッグ時にブレークポイントを設定できる場所が制限されるのは、うれしい話ではないので減点です。
特に初期化関数では中身の大半がこのようなperipheral関数になるのでデバッグ時にはそれなりの考慮が必要になります。
ブレークポイントの問題はライブラリ関数を使わない以外に方法はないと思われます。
さて、これでやっと本来の話が出来るようになります。
先の三個の使い勝手の悪さを我慢して使用するなら、先に説明したように全てのデバイスやサービスをプロジェクトを作る最初に指定します。そうしたくない場合は、自分用のプロジェクトを新規に起こして、MPLAB
Harmonyの出力する初期化関数や割り込み処理ユーチンを自分用のプロジェクトファイルにコピーして使用します。この方法ではインクルードさせるヘッダファイルの選択が分かり辛いです。逆にフレームワークに関してはソースプログラム・ヘッダーファイル共にそのまま同じようにプロジェクトに追加すれば動作します。次回は実際に自分用のプロジェクトを作って、そこにMPLAB
Harmony Configuratorの出力内容をコピーしてみます。