クロス開発で詰まるポイント集
プログラム開発で、実行環境とは別の環境で開発を実施することをクロス開発といいます。たとえば、Windowsのパソコンでソースコードを作成し、実行時は専用のツールを使って組み込み機器に転送するようなケースがクロス開発です。ハードとソフトを別々に設計、開発する組み込み開発で使われる開発技法となります。
クロス開発では開発環境と実行環境に差があることに起因するエラーが散見されます。差異があることを踏まえて開発、試験していけば防げるトラブルのため、ここで紹介するポイントを念頭に置いておくと開発がスムーズです。
クロス開発の必要性
セルフ開発であれば実行環境と開発環境が同じであるため、環境の差を考慮する必要がありません。ただし、組み込みシステムの場合、実行環境では開発に必要なリソースが不足しています。開発できるだけのCPUやメモリが足りないのはもちろん、ディスプレイやキーボードなどの外部機器を接続することもできません。効率良く開発するためにはパソコンを使って作成したプログラムをコンパイルした上で、組み込みシステムに載せることが望まれます。
パソコンには必要なアプリケーションが比較的自由にインストールできます。開発環境となるホストはPCであることが多く、WindowsやLinuxなどのOSが載っていることが多いため、ホストとゲスト(実行環境)が異なる点を意識すると、クロス開発での失敗が減ります。
クロス開発で詰まるポイント
クロス開発で詰まるポイントは知っていれば回避できることも多くあります。
ABIのずれ
プログラムではアプリケーションバイナリーインターフェース(ABI)が関数の呼び出し規約やデータ構造の配置などを規定しています。このABIのバージョンの差異によって互換性や変換ロジックに差があると、問題を起こす原因になります。新規開発の際など、開発するバージョンが選べるケースではバージョンをそろえておくのが無難です。またコード上の依存関係にも配慮が必要になります。複数人での開発を前提として共有ライブラリを開発する場合はOSのバージョンごとにライブラリを用意するほうが安全です。
ライブラリの差
ライブラリを使用している処理は実装するゲストに対応しているかを意識しなければなりません。開発に使用するホスト側で使っていたライブラリが、ゲスト側では使えない可能性があります。必要なライブラリをビルド時に呼べるように設定したり、サフィックスを設定したりするなど、回避方法まで含めて検討されていると安心です。反対に特定の環境でしか使えないライブラリもあるため、動作環境には注意が必要です。
最適化に伴う想定外の挙動
パフォーマンス向上や消費電力削減のために実施した最適化の処理が、必要な処理を削除してしまうなど、ビルド後に想定外の処理をするケースがあります。デフォルト設定の場合、一般的に最適だと思われる形で最適化されますが、オプションやフラグで制御することが可能です。
複雑な計算の回避や、メモリアクセスを最小化することが組み込みソフトの消費電力抑制につながります。オプションを選択する際の視点としてもっておきましょう。
サイズ制約違反
マイコンのハードウェア自体も、パソコンや仮想環境ほどメモリが潤沢に使えるわけではありません。動的にメモリを確保してしまうコードを避け、適切に制御することでエラーを未然に防げます。
開発段階で無償のコンパイラを使っている場合、コンパイラにも容量制限があります。不要なコードを書いてしまうとコンパイルの制限に抵触する原因にもなるため、コンパイル時、メモリ搭載時のどちらの際にも容量には気を付けましょう。
リンクエラー
プログラム内に記載されたリンクがなんらかの原因でエラーとなり、接続できない際に発生します。ライブラリがインストールされていないことに起因するエラーは、メッセージで判別が可能です。開発環境と実行環境でOSのバージョンが違っていると、同じプログラムでも変数やライブラリの扱いが変わることがあります。開発環境で動作するが、実行環境で動作しない場合はそれぞれのバージョンでの互換性を確認すると解決のヒントがあるでしょう。


