■開発環境
一言「マイコンのプログラムを作る」と言っても、そのプロセスを細かく見ていくとこんなツールが必要になります。1) プログラムを設計する ... フローチャートやプログラム構成を記述するドローイングツール
2) プログラムを書く ... エディタソフト
3) マイコン用バイナリに変換(ビルド)する ... コンパイラ・リンカ
4) マイコンのメモリに転送する ... 書き込みツール
5) ステップ実行などデバッグを行う ... デバッグツール
6) プログラムのバグを探す ... 静的・動的プログラム解析ツール
昔は上記全てを別々に入手していましたが、最近は主に2~5で使うツールが1つのソフトウエアにまとまっている統合開発環境(Integrated Development Environment:IDE)が主流です。
ルネサスエレクトロニクス CS+
https://www.renesas.com/jp/ja/software-tool/cs
STマイクロエレクトロニクス STM32CubeIDE
https://www.st.com/ja/development-tools/stm32cubeide.html
NXPセミコンダクターズ MCUXpresso
https://www.nxp.jp/design/software/development-software/mcuxpresso-software-and-tools-:MCUXPRESSO
Windowsパソコン向けソフトウエア開発の場合はVisualStudioで決まりですが、ファームウエアでは上記のようにマイコンメーカごとに別々のソフトウエアが必要だと思ってください。そのため、私のパソコンには3つ以上の開発環境が入っていた時期もありました。しかも案件によっては開発環境のバージョンが固定されるものもあり、別バージョンの同一ソフトを複数入れるケースも。それらが上手く共存できず、VMや別パソコンの調達が必要になるという苦労も組み込みソフトウエア開発ならでは、です。
■デバッグ環境
プログラムを書いて一発で完璧に動く、なんてことはまずあり得ません。もちろん動かす前にプログラムを見直してある程度は正しく動く確率を上げることはできますが、絶対100%にはなりません。動かしてみて初めてわかることも多いです。何かの本で読んだのですが、こんな言葉があります。プログラムはあなたの思った通りには動かないかもしれないが、あなたの書いた通りには動く
そんなあなたの意図とプログラムのギャップ、いわゆる「バグ」を追い込むデバッグには大きく2つの方法があります。
・デバッガを用いたリアルタイムトレース
プログラムを実行させて、プログラム中の任意の箇所で一時停止させてそのときの変数の値を確認したり、ステップ実行させてプログラムの挙動を追います。ハードウエアにJTAGと呼ばれるCPU通信専用のI/Fを用意しておき、JTAGデバッガという機器経由でPCと接続、PC上の専用アプリケーションで制御する方法が一般的です。ファームウエアが起動し、安定動作するまでは必須なツールです。前述のIDEに含まれている場合もありますし、より強力な機能を備えたデバッガとして第三社が販売しているものもあります。
Computex PalmiCE4
https://www.computex.co.jp/products/palmice4/index.htm
また、プログラムにロギングポイントを(自動で)仕込み、ファームウエアを動作させた後に蓄積されたログを解析するタイプのものもあります。
HEARTLAND.DATA DT+
https://hldc.co.jp/product_service/development/dtplus/
・printf()、シェル
ハードウエアに追加でUARTのI/Fをつける必要がありますが、ある程度ファームウエアが安定動作してからはかなり強力なデバッグ手法となります。必要に応じてプログラムの中にprintf()を追加してその表示でプログラムの挙動を追うのが基本です。シェルの仕組みも入れておけば、任意のシェルコマンドを実装することで、ファームウエアを実行させている最中にファームウエア内部の情報を表示させたり、ファームウエアの挙動を変えることができます。
★Centeでは...
Centeではシェルの仕組みとしてCente shellをご用意しており、UARTドライバの開発とファームウエアへの組込も承っております。ユーザアプリケーションのデバッグでも非常に有効なツールで、市場で発生したトラブル調査にも有効です。組込機器設計の最初の段階から、(市場投入基板ではなくするとしても)UART I/Fを搭載し、デバッグ用途のUARTドライバ、シェルをファームウエアに入れることをお勧めしています。■おわりに
第一シーズンとして、コンピュータ内蔵の電子機器、いわゆる組込機器において専用のソフトウエア=ファームウエアがどんな構成になっているか、開発するには何を考えなければならないか、のアウトラインを解説しました。「このあたりもう少し聞きたい」のようなご要望がありましたら、お気軽にコメントいただければと思います。次シーズンはTCP/IPネットワークにフォーカスして、組込機器にネットワーク機能を持たせる手順について解説します。
■今日の閑話
また昔話で恐縮ですが、まだIDEなんてものがなかった時代、プログラムをどのエディタで書くかがエンジニアの一つのテーマでした。私が入社した頃はvi派とEmacs派に分かれて宗教戦争さながらの論争を繰り広げていたことを思い出します。(興味のある人は「エディタ戦争」で検索!) このころのエンジニアはプログラミング中にマウスに手を伸ばすなんてことはしません。キーボードのホームポジションに両手を置いた状態でプログラムを書き、キーワードを検索・置換し、プログラムブロックを移動させ、関数間をジャンプし、ファイルを切り替え...をやってのけます。そんな先輩エンジニアの画面を横で見せてもらったとき、カーソルが画面中を自由自在に飛び回わりながらみるみるプログラムができていく様にえらく感動した記憶があります。Cente:
https://www.cente.jp/
お問合せはこちら:
https://www.cente.jp/otoiawase/