Example to define interrupt service routine (ISR) in class. 割り込みサービスルーチン (ISR) をクラスの中に作る例

Dependencies:   mbed

Committer:
MikamiUitOpen
Date:
Sat Jul 22 02:57:55 2017 +0000
Revision:
0:f8007033a4ad
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:f8007033a4ad 1 //-------------------------------------------------------
MikamiUitOpen 0:f8007033a4ad 2 // 割り込みサービスルーチン (ISR) をクラスの中に作る例
MikamiUitOpen 0:f8007033a4ad 3 // Example to define interrupt service routinr (ISR)
MikamiUitOpen 0:f8007033a4ad 4 // in class
MikamiUitOpen 0:f8007033a4ad 5 //
MikamiUitOpen 0:f8007033a4ad 6 // 2017/07/22, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:f8007033a4ad 7 //-------------------------------------------------------
MikamiUitOpen 0:f8007033a4ad 8
MikamiUitOpen 0:f8007033a4ad 9 #include "mbed.h"
MikamiUitOpen 0:f8007033a4ad 10
MikamiUitOpen 0:f8007033a4ad 11 /*
MikamiUitOpen 0:f8007033a4ad 12 // これでも大丈夫 (OK)
MikamiUitOpen 0:f8007033a4ad 13 // static メンバ関数を使う方法,Using static member function
MikamiUitOpen 0:f8007033a4ad 14 class myClass
MikamiUitOpen 0:f8007033a4ad 15 {
MikamiUitOpen 0:f8007033a4ad 16 public:
MikamiUitOpen 0:f8007033a4ad 17 myClass()
MikamiUitOpen 0:f8007033a4ad 18 {
MikamiUitOpen 0:f8007033a4ad 19 timer.attach(myClass::AtTime, 1);
MikamiUitOpen 0:f8007033a4ad 20 }
MikamiUitOpen 0:f8007033a4ad 21 private:
MikamiUitOpen 0:f8007033a4ad 22 Ticker timer;
MikamiUitOpen 0:f8007033a4ad 23 static DigitalOut led1;
MikamiUitOpen 0:f8007033a4ad 24 static int flip;
MikamiUitOpen 0:f8007033a4ad 25
MikamiUitOpen 0:f8007033a4ad 26 // ISR for Ticker (static function)
MikamiUitOpen 0:f8007033a4ad 27 static void AtTime()
MikamiUitOpen 0:f8007033a4ad 28 {
MikamiUitOpen 0:f8007033a4ad 29 led1 = flip;
MikamiUitOpen 0:f8007033a4ad 30 flip = !flip;
MikamiUitOpen 0:f8007033a4ad 31 }
MikamiUitOpen 0:f8007033a4ad 32 };
MikamiUitOpen 0:f8007033a4ad 33 DigitalOut myClass::led1(LED1);
MikamiUitOpen 0:f8007033a4ad 34 int myClass::flip = 0;
MikamiUitOpen 0:f8007033a4ad 35 */
MikamiUitOpen 0:f8007033a4ad 36
MikamiUitOpen 0:f8007033a4ad 37 // myClass の別の書き方 (alternative version)
MikamiUitOpen 0:f8007033a4ad 38 class myClass
MikamiUitOpen 0:f8007033a4ad 39 {
MikamiUitOpen 0:f8007033a4ad 40 public:
MikamiUitOpen 0:f8007033a4ad 41 myClass() : led1_(LED1), flip_(0)
MikamiUitOpen 0:f8007033a4ad 42 {
MikamiUitOpen 0:f8007033a4ad 43 timer_.attach(callback(this, &myClass::AtTime), 0.1f);
MikamiUitOpen 0:f8007033a4ad 44 }
MikamiUitOpen 0:f8007033a4ad 45 private:
MikamiUitOpen 0:f8007033a4ad 46 Ticker timer_;
MikamiUitOpen 0:f8007033a4ad 47 DigitalOut led1_;
MikamiUitOpen 0:f8007033a4ad 48 int flip_;
MikamiUitOpen 0:f8007033a4ad 49
MikamiUitOpen 0:f8007033a4ad 50 // ISR for Ticker
MikamiUitOpen 0:f8007033a4ad 51 void AtTime()
MikamiUitOpen 0:f8007033a4ad 52 {
MikamiUitOpen 0:f8007033a4ad 53 led1_ = flip_;
MikamiUitOpen 0:f8007033a4ad 54 flip_ = !flip_;
MikamiUitOpen 0:f8007033a4ad 55 }
MikamiUitOpen 0:f8007033a4ad 56 };
MikamiUitOpen 0:f8007033a4ad 57
MikamiUitOpen 0:f8007033a4ad 58 int main()
MikamiUitOpen 0:f8007033a4ad 59 {
MikamiUitOpen 0:f8007033a4ad 60 myClass obj;
MikamiUitOpen 0:f8007033a4ad 61
MikamiUitOpen 0:f8007033a4ad 62 while (true) {}
MikamiUitOpen 0:f8007033a4ad 63 }