使用Arduino类

use*_*772 32 class arduino object

我正在尝试使用Arduino的类对象,但我一直遇到问题.我想要做的就是声明一个类并创建该类的对象.一个例子是什么?

War*_*voy 18

在Arduino 1.0上,这个编译得很好:

class A
{
  public:
   int x;
   virtual void f() { x=1; }
};

class B : public A
{
  public:
    int y;
    virtual void f() { x=2; }
};


A *a;
B *b;
const int TEST_PIN = 10;

void setup()
{
   a=new A(); 
   b=new B();
   pinMode(TEST_PIN,OUTPUT);
}

void loop()
{
   a->f();
   b->f();
   digitalWrite(TEST_PIN,(a->x == b->x) ? HIGH : LOW);
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*han 13

一个关于如何为Arduino平台创建库的优秀教程.一个库基本上是一个类,所以它应该向你展示它是如何完成的.

在Arduino上你可以使用类,但有一些限制:

  • 没有新的和删除关键字
  • 没有例外
  • 没有libstdc ++,因此没有标准函数,模板或类

您还需要为您的类创建新文件,您不能只在主草图中声明它们.重新编译库时,还需要关闭Arduino IDE.这就是我使用Eclipse作为我的Arduino IDE的原因.

  • new/delete在Arduino 1.0.6上运行正常 (9认同)

tam*_*erg 6

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230935955指出:

默认情况下,Arduino IDE和库不使用operator new和operator delete.它支持malloc()和free().所以解决方案是为自己实现new和delete运算符,以使用这些函数.

码:

#include <stdlib.h> // for malloc and free
void* operator new(size_t size) { return malloc(size); } 
void operator delete(void* ptr) { free(ptr); }
Run Code Online (Sandbox Code Playgroud)

这让你创建对象,例如

C* c; // declare variable
c = new C(); // create instance of class C
c->M(); // call method M
delete(c); // free memory
Run Code Online (Sandbox Code Playgroud)

此致,tamberg


Joh*_*ett 1

您能举个例子来说明什么不起作用吗?您可能知道,Wiring 语言基于 C/C++,但是并非所有 C++ 都受支持

我不确定是否允许您在 Wiring IDE 中创建类(我的第一个 Arduino 现已在邮件中)。我确实知道,如果您编写了一个 C++ 类,使用AVR-GCC编译它,然后使用AVRDUDE将其加载到您的 Arduino 上,它就会工作。