This is for http://mbed.org/forum/bugs-suggestions/topic/1074/

Dependencies:   mbed

Committer:
shintamainjp
Date:
Thu Sep 09 10:21:06 2010 +0000
Revision:
1:70466efca68e
Parent:
0:49c0ef6111e6

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }