Arduinoでヘッダと実装でファイルを分割

M5Stack

 Arduino IDEでプログラミング。ライブラリの作成方法を調べている。以前はとりあえずプログラム本体と分けられればいいや、ということでヘッダファイル(.h)に実装までしていたのだけど、さすがにこれはまずいかなあ、と思い。

 いろいろ見ながら、定義と実装でファイルを分けることの利点などをあらためて勉強。完全に理解したとは言い難いのだけど、公開を考えればやっといた方がよさそう、とか。

 あと、分割すれば最終的なバイナリのファイルサイズが小さくできる、という記述も発見。ほんとに? ということで試してみた。Arduino IDEでのコンパイル後のメッセージと、最終的なバイナリのサイズ(エクスプローラでの表示)。

●分割前

最大1310720バイトのフラッシュメモリのうち、スケッチが290771バイト(22%)を使っています。
最大327680バイトのRAMのうち、グローバル変数が17860バイト(5%)を使っていて、ローカル変数で309820バイト使うことができます。
サイズ:284 KB (290,880 バイト)

●分割後

最大1310720バイトのフラッシュメモリのうち、スケッチが290847バイト(22%)を使っています。
最大327680バイトのRAMのうち、グローバル変数が17396バイト(5%)を使っていて、ローカル変数で310284バイト使うことができます
サイズ: 284 KB (290,960 バイト)

 小さめのプログラム、ライブラリなので差はほんの少し。分割後の方が80バイト大きい。あれ?

 まあいいや。とりあえず、書き方がある程度わかったので作業を進めようと思う。

 とりあえず、調べている最中に気になったもの、役に立ったものをリンク。

C++ デフォルト引数はプロトタイプ宣言だけにする default argument given for parameter
デフォルト引数はヘッダにのみ書かないとエラー。途中で両方に書いていたので削除した。

Arduinoのオブジェクト指向プログラミング
書き方の基本など。ヘッダフィアルの最後(endifの前)に「;」つけるとかも。

Arduinoの自作ライブラリを作成するには?
examples作成からGitHubへのpushまで。

charで定義される変数の文字数を調べようとしたのだけどsizeofではうまくいかない。それでは配列サイズではなくポインタのサイズを取得する。代わりにstrlenを使う。いまだにこのcharがわからない。

コメント