メカトロニクス研究部会

コラム:C++で開発するには

note_add 2025/09/01
update 2025/09/01

今回はC言語で開発しますが、C++のが好きだって人もいるでしょう。多分。

ただ、CubeMXは現状C言語のコードしか吐いてくれないので、C++で開発するにはちょっと細工してやる必要があります。

細工と言っても簡単な話で、C++で書いた関数をCubeMXが吐いたC言語側で呼べばいいのです。早速書いていきます。

ヘッダー書くぞ

main.hに関数プロトタイプを追加

まずヘッダーに関数の定義を書きます。main.cから呼び出すんでmain.h(①)が都合良さそうですね。

中には100行弱書いてますが、その中から赤で囲った「USER CODE BEGIN(END) EFP」(②)を探して下さい。
今回はこの中に書いていきます。どうせなら見慣れた名前が良かろうということで関数名は某duinoにあやかってsetuploopとしました。

メインで呼ぶぞ

main.cに関数呼び出しを追加

先に呼び出しだけ書いちゃいます。main.c(①)を開いて下さい。

例によってその中から「USER CODE BEGIN(END) 2」(②)・「USER CODE BEGIN(END) 3」(③)を探します。
前者ではsetupを、後者ではloopを呼び出しておきます。

C++ソース作るぞ

ソースファイル作成画面を開く

次に我々がこれからメインで触っていくことになるC++のソースを作ります。
まずSrcの上で右クリック(①)して下さい。メニューが表示されるので、「新規」(②)から「C/C++ ソースファイル」(③)を押します。

C++ソースファイルを作成

作成画面が出てくるので名前を決め(①)ます。今回はcxxmainとしました。
型(②)はソースファイルの言語です。C++なので.cpp(画像では筆者の好みの関係で.cc)を選びます。.cはC言語、.cuはCUDAのソースになってしまいます。

このままではCMakeの対象に入らないので、「ターゲットに追加」(③)にチェックを入れます。
多分デフォでプロジェクト名と同名のヤツにもチェックが入ってくれてるはずなのでそのまま。他はもちろんチェック無し。

OK(④)で完了するとファイルが作成され、自動で開きます。ここにコードを書いていきます。

#include <main.h>

extern "C" {

void setup() {
    // 準備
}

void loop() {
    // ループ処理
}

} // extern "C"

extern "C"がミソで、コイツを付けることでC言語からも使えるようにします。
他は某duinoよろしく最初に1回だけ実行する部分とループ処理の2つを定義してます。

終わり。