割り込み / staticなメンバー函数としてISRをクラス内に記述する
pp.39-40
前回と同じことを今度はstaticなメンバー函数として記述する。前回と違うのは★印をつけたところである。このへんのしくみはよくわからない。
#include "mbed.h" class MyTimeout{ typedef Kernel::Clock::duration_u32 chrono_t; private: static uint8_t on; // ★static函数内のメンバーはstaticでなければならない。 // Mbed Timeoutクラスをインスタンス化する。 Timeout timer; // ★これがISR。static修飾する。 static void at_timeout(){ on = 0; } public: void start(chrono_t time){ on = 1; // Mbed TimeoutクラスのインスタンスにISRをattachする。 // ★attachするときはcallback()函数は使わない。 timer.attach(&at_timeout, time); } uint8_t IsOn(){ return on; } // コンストラクタ MyTimeout(){} }; uint8_t MyTimeout::on; // ★staticデータメンバーはクラスの外部で定義しなければならない。 int main(){ DigitalOut led(PA_10); MyTimeout timer; timer.start(5s); while(timer.IsOn()){ led = !led; ThisThread::sleep_for(250ms); } return 0; }