教育におけるマイクロコントローラのハードウェア抽象化 レイヤ(HAL)

APDahlen Applications Engineer

なぜマイクロコントローラのプログラミングはとても難しいのでしょうか?

C言語でのプログラミングは簡単だと言えるかもしれませんが、複雑なのは特別機能レジスタ(Special Function Registers、SFR)です。マイクロコントローラのプログラミングが難しいのは、関連するハードウェアがますます複雑になっているからです。そのため、プログラマーはまずハードウェアの機能を理解して、その後に、ハードウェアを制御しなければなりません。
マイクロコントローラのハードウェアは多くのSFRによって制御され、その多くはハードウェアに微妙な、直感では分かにくい影響を与えることを思い出してください。例えば、アナログデジタルコンバータ(ADC)を使用するには、プログラマは基準電圧、変換クロック、チャンネルセレクト、ジャスティフィケーション(左または右)のSFRを設定するか、または、クリアする必要があります。上級プログラマーは、ADC変換が完了したときに割り込みをトリガするSFRを設定することもできます。高性能マイクロコントローラの場合、プログラマ-はダイレクトメモリアクセス(DMA)メカニズムを設定して、メインCPUから独立してADC結果を処理することができます。

このSFRの複雑さはデータシートの分量で測ることができます。例えば、新しい8ビットのMicrochip PIC16F13145T-I/SO を考えてみましょう。データシートは594ページ長であり、そのうち51ページがADCに割り当てられています。Renesasの R7FA6M5BH2CBG#AC0 は2296ページのハードウェアユーザーマニュアルで、そのうち88ページがADCに割り当てられています。確かに、これら2つの例はマイクロコントローラ群の両端にあります。しかし、要点は明確です。マイクロコントローラのハードウェアは複雑です。データシートの内容は緻密であり、SFRを見落とし、それによってモジュールが使用不能になったり、性能が低下したりすることは非常に簡単なのです。ハードウェア抽象化レイヤは、この複雑さを軽減するように設計されています。

なぜArduinoはこれほど成功したのでしょうか?

Arduinoは、おそらく最もよく知られたマイクロコントローラのハードウェア抽象化レイヤ(HAL)です。Arduino言語リファレンスを見直すと、Arduino HALがデジタルI/O、アナログI/O、高度なI/O、時間、割り込み、通信といったカテゴリに分類されていることがわかります。これらのよく知られた機能は、プログラムが基盤となるSFRから分離されているため、開発プロセスを単純化します。また、Arduino HALエージェントはArduinoファミリの全メンバに対応しています。その結果、最小のATtinyからPORTENTA Pro H7のような最大のシステムオンモジュール(SOM)まで、同じ関数を使ってプログラムすることができます。このようなHALの相互互換性や魅力は、産業グレードのプログラマブルロジックコントローラ(PLC)など、Arduinoの傘下にないデバイスにも見られます。Arduino、Raspberry Pi、産業用コントローラの間の境界線は曖昧になっており、プログラムの簡素化と開発時間の短縮に焦点が当てられています。

技術的なヒント: ATtinyとRA6M5は、Arduino HAL実装における共通性を示しています。また同時に限界も示しています。ATtinyは「標準Arduino」よりも一段階劣るものです。例えば、ATtinyはシリアルインターフェースやSPIインターフェースを駆動するために必要なハードウェアを持っていないかもしれません。これらの機能を実装するにはソフトウェア技術が必要になるかもしれません。一方、RA6M5のような高性能機は、「標準的な」Arduinoよりもはるかに多くのハードウェアと機能を備えています。例えば、最近の記事では、PORTENTA Pro C33のPWM機能の一部を解放する方法が紹介されています。

重要なメッセージは、プログラマーは用心深く、あるマイクロコントローラのハードウェアと機能を十分に理解していなければならないが、必ずしもSFRレベルまで理解している必要はないということです。このことはまた、すべてのエンジニア、技術者、技能者が、少なくとも1つのマイクロコントローラをSFRレベルで深く探求すべきであるという教育の道筋も示唆しています。1つのマイクロコントローラを深く理解することは、すべてのマイクロコントローラの理解を深めることにつながります。この記事では、8051、MSP430、Z8、AVR、PICなどの古典的なデバイスを使用して、様々なマイクロコントローラの中でも下位の方のデバイスを使用することを提唱します。

マイクロコントローラのソフトウェア開発にはどのようなトレンドが見られるのでしょうか?

間違いなくHAL(ハードウェア抽象化レイヤ)の普及が見られます。これは、MPLABSimplicity Studioに搭載されているようなグラフィカルハードウェアコンフィギュレータの形をとるかも知れません。ArduinoやArduinoに似たツールは引き続き使用されるでしょう。ST MicroelectronicsのSTM32デバイス向けには、この包括的な提供物に掲載されているようなHALと低レベルドライバが豊富にあります。このSTMのドキュメントを見ると、HALを構築する方法はたくさんあり、STM32はSFRに近いところにあることが分かります。個人的には、特定のマイクロコントローラをより高性能なデバイスに交換した場合でもコードは依然として有効であることを理解した上で、このドキュメントを特定の STM32 プロセッサのデータシートと並べて検討することが有益であると考えています。

技術的なヒント: 教育においては、学習者と専門家の違いを理解する必要があります。学習者にも専門家と同じツールの使い方を教えたいという強い誘惑があります。現在も将来も、ツールが信頼でき開発時間も短縮できることから、HALが主流となるでしょう。同時に、そもそも専門家(エキスパート)はどのようにして専門家(エキスパート)になったのかを問う必要があります。あらゆるマイクロコントローラの専門家は、少なくとも1つのマイクロコントローラを深く理解している可能性が非常に高いのです。彼らは、ある1つの誤動作したSFRのトラブルシューティングに長い夜を費やし、午前3時にようやく問題を発見したときの興奮とドキドキについて語るでしょう。

まとめ

私が教育にはバランスの取れたアプローチが必要だと思っているからか、HALを排他的に扱うアプローチに対して、賛否両論の強い感情を持つ教授に時折出会います。どちらの場合も極端に振れていて、学習者と専門家の間に必要な直線的でない(曲がりくねった)学習プロセスを見逃しています。

ご健闘をお祈りします。

APDahlen

関連するArduino教育コンテンツについては、こちらのリンクをご参照ください。

著者について

Aaron Dahlen 氏、LCDR USCG(退役)は、DigiKeyでアプリケーションエンジニアを務めています。彼は、技術者およびエンジニアとしての27年間の軍役を通じて構築されたユニークなエレクトロニクスおよびオートメーションのベースを持っており、これは12年間教壇に立ったことよってさらに強化されました(経験と知識の融合)。ミネソタ州立大学Mankato校でMSEEの学位を取得したDahlen氏は、ABET認定EEプログラムで教鞭をとり、EETプログラムのプログラムコーディネーターを務め、軍の電子技術者にコンポーネントレベルの修理を教えてきました。彼はミネソタ州北部の自宅に戻り、このような記事のリサーチや執筆を楽しんでいます。 LinkedIn | Aaron Dahlen - Application Engineer - DigiKey




オリジナル・ソース(English)