0

コードが複数のファイルにある場合、Arduino のコードをコンパイルする際に問題が発生します。私が過去に行ったことは、別のディレクトリにあるファイルとmakeそこにあるプロジェクトをスクリプトで連結することです。すべてが正しい順序で定義されていることを確認するなどの手間をかけずに、ビルド フォルダーから直接コンパイルできるようにしたいと考えています。

avrdudeArduino IDE がウィンドウ マネージャーでうまく動作しないため、Linux コマンド ラインからコンパイルするために使用しています。複数のファイルで作成すると (適切な#includeステートメントを使用すると、次の性質のエラーが発生しますが、すべてのメソッドと変数について.

./../lib/motor.ino:3:21: error: redefinition of ‘const long unsigned int MOVE_DELAY’
./../lib/motor.ino:3:21: error: ‘const long unsigned int MOVE_DELAY’ previously defined here

使用される唯一の他の場所MOVE_DELAYvoid loop()関数内であり、そこで再定義されません。コードを 1 つのファイルに連結してmakeそのディレクトリで実行すると、コードは正常にコンパイルされますが、インクルードを含む別のファイルにある場合はコンパイルされません。

4

1 に答える 1

2

「extern」プレフィックスまたは外部でオブジェクトを宣言することで、問題は解決できると思います。例えば。私はよく SdFat ライブラリを使用します。このライブラリでは、メイン スケッチに含まれており、他のライブラリにインスタンス化されています。

/**
 * \file test.ino
 */
#include <SdFat.h>
#include <foo.h>
SdFat sd;
...

foo.h などの他のライブラリでも同じオブジェクトを使用します。

/**
 * \file foo.h
 */
#include <SdFat.h>
extern SdFat sd;
...

「sd」は2回存在できないため、「extern」の接頭辞がなかったら、あなたのようにエラーになります。extern プレフィックスは、リンカに新しいインスタンス化を行わず、外部の別のインスタンスにリンクするように指示します。

于 2013-02-14T20:41:38.807 に答える