Shinichiro Nakamura
/
TestProgramForBugTopic1074
This is for http://mbed.org/forum/bugs-suggestions/topic/1074/
Revision 0:49c0ef6111e6, committed 2010-09-08
- Comitter:
- shintamainjp
- Date:
- Wed Sep 08 12:53:38 2010 +0000
- Child:
- 1:70466efca68e
- Commit message:
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Semaphore.h Wed Sep 08 12:53:38 2010 +0000 @@ -0,0 +1,32 @@ +#ifndef _SEMAPHORE_H_ +#define _SEMAPHORE_H_ + +/* + * http://mbed.org/forum/mbed/topic/181/#comment-799 + */ + +class Semaphore { +public: + Semaphore(): s(SemFree) {} + + bool take(bool block = true) { + int oldval; + do { + oldval = __ldrex(&s); + } while ((block && oldval == SemTaken) || __strex(SemTaken, &s) != 0); + if (!block) { + __clrex(); + } + return (oldval == SemFree); + } + + void release() { + s = SemFree; + } + +private: + enum { SemFree, SemTaken }; + int s; +}; + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Sep 08 12:53:38 2010 +0000 @@ -0,0 +1,52 @@ +/** + * 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); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Sep 08 12:53:38 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e