![](/media/cache/profiles/e6e23936f2d0414c639133d8b9721135.jpg.50x50_q85.jpg)
Just to try whether is it posible to call rtostimer::start()/stop() from an ISR. The answer seems to be NO.
Fork of boton_ISR by
main.cpp@0:005ae170e5f9, 2017-01-03 (annotated)
- Committer:
- CarlosKitu
- Date:
- Tue Jan 03 13:49:43 2017 +0000
- Revision:
- 0:005ae170e5f9
- Child:
- 1:fc92ede355c4
pruebas de boton isr y activar rtostimer.start(), que no funciona dentro de ISR
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
CarlosKitu | 0:005ae170e5f9 | 1 | #include "mbed.h" |
CarlosKitu | 0:005ae170e5f9 | 2 | #include "rtos.h" |
CarlosKitu | 0:005ae170e5f9 | 3 | |
CarlosKitu | 0:005ae170e5f9 | 4 | DigitalOut myled(LED1); |
CarlosKitu | 0:005ae170e5f9 | 5 | Serial pc(SERIAL_TX, SERIAL_RX); |
CarlosKitu | 0:005ae170e5f9 | 6 | |
CarlosKitu | 0:005ae170e5f9 | 7 | volatile int contador_timer = 0; |
CarlosKitu | 0:005ae170e5f9 | 8 | volatile int estado_timer = 0; |
CarlosKitu | 0:005ae170e5f9 | 9 | RtosTimer * timer; |
CarlosKitu | 0:005ae170e5f9 | 10 | |
CarlosKitu | 0:005ae170e5f9 | 11 | class Counter { |
CarlosKitu | 0:005ae170e5f9 | 12 | public: |
CarlosKitu | 0:005ae170e5f9 | 13 | Counter(PinName pin) : _interrupt(pin) { // create the InterruptIn on the pin specified to Counter |
CarlosKitu | 0:005ae170e5f9 | 14 | _interrupt.rise(this, &Counter::increment); // attach increment function of this counter instance |
CarlosKitu | 0:005ae170e5f9 | 15 | _interrupt.mode(PullUp); |
CarlosKitu | 0:005ae170e5f9 | 16 | } |
CarlosKitu | 0:005ae170e5f9 | 17 | |
CarlosKitu | 0:005ae170e5f9 | 18 | void increment() { |
CarlosKitu | 0:005ae170e5f9 | 19 | _count++; |
CarlosKitu | 0:005ae170e5f9 | 20 | |
CarlosKitu | 0:005ae170e5f9 | 21 | if(estado_timer==0) |
CarlosKitu | 0:005ae170e5f9 | 22 | { |
CarlosKitu | 0:005ae170e5f9 | 23 | myled = 1 - myled; |
CarlosKitu | 0:005ae170e5f9 | 24 | ; |
CarlosKitu | 0:005ae170e5f9 | 25 | timer->start(1000); |
CarlosKitu | 0:005ae170e5f9 | 26 | } |
CarlosKitu | 0:005ae170e5f9 | 27 | else{ |
CarlosKitu | 0:005ae170e5f9 | 28 | timer->stop(); |
CarlosKitu | 0:005ae170e5f9 | 29 | myled = 1 - myled; |
CarlosKitu | 0:005ae170e5f9 | 30 | } |
CarlosKitu | 0:005ae170e5f9 | 31 | estado_timer = 1 - estado_timer; |
CarlosKitu | 0:005ae170e5f9 | 32 | } |
CarlosKitu | 0:005ae170e5f9 | 33 | |
CarlosKitu | 0:005ae170e5f9 | 34 | int read() { |
CarlosKitu | 0:005ae170e5f9 | 35 | return _count; |
CarlosKitu | 0:005ae170e5f9 | 36 | } |
CarlosKitu | 0:005ae170e5f9 | 37 | |
CarlosKitu | 0:005ae170e5f9 | 38 | private: |
CarlosKitu | 0:005ae170e5f9 | 39 | InterruptIn _interrupt; |
CarlosKitu | 0:005ae170e5f9 | 40 | volatile int _count; |
CarlosKitu | 0:005ae170e5f9 | 41 | }; |
CarlosKitu | 0:005ae170e5f9 | 42 | |
CarlosKitu | 0:005ae170e5f9 | 43 | void tick(void const * arg){ |
CarlosKitu | 0:005ae170e5f9 | 44 | contador_timer += 1; |
CarlosKitu | 0:005ae170e5f9 | 45 | //myled = 1 - myled; |
CarlosKitu | 0:005ae170e5f9 | 46 | } |
CarlosKitu | 0:005ae170e5f9 | 47 | |
CarlosKitu | 0:005ae170e5f9 | 48 | |
CarlosKitu | 0:005ae170e5f9 | 49 | Counter counter(PC_9); // Boton azul |
CarlosKitu | 0:005ae170e5f9 | 50 | |
CarlosKitu | 0:005ae170e5f9 | 51 | |
CarlosKitu | 0:005ae170e5f9 | 52 | int main() { |
CarlosKitu | 0:005ae170e5f9 | 53 | |
CarlosKitu | 0:005ae170e5f9 | 54 | myled = 1; |
CarlosKitu | 0:005ae170e5f9 | 55 | timer = new RtosTimer(tick, osTimerPeriodic, (void *) 0); |
CarlosKitu | 0:005ae170e5f9 | 56 | //timer->start(1000); |
CarlosKitu | 0:005ae170e5f9 | 57 | |
CarlosKitu | 0:005ae170e5f9 | 58 | while(1){ |
CarlosKitu | 0:005ae170e5f9 | 59 | //wait(1); |
CarlosKitu | 0:005ae170e5f9 | 60 | Thread::wait(2100); |
CarlosKitu | 0:005ae170e5f9 | 61 | //if (counter.read()==2) timer->start(1000); |
CarlosKitu | 0:005ae170e5f9 | 62 | //if (counter.read()==10) timer->stop(); |
CarlosKitu | 0:005ae170e5f9 | 63 | //pc.printf("bucle princ %i\r\n", counter.read()); |
CarlosKitu | 0:005ae170e5f9 | 64 | pc.printf("bucle princ. contador_timer: %i contador_boton %i\r\n", contador_timer, counter.read()); |
CarlosKitu | 0:005ae170e5f9 | 65 | //myled = 1 - myled; |
CarlosKitu | 0:005ae170e5f9 | 66 | } |
CarlosKitu | 0:005ae170e5f9 | 67 | } |
CarlosKitu | 0:005ae170e5f9 | 68 | |
CarlosKitu | 0:005ae170e5f9 | 69 | |
CarlosKitu | 0:005ae170e5f9 | 70 |