Shinichiro Nakamura
/
TestProgramForBugTopic1074
This is for http://mbed.org/forum/bugs-suggestions/topic/1074/
Diff: main.cpp
- Revision:
- 1:70466efca68e
- Parent:
- 0:49c0ef6111e6
--- a/main.cpp Wed Sep 08 12:53:38 2010 +0000 +++ b/main.cpp Thu Sep 09 10:21:06 2010 +0000 @@ -1,52 +1,56 @@ -/** - * Test program for a bug. (http://mbed.org/forum/bugs-suggestions/topic/1074/) - * - * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) - * http://shinta.main.jp/ - */ - -#include "mbed.h" -#include "Semaphore.h" - -Serial ser(USBTX, USBRX); -Ticker ticker; -BusOut led(LED4, LED3, LED2, LED1); -Semaphore sem; - -char shared_resource; // This is a shared resource for example. - -#define LOCK() sem.take() -#define UNLOCK() sem.release() - -/** - * a ticker. - */ -void func_tick(void) { - led = led + 1; -} - -/** - * A call back function for serial interrupt. - */ -void func_serial_interrupt(void) { - LOCK(); - shared_resource = ser.getc(); - UNLOCK(); -} - -/** - * Entry point. - */ -int main() { - ticker.attach_us(&func_tick, 100 * 1000); - ser.attach(&func_serial_interrupt); - while(1) { - /* - * Hung up your mbed system if you hit keys on console for Serial. - */ - LOCK(); - printf("0x%x\n", shared_resource); - UNLOCK(); - wait_ms(100); - } -} +/** + * Test program for a bug. (http://mbed.org/forum/bugs-suggestions/topic/1074/) + * + * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) + * http://shinta.main.jp/ + */ + +#include "mbed.h" +#include "Semaphore.h" + +Serial ser(USBTX, USBRX); +Ticker ticker; +BusOut led(LED4, LED3, LED2, LED1); +Semaphore sem; + +volatile char shared_resource; // This is a shared resource for example. + +#define LOCK() sem.try_enter() +#define UNLOCK() sem.release() + +/** + * a ticker. + */ +void func_tick(void) { + led = led + 1; +} + +/** + * A call back function for serial interrupt. + */ +void func_serial_interrupt(void) { + if (LOCK()) { + shared_resource = ser.getc(); + UNLOCK(); + } +} + +/** + * Entry point. + */ +int main() { + ticker.attach_us(&func_tick, 100 * 1000); + ser.attach(&func_serial_interrupt); + while (1) { + /* + * Hung up serial communication if you hit keys on console for Serial. + */ + if (LOCK()) { + if (ser.writeable()) { + ser.printf("0x%x\n", shared_resource); + } + UNLOCK(); + } + wait_ms(100); + } +}