debiancdn

AWS, Content Delivery Network and Debian

arduino IDEを使わないときは関数を先に宣言しとけという話

素直にIDEつかってればまったくはまらなかったのだが,emacsで書いてそれをmakeするとcompileできない問題にちょっとはまる.以前arduinoをemacsからというかコマンドラインで使うのを書いたけど,これだけでは足りなかったという話.

Blinkを一部改変した以下のコード.

int ledPin = 13;                // LED connected to digital pin 13
void setup()                    // run once, when the sketch starts
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}
void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
  blink();
}
void blink()
{
}

arduino IDEからだと何の問題もなく,compileできるのだが,これはIDEが

#include "WProgram.h"
void setup();
void loop();
void blink();

のように

#include "WProgram.h"

に続いて

void setup();
void loop();
void blink();

という関数宣言を元のコードに補ってからcompileしているおかげでした.

とうぜん補っていないと

 error: 'blink' was not declared in this scope

とのようにおこられる.

以前arduinoをemacsからというかコマンドラインで使うに書いたMakefileでは make applet_files で

        test -d applet || mkdir applet
        echo '#include "WProgram.h"' > applet/$(TARGET).cpp
        cat $(TARGET).pde >> applet/$(TARGET).cpp

のように,単に Wprogram.hをincludeしただけだったのが原因でした.

まとめ.arduino IDEを使わないときは関数を先に宣言しとけ.ということで.

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中