web-dev-qa-db-ja.com

C ++でHALを使用したSTM32の最初のプロジェクト

C++でHALを使用してSTM32用のプロジェクトを作成したいと思います。残念ながら、CubeMXはCのプロジェクトのみをサポートしています。ただし、HALはC++をサポートしています。

CubeMXでプロジェクトを作成し、上記のIDEのいずれかにインポートしようとしましたが、Cプロジェクトとしてインポートされているため、成功しませんでした。したがって、それは良い解決策のようには見えません。

また、上記のIDE=でC++プロジェクトを作成し、それにCubeMXからファイルを追加してみました。より論理的であるようですが、構成が原因で正しい方法で実行できませんまだ間違っています。

HALを使用するために、EclipseまたはAtollic TrueSTUDIOで新しいC++プロジェクトを構成する方法を誰かに説明してもらえますか?

8
unitatem

CubeMXの最近のバージョンは、EclipseベースのIDE STM32ターゲット用に開発するように事前設定されている)System Workbench 4 STM32をサポートしています。プロジェクトをC++に変換するオプションがあります(右クリックプロジェクトエクスプローラーでプロジェクトを選択し、[C++に変換]を選択します。

この方法を使用した直接的な経験はありません。私たちはSTM HALを使用し、その上にC++アプリケーションを構築しているため、これは確実に可能ですが、IDEはKeilなので、YMMVです。

7
Jeroen

STM32CubeMXで生成されたAtollic Eclipse CプロジェクトをC++に変換する方法(3ステップ):

  • Main.cをmain.cppにコピーし、ビルドからmain.cを「除外」します。結果:まだ機能していません。 main.cppはEclipseプロジェクトファイルリストに表示される場合がありますが、コンパイルは開始されず(明らかな構文エラーは検出されません)、main()がないためにリンカーエラーが発生します。
  • 次に、org.Eclipse.cdt.core。ccnatureをテキストエディターで.projectファイルに次のように追加します... <natures> <nature>org.Eclipse.cdt.core.cnature</nature> <nature>org.Eclipse.cdt.core.ccnature</nature>http://www.openstm32.org/forumthread1244 を参照してください。これは、プロジェクトを開いたままEclipseを実行しているときに実行できます。結果:main.cppはコンパイルされますが、インクルードパスが間違っているため、インクルードファイルが見つかりません。 cppnatureはより良い名前になりました。編集:メニューのファイル/新規作成/その他/ C/C++メイクプロジェクトに変換を使用してC++ネイチャーを追加する方法のヒントについては、「C++ネイチャー」のEclipseヘルプを検索してください。
  • 次に、プロジェクト設定を変更して、関連するC設定をC++設定に複製します-ここに示すように。 enter image description here この変更を有効にするには、プロジェクトを閉じて再度開く必要があります。結果:ビルド、リンク、実行、正しく実行されます。 main.cppはHAL cコードを呼び出すことができ、HALコールバックは.cppファイル内の関数を呼び出すことができます。 1 .cpp側が.c側の関数を呼び出している場合、.cppファイルでextern "C"修飾子が必要になる場合があります(プリペンディングdefined extern "C"-によって関数プロトタイプを変更します) 2 .cサイドが.cppで定義されたコールバックを呼び出しています(.cppサイドの関数定義をdefined extern "C"を前に付けて変更します。

いくつかのメモ:

  • CubeMXでコードを再生成した場合(たとえば、クロックまたはピン構成を変更するため)、main.cは更新されますが、main.cppは更新されません。そのため、.cファイルからの変更/差分をにマージする必要があります。 .cppファイル。
  • CとC++の設定が同等であることを確認する方法:ビルド後、コンソールウィンドウを確認し、gccとg ++のコマンドライン呼び出しを比較して、関連するパラメーター(パス、-Dなど)が同一であることを確認します。
  • Eclipse .cproject XMLファイルを編集してC設定をC++側に複製することは可能です(ただし危険です)(ここでは特定の詳細は省略しますが、.cprojectファイルを編集する前にEclipseでプロジェクトを閉じます)。
  • CubeMX/HALの「膨らみ」に対する異議に関して:CubeMXはコードを生成し、非常に迅速にプロジェクトを作成します。 HAL APIが遅い場合(GPIOポートピンアクセスなど)、API呼び出しを、膨らんだAPIが行うことのより単純なサブセットを含む新しいユーザー関数に置き換えるだけです。私はこれをタイムクリティカルなコードで頻繁に行います。
  • CubeMX(4.14.0)とAtollic(v6.0.0 Lite)を使用しています。 Atollic EclipseでC++に変換するプロジェクトオプションは表示されませんでしたが、ザイリンクスEclipseなどの他のEclipse環境でこのオプションが表示されました。

改善の余地:これらの変更をより自動化するために編集できるCubeMXテンプレートがあるかもしれませんが、このハックをよりエレガントにするためのCubeMXテンプレートについて十分に知りません。

私もIAR EWARMでCubeMXを使用し、同様の(ただし少し簡単)プロセスを実行して.cppプロジェクトに変換します。

6
Jim Fred