web-dev-qa-db-ja.com

STM32 HALの品質と性能について

古典的なSTM32L4ベースの製品で新しいプロジェクトを開始しようとしています。 ARM developpementでの経験は豊富ですが、STM32は特にそうではありません。STM32HALの品質とパフォーマンス、およびSTmicroが提供する低レベルドライバー(STM32Cubeパッケージ内)はどのようなものでしょうか。開発者の経験とトピックに関するフィードバックを収集したいと思います。基本的には、このコードに満足しているかどうか、または何か問題が発生した場合、または何らかの理由で独自のドライバーを開発した場合は、 etc ...ありがとうございます!

9

小型の8ビットマイクロコントローラーからARMへの移行後、すぐにSTM32でHALライブラリを使用し始め、多かれ少なかれ満足のいく経験をしました。しかし、すでに述べたようなオーバーヘッドと、十分に文書化されていない機能のかなり大きなセットが付属しています。これは混乱を招く可能性があります。

ただし、最初から手書きのコードよりもHALを使用することの大きな利点は、HALが提供する抽象化のレベルでした。これは、あるタイプのSTM32から別のタイプのSTM32に切り替える必要があるときに役立ちました。また、物事を迅速に立ち上げて実行する必要がある場合にも。 -STM32マイクロ(L0、L1、F1、F4、F7)の2つの非常に異なるタイプ/ファミリーで非常に類似したコードを使用しました。ほとんどの場合、実際に機能しました。 HALライブラリを使用すると、特定のマイクロの正確なメモリマップとレジスタレイアウトを知る必要がある場合よりも、移行がはるかに簡単になりました...

そうは言っても、私は現代の組み込みソフトウェアに関してはまだ初心者であり、さまざまなSTM32ベースのプロジェクト(趣味および専門)でのプロトタイピング作業の約2年後も、まだ学んでいることを認める必要があります。たとえば、提供されているLLコードについてさらに学ぶ必要があります。

異なるソフトウェアバックグラウンドで埋め込みフィールドに入る、正しいシーケンスで異なるレジスタのシングルビットをいじるのではなくHALレベルコードを使用して、たとえば基本的なUART/SPI/I2C通信が機能し、私にとってはかなり楽になりました。IMHO、STM32 HALは、純粋な手書きのコードとmbedが行うことの例(C++/vender-不可知論的な抽象化(私の知る限り))-複雑な獣を許容できるレベルにまで飼いならして、私のような平均的なソフトウェア開発者がそれを処理できるようにします。これには、他の人がすでに述べたように、いくつかのトレードオフが伴います...

結局のところ、STM32 HALはボイラープレートコードリポジトリとしても機能し、場合によっては、不可解なリファレンスマニュアルよりも読みやすく、理解しやすい場合があります。 -STM32CubeMXによって生成されたHALコードを使用すると、新しいボードをすばやくテストする必要があったときに、起動時の起動が常にスムーズになりました。それは、物事を実験し、テストするのにも役立ちます。また、パフォーマンスが重要な部分を後で手動で最適化する必要がある場合でも、プロジェクトを設定した後、またはSTM32CubeMXを使用して段階的に調整することで可能になります。手書きのコードとHALコードを混在させることができます。

2016年以降に認識されたいくつかの問題:

  • STによって新しいコードの更新がリリースされたときに、一部の定数、構造体、関数のシグネチャが変更されました。物事は常に発展しているようです。

  • 適切なドキュメンテーション(コードファイル内のコメント)と明確なサンプルコード(具体的すぎる、十分に文書化されていない)の欠如。

  • 複雑で、時には非効率的なコード。

  • スペルミス。

6
rel

私は多くの理由でHALが好きではありません。

  1. これにより、疑似開発者は、ハードウェアがどのように機能するかを知る必要がないという誤った印象を与えます。
  2. HALの学習に費やされる時間は、ハードウェアがどのように機能するかを理解するのに必要な時間よりも長い場合があります(通常は長くなります)。
  3. 恐ろしいオーバーヘッド
  4. 多くのエラー。

しかし、その一方で、書き込みに時間がかかりすぎる可能性があるため、2つの周辺機器USBとイーサネットを制御するためにHAL(実際には大幅に変更されています)を使用しています。しかし、以前に書いたように、それがハードウェア/低レベルでどのように機能するかを知り、好みに応じて変更しました。

8
P__J__

私は個人的に、以下の理由でHALライブラリを好きではありません。

  1. それは私のコントローラーで多くのメモリを消費します、私は実際にブートローダーとアプリケーションに適合するスペースがなく、ここで2つのHALオーバーヘッドも追加する必要があります(1つはブートローダーに、もう1つはアプリケーションに)。
  2. 内部的に割り込みを使用します(私はそれをかなり確信しています)
  3. バグがないわけではありません。バージョン1.0を試してみましたが、ひどく失敗しました。
  4. デバッグは面倒です。アプリケーションやHALのどこにバグがあるのか​​はわかりません。

STで気に入ったのは、標準ペリフェラルライブラリでした。これは、Assembly to Cコンバーターであり、非常に使いやすかったです。

2
Dheeraj Kumar