1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

STM32CubeMXでコード生成時に*.cppと*.cを切り替える

Posted at

 STM32CubeMXはコード生成時にmain.cを生成する。main.cppがあってもmain.cが作成される。その他のソースファイルについても同様。

 STM32CubeMXではProject ManagerタブのCode GeneratorからUser ActionsBefore Code GenerationおよびAfter Code Generationを指定することで、コード生成の前と後に何らかのコマンドを実行することができる。ここでリネームを走らせれば、main.cppをmain.cとして処理できる。ただしちょっと癖が強く、狙い通りに動かすのに手間取ったため、方法をメモっておく。なお、使用したSTM32CubeMXはWindows環境のv6.10.0。

 結構変な設定になるので、万人向けというわけではない。

手順

ショートカットを作成する

 リンク先を%userprofile%\AppData\Local\Programs\STM32CubeMX\STM32CubeMX.exe hoge.iocとして、STM32CubeMXを起動した上でプロジェクトファイルを読み込ませる(exeのパスは適宜変更)。
 作業フォルダを空欄にし、プロジェクトフォルダをカレントディレクトリとして使用するようにする。
 STM32CubeMXを起動するときは、必ずこのショートカットで起動する。

 必要に応じて:ショートカットを.gitignoreに追加して、各環境で独自に用意してもらう。

image.png

バッチファイルを作成する

beforeCodeGeneration.bat
@ren core\src\*.cpp *.c
afterCodeGeneration.bat
@ren core\src\*.c *.cpp

 renコマンドのワイルドカードでcore/src*.cpp*.cに書き換えている。main.cppだけ使いたい場合はそれだけ指定すればいい。

CubeMXでバッチファイルを指定する

 Project ManagerCode GeneratorUser ActionsBefore Code GenerationAfter Code Generationに対して、beforeCodeGeneration.batafterCodeGeneration.batを指定する。

image.png

 以上の手順により、GENERATE CODEを実行すると、コード生成の前にbeforeCodeGeneration.batが実行され、コード生成の後にafterCodeGeneration.batが実行される。バッチファイルの中でリネーム処理を行うため、*.cppファイルを一時的に*.cファイルへ変更し、CubeMXで処理できるようになる。
 hoge.iocをダブルクリックしてSTM32CubeMXを起動するとUser Actionの相対パス(カレントディレクトリ)が変わり、バッチファイルの起動ができない。GENERATE CODEを使うときはショートカットから起動するのを忘れないようにする。
 ショートカットを使わず(通常の手順で)STM32CubeMXを起動した場合、カレントディレクトリはCubeMXのインストール先となる。この場合でも、User Actionsのパスを絶対パスor相対パスで適切に指定してやればバッチファイルを起動することはできる(ショートカットを作る&使う手間と、絶対パス(or長い相対パス)のどちらを選ぶかのトレードオフ)。

 Toolchain / IDEにMakefileを指定している場合、MakefileのC_SOURCESに各々の*.cのパスが追加されるから、忘れずに削除する必要がある。また、リンカスクリプト(*.ld)も上書きされるため、これを変更している場合は元に戻す操作も必要になる。LDはそう書き換えるものでもないから、beforeでバックアップしafterで上書きするみたいな処理を追加すると良さそう。

ハマった点

  • STM32CubeMXのUser Actionsはパスをダブルクオーテーションで囲むと実行できない(パスの途中にスペースが入っていても囲む必要はない)
  • STM32CubeMXのUser Actionsは起動オプションを指定することはできない
  • renコマンドはディレクトリをたどるときにスラッシュは不可でバックスラッシュが必要
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?