CubeIDE環境で、C++にて開発する特にCubeMXなどを弄ることなく、C++を用いて開発するTipsです。最近発売されたG431のNucleoボードを、C++なソースでLチカすることを目指します。想定している読者はCubeIDEがある程度扱える中級者です。時間にして30分くらいの作業かと思います。以下、執筆時の環境です。Projectから、CubeMXを用いて雛形を生成したところからの話です。※環境についてライブラリはGPIO→LLを、RCC→HAL利用しています。PA6を追加でGPIO_Outputとして追加しています。V1.0.0を利用しています。Language:C++を選択しています。(これを選んだところでC++ネイティブなソースがCubeMXから出てこないので使えないんですけどね)また、ペリフェラル等の設定ファイルをmain.cに書かずに、別のファイルに吐き出すオプションもつけています。これが無いとmainが肥大化して読みにくいです。1ディレクトリを作る+Pathを通すC++で開発する以上、1Classに対して1ファイルが一般的なので、標準のInc/Src内に大量にファイルが必ずできます。ディレクトリを作ります。Folder(フォルダ名MyClass)MyClassを選択して、Fileタブ->New->Folder(フォルダ名Inc)MyClassを選択して、Fileタブ->New->Folder(フォルダ名Src)と操作します。この段階で以下のようになるはずです。次にPathを通します。Symbolsで以下のように追加します。C++の両方にPathを通す必要があります。C++に対しても同様の設定をしてください。2Classを作成するFileタブ->New->ClassでClassを作成します。コンストラクタやデストラクタはお好みで。コンストラクタとは、オブジェクト生成時に叩かれる関数、デストラクタとは、オブジェクトがスコープから外れる等の理由で破棄される際に叩かれる関数です。私の個人的な感想だと、ハードウェアに近い処理ほど、オブジェクトが破棄されることはないため、使わない事が多いです。生成された後に、然るべき場所にファイルを移動しましょう。ここではMyClassのIncにヘッダ、Srcにソースファイルを配置しています。ファイルの移動はドラッグ+ドロップでできます。今回のClassはGPIOの制御なので、以下のように記述しました。mGPIOStatus(GPIO_OFF)はメンバイニシャライザです。関数内での代入よりちょっと早いです。参考:http://jagabeeinitialize.hatenablog.com/entry/2018/01/21/192043マイコンと相性が良いですね。GPIO_PIN_5);myIO.ON();みたいな感じで使うことを想定して書きました。続いて神クラスを作ります。普通はタブーなのですが、ちょっとした理由で必要なんです。同様の要領で以下のように作ってください。Godだと思った?残念、Deusでした。DeusClassは以下のように実装してください。GPIO_PIN_6);myGPIO1.ON();myGPIO2.OFF();while(1){myGPIO1.Toggle();myGPIO2.Toggle();HAL_Delay(1000);}}3Wrapperを作成するやっとこれらをMainに読ませます。Mainに読ませてはいけません。Wrapperファイルを作ります。以下のように配置してください。*///このClassだけは、C/C++の架け橋なので、//.hppの#includeがHedder側でできない。//なのでソース内に記述する。cppWrapper(void){Bosatsu.Ctrl();}わざわざbosatsuを作った理由は、WrapperではhppのIncludeができないので、C++の記述ができず、例えばbool型などが扱えません。非常に使いづらいので、これを回避するためだけに2重にWrapしているイメージです。3Mainに記述するようやくmain.cに記述します。*/}4Debugするこれでようやく完成です。たかがLチカなのに!お疲れさまでした。面倒臭かったですよね?ここまでコストを払ってまでC++で開発するメリットは勿論あって、Cに比べてカプセル化が容易です。ソースを汚す手法でしか、(例えば積分演算子を)複製できませんが、C++ならばClassのオブジェクトとして複製できます。デメリットもあり、それはソースが非オブジェクト指向の言語に比べて肥大化しやすい→技術的負債が発生することです。これを回避するために、プログラマたちは、テスト駆動開発などの、管理しやすいソースを記述する方法が考案されていたりします。いつかはそのあたりの話も書きたいと思います。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。