STM32CubeでC++を使う(遭遇編)
遭遇編とか書いてますが、多分続かないです。備忘録的要素が強い。
訳あってSTM32F7向けのファームウエアを書いているのですが、その過程でC++の資産を使う場面がありました。少しハマったのでメモとして残します。
ココに記載した手順を実行した結果何が起ころうと責任は取れません。
■何が起こったか
CubeMXでC++プロジェクトを指定して自動生成したにも関わらず、template, classなどの記述が弾かれる。
今回の主題は上記の通りですが、同時に発生した以下の問題についても対処法を記載します。
#error "Compiler generators FPU Instructions for a device without an FPU..."
というエラーが出てビルドが止まる。
■解決方法
身も蓋もないですが
main.cおよびmain.hをmain.cppおよびmain.hppにリネームする
自分の場合これで解決しました。
こういう場合うっかりミス(この場合Cを指定して自動生成しているetc.)の可能性を排除しに行くのが先決です。プロジェクトを右クリックして、”C++へ変換”なるオプションが表示されていた場合、Cを指定して自動生成している可能性が高い(みたい)です。その場合C++へ変換を選択することでうっかりを解消できる。
自分の場合は”Cへ変換”なるオプションが表示されているため、おそらく生成時の設定は正しい。ということで、似たようなケースの場合上記の方法で解決するかもしれません。
■解決方法(副題)
こちらはこうです
ビルド設定のPath and Symbolsに#__FPU_PRESENTを追記する
こちらはエラーメッセージの通りに対処をしています。ただし、適当な場所に#defineマクロとして書き込むとRedefineだぞ!と怒られます。理不尽だ。
■まとめ
これらの問題は正しい手順を踏めば生成時に潰せる問題なのかもしれません。
ただ、正しい生成手順を学ぶ気もない以上、再び同じ問題に遭遇することはほぼ確実ですので、潰し方を書き残しておきます。
以上