フォト
2018年9月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
無料ブログはココログ

« 豊四季タイニーBASIC for Arduino機能拡張版 作成しました | トップページ | BASIC言語が動くORANGE pico type S(キット)を組み立てました »

2018年3月20日 (火)

Arduino用スケッチのサブルーチンをサブディレクトリに配置する

Arduinoで大きなスケッチを作成する場合、幾つかのファイルに分割したい場合があります。

現在手掛けている、豊四季タイニーBASICの拡張版はスケッチサイズが30350バイトあり、
ライブラリやサブルーチンで15個のファイルに分割しています。
そのうち、修正頻度の高い3つのファイルだけを、タブに表示するようにしています。

Arduino IDE

方法としては、スケッチのファイルの配置を次のような感じにすることで、
タブに表示するファイルと、表示されないファイルに分別しています。

\ttbasic
│  basic.cpp
│  ttbasic.ino
│  ttconfig.h
│
└─src
    └─lib
            FontGT20L16J1Y.cpp
            FontGT20L16J1Y.h
            IR.cpp
            mcurses-config.h
            mcurses.c
            mcurses.h
            MW25616L.cpp
            MW25616L.h
            SO1602AWWB.cpp
            SO1602AWWB.h
            TI2CEPPROM.cpp
            TI2CEPPROM.h

スケッチファイル(ttbasic.ino)と同じフォルダにあるファイルはIDEのタブに表示されます。
サブディレクトリに配置したファイルはタブに表示されません。
利用頻度が多い自作ライブラリ・サブルーチンなんかはこの配置がお手軽です。
(本格的なライブラリにすると配布等も結構面倒ですし)

サブディレクトリは
  src\lib
  src\lib2
  src\lib3
のように複数に分けて配置してもOKです。

公式サイトにはこの方法は記載されてないので、動作の保証は出来ないのですが、
とりあえず、この形態でスケッチを公開しており、いまのところ問題ないようです。

ただし、制約がいくつかあります。特にインクルード(#include文)において、
下位のディレクトリのファイルから上位のディレクトリのファイルのインクルードすると
エラーになります(ただし、パスが通っているシステム用のインクルードファイルはOK)。
上位から下位のファイルのインクルードは可能です。

例:basic.cppからsrc\lib\mcurses.hをインクルードする場合は、
    #include "src\lib\mcurses.h"で行うことが出来ます。
    src\lib\mcurses.hから上位のttconfig.hのインクルードはエラーになります。
    #include "../../ttconfig.h"

本来ライブラリとしてlibrariesに配置するライブラリも、スケッチのサブディレクトリに
配置したいのですが、ライブラリに付随するサンプルまでコンパイルされていまいます。
(サンプルを削除すれば、配置できます)

また、タブに表示されていないファイルを修正する場合は、別途テキストエディタで
開いて編集を行う必要があります(これは、さほど苦にはなりませんが..)

« 豊四季タイニーBASIC for Arduino機能拡張版 作成しました | トップページ | BASIC言語が動くORANGE pico type S(キット)を組み立てました »

arduino」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/66517840

この記事へのトラックバック一覧です: Arduino用スケッチのサブルーチンをサブディレクトリに配置する:

« 豊四季タイニーBASIC for Arduino機能拡張版 作成しました | トップページ | BASIC言語が動くORANGE pico type S(キット)を組み立てました »