不韋 呂
/
Example_Interrupt_in_Class
Example to define interrupt service routine (ISR) in class. 割り込みサービスルーチン (ISR) をクラスの中に作る例
main.cpp@0:f8007033a4ad, 2017-07-22 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sat Jul 22 02:57:55 2017 +0000
- Revision:
- 0:f8007033a4ad
1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |