isr example

Committer:
emilmont
Date:
Fri Jul 13 11:48:28 2012 +0000
Revision:
1:3043ec651794
Parent:
0:4979ad0f5cb9
Child:
2:3ded4c6c9dff
First implementation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:3043ec651794 1 #include "mbed.h"
emilmont 1:3043ec651794 2 #include "rtos.h"
mbed_official 0:4979ad0f5cb9 3
emilmont 1:3043ec651794 4 Queue<uint32_t, 5> queue;
emilmont 1:3043ec651794 5
emilmont 1:3043ec651794 6 DigitalOut myled(LED1);
emilmont 1:3043ec651794 7
emilmont 1:3043ec651794 8 void queue_isr() {
emilmont 1:3043ec651794 9 queue.put((uint32_t*)2);
emilmont 1:3043ec651794 10 myled = !myled;
emilmont 1:3043ec651794 11 }
emilmont 1:3043ec651794 12
emilmont 1:3043ec651794 13 void queue_thread(void const *argument) {
emilmont 1:3043ec651794 14 while (true) {
emilmont 1:3043ec651794 15 queue.put((uint32_t*)1);
emilmont 1:3043ec651794 16 Thread::wait(1000);
emilmont 1:3043ec651794 17 }
emilmont 1:3043ec651794 18 }
emilmont 1:3043ec651794 19
emilmont 1:3043ec651794 20 int main (void) {
emilmont 1:3043ec651794 21 Thread thread(queue_thread);
emilmont 1:3043ec651794 22
emilmont 1:3043ec651794 23 Ticker ticker;
emilmont 1:3043ec651794 24 ticker.attach(queue_isr, 1.0);
emilmont 1:3043ec651794 25
emilmont 1:3043ec651794 26 while (true) {
emilmont 1:3043ec651794 27 osEvent evt = queue.get();
emilmont 1:3043ec651794 28 if (evt.status != osEventMessage) {
emilmont 1:3043ec651794 29 printf("queue->get() returned %02x status\n\r", evt.status);
emilmont 1:3043ec651794 30 } else {
emilmont 1:3043ec651794 31 printf("queue->get() returned %d\n\r", evt.value.v);
emilmont 1:3043ec651794 32 }
emilmont 1:3043ec651794 33 }
emilmont 1:3043ec651794 34 }