gombeのブログ

マイコンの電子工作系PIC32/KiCad/C/C++/3D/

組み込みでのC++の勧め

IMG_2863

PICならxc32++,armならarm-g++,など、さまざまなマイコンc++を利用可能です。例えば32bitCPUならアドレスがリニアに取れることが多いため、オーバーヘッドが少なくてすみます。

そこでc++をつかったプログラミングのススメを書きます。ではなぜC++なのでしょうか?

  • C言語と相性がいい
  • クラスなどが利用できる
  • ライブラリを作る時に便利
  • デバックしやすい

最近ではPCのプログラミングもオブジェクト指向が多いです。Javaとかc#とかもそうです。

しかし、組み込みで使う時には結構詰まる点もあるのでここで少しポイントを押さえておきましょう。

1、文字列関係 まず組み込みでは当たり前ですがstreamが存在しません。自作するなどする必要があります。Cでも同じですが。Stringなども実装されていなかったりとか、以外と実装されていないことが多くてやってみると以外とつまることも多いです。

2、コンストラクタの初期化 コンストラクタの初期化はスタートアップルーチンの最後で行いますが読み出し順序は定義されません。そのため組み込み特有のレジスタアクセスが競合する可能性のある場合は手動で初期化する必要があります。 たとえばオシレータのクロックがあります。この設定値をレジスタアクセスしてクロックを計算しても、その後にオシレータの設定をするとその設定値が狂ってしまいます。UARTなどを使う場合は注意が必要です。

また、C++のオーバーヘッドも場合によっては注意が必要です。関数(メンバー)へのアクセスの方法がCとは異なります。そのため呼び出し時に時間がかかります。たとえば低レベルのもの(ベクトル型とか)はinline修飾子をつけておきましょう。もしかしたら最適化でつくかもしれませんが。

staticにしたりしてヘッダに入れなければなりません。