Shinichiro Nakamura
/
TestProgramForBugTopic1074
This is for http://mbed.org/forum/bugs-suggestions/topic/1074/
main.cpp@1:70466efca68e, 2010-09-09 (annotated)
- Committer:
- shintamainjp
- Date:
- Thu Sep 09 10:21:06 2010 +0000
- Revision:
- 1:70466efca68e
- Parent:
- 0:49c0ef6111e6
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 1:70466efca68e | 1 | /** |
shintamainjp | 1:70466efca68e | 2 | * Test program for a bug. (http://mbed.org/forum/bugs-suggestions/topic/1074/) |
shintamainjp | 1:70466efca68e | 3 | * |
shintamainjp | 1:70466efca68e | 4 | * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) |
shintamainjp | 1:70466efca68e | 5 | * http://shinta.main.jp/ |
shintamainjp | 1:70466efca68e | 6 | */ |
shintamainjp | 1:70466efca68e | 7 | |
shintamainjp | 1:70466efca68e | 8 | #include "mbed.h" |
shintamainjp | 1:70466efca68e | 9 | #include "Semaphore.h" |
shintamainjp | 1:70466efca68e | 10 | |
shintamainjp | 1:70466efca68e | 11 | Serial ser(USBTX, USBRX); |
shintamainjp | 1:70466efca68e | 12 | Ticker ticker; |
shintamainjp | 1:70466efca68e | 13 | BusOut led(LED4, LED3, LED2, LED1); |
shintamainjp | 1:70466efca68e | 14 | Semaphore sem; |
shintamainjp | 1:70466efca68e | 15 | |
shintamainjp | 1:70466efca68e | 16 | volatile char shared_resource; // This is a shared resource for example. |
shintamainjp | 1:70466efca68e | 17 | |
shintamainjp | 1:70466efca68e | 18 | #define LOCK() sem.try_enter() |
shintamainjp | 1:70466efca68e | 19 | #define UNLOCK() sem.release() |
shintamainjp | 1:70466efca68e | 20 | |
shintamainjp | 1:70466efca68e | 21 | /** |
shintamainjp | 1:70466efca68e | 22 | * a ticker. |
shintamainjp | 1:70466efca68e | 23 | */ |
shintamainjp | 1:70466efca68e | 24 | void func_tick(void) { |
shintamainjp | 1:70466efca68e | 25 | led = led + 1; |
shintamainjp | 1:70466efca68e | 26 | } |
shintamainjp | 1:70466efca68e | 27 | |
shintamainjp | 1:70466efca68e | 28 | /** |
shintamainjp | 1:70466efca68e | 29 | * A call back function for serial interrupt. |
shintamainjp | 1:70466efca68e | 30 | */ |
shintamainjp | 1:70466efca68e | 31 | void func_serial_interrupt(void) { |
shintamainjp | 1:70466efca68e | 32 | if (LOCK()) { |
shintamainjp | 1:70466efca68e | 33 | shared_resource = ser.getc(); |
shintamainjp | 1:70466efca68e | 34 | UNLOCK(); |
shintamainjp | 1:70466efca68e | 35 | } |
shintamainjp | 1:70466efca68e | 36 | } |
shintamainjp | 1:70466efca68e | 37 | |
shintamainjp | 1:70466efca68e | 38 | /** |
shintamainjp | 1:70466efca68e | 39 | * Entry point. |
shintamainjp | 1:70466efca68e | 40 | */ |
shintamainjp | 1:70466efca68e | 41 | int main() { |
shintamainjp | 1:70466efca68e | 42 | ticker.attach_us(&func_tick, 100 * 1000); |
shintamainjp | 1:70466efca68e | 43 | ser.attach(&func_serial_interrupt); |
shintamainjp | 1:70466efca68e | 44 | while (1) { |
shintamainjp | 1:70466efca68e | 45 | /* |
shintamainjp | 1:70466efca68e | 46 | * Hung up serial communication if you hit keys on console for Serial. |
shintamainjp | 1:70466efca68e | 47 | */ |
shintamainjp | 1:70466efca68e | 48 | if (LOCK()) { |
shintamainjp | 1:70466efca68e | 49 | if (ser.writeable()) { |
shintamainjp | 1:70466efca68e | 50 | ser.printf("0x%x\n", shared_resource); |
shintamainjp | 1:70466efca68e | 51 | } |
shintamainjp | 1:70466efca68e | 52 | UNLOCK(); |
shintamainjp | 1:70466efca68e | 53 | } |
shintamainjp | 1:70466efca68e | 54 | wait_ms(100); |
shintamainjp | 1:70466efca68e | 55 | } |
shintamainjp | 1:70466efca68e | 56 | } |