読者です 読者をやめる 読者になる 読者になる

PSoC で C++ を使う

PSoCC++ が使えないか1年前からいろいろ模索していたのですが、最近の PSoC Creator (3.3) は特に気にせずとも C++ が使えると言うことが分かりました。そのメモを残しておきます。

1. main.c を main.cpp に rename
2. #include を extern "C" {} で囲む
サンプルコードはこんな感じです(Lチカ)。

#ifdef __cplusplus
extern "C" {
#endif
#include <project.h>
#ifdef __cplusplus
}
#endif

class DigitalOut {
  private:
    uint8 (*read)(void);
    void (*write)(uint8);
  public:
    DigitalOut(uint8 (*_read)(void), void (*_write)(uint8)) {
      read  = _read;
      write = _write;
    }
    operator uint8() { return (*read)(); }
    void operator =(uint8 _data) { (*write)(_data); }
};

int main()
{

    DigitalOut po(POUT_Read, POUT_Write);
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    for(;;)
    {
        uint32 i;
        /* Place your application code here. */
        for (i=0; i<1000000; i++);
        po = ~po;
    }
}

/* [] END OF FILE */

後は普通にコンパイルして書き込めば動きました。

おそらく libstd++ は同梱されていないと思うので new やら delete は普通には使えないと思います(未確認)。
これで HOGE_Init() や HOGE_Write() といった関数から別れることが出来そうです。
組み込みとは言え、mbed の様にペリフェラル群もクラスで扱いたかったので、これで上手く隠蔽できるかなと。