0

私は最近、次のワークフローを使用して、STM32 の開発に PlatformIO を使用するように切り替えました。

  • CubeMX ユーティリティを使用して .ioc ファイルを作成する
  • stm32pioコマンド ライン ユーティリティを使用して、その .ioc ファイルからソース コードと PlatformIO 構成を生成します。
  • VSCode 用の PlatformIO プラグインを使用した編集、ビルド、およびデバッグ (Mac)

全体として、これは非常にうまく機能します。ただし、以前はSTのCubeMX IDEでCubeMXコード生成を使用していました.sファイルをソースディレクトリに配置し、(私が理解しているように)NVICを定義し、例外/割り込みに使用されるデフォルト関数を定義しました。明示的に定義されていません (つまり、デフォルトの弱い実装によって処理されるものです)。これが新しいワークフローのどこで定義されているかわかりません。これはビルド プロセスの一部として動的に生成されますか?

私が尋ねている理由は、(プロセス全体をよりよく理解したいという以外に)、EXTI0 の割り込みハンドラーを書きたいのですが、それをソフトウェア割り込みとしてトリガーし、それにピンを割り当てないようにしたいからです。それが不可能な場合、おそらく要点全体が議論の余地があります。

4

1 に答える 1

1

答えを見つけることができました。これらの手順は、この質問に出くわした他の誰かにとって役立つ場合があります。これは MacOS で行われましたが、他のオペレーティング システムのプロセスと似ているはずです。

ビルド プロセス中に、ファイル名が表示されます。で始まりstartup_、その後に開発対象の特定のチップの名前が続きます。私の場合、行は

Compiling .pio/build/disco_f072rb/FrameworkCMSISDevice/gcc/startup_stm32f072xb.o

ユーザーディレクトリのフォルダーを検索すると.platformio、一致する.sファイルが見つかりました。私の場合は.platformio/packages/framework-stm32cube/f0/Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/gcc/startup_stm32f072xb.s

ファイルへのパスの構造は、私が使用しているハードウェアとフレームワーク (STM32Cube フレームワーク、F0 シリーズ チップ、および GCC コンパイラ) の詳細を示しています。このファイルを見つける最も簡単な方法と、私が見つけた方法はfind、ターミナルからコマンドを使用して PlatformIO ディレクトリを検索することです。

このファイルを読むと、私が探していた行が得られ、次のような例外および割り込み処理に使用される関数の名前が定義されています。

.weak      EXTI0_1_IRQHandler
.thumb_set EXTI0_1_IRQHandler,Default_Handler

一部のドライバーに CubeMX HAL を使用しているようですが、基本的なスタートアップ コードは CMSIS を使用して実行されるため、HAL、LL、または CMSIS ベースのビルドでも同じである必要があります。

于 2020-05-26T21:56:01.270 に答える