RemotoIR Libraryに、IRC Helicopter Propo の受信処理と、受信パルス幅測定処理を追加したものです。

Dependents:   SwiftPropoIR_TestProgram irRawDataDisplay spinner2 LPC1114_ir-spinne_main-propo

Fork of RemoteIR by Shinichiro Nakamura

Semaphore.h

Committer:
shintamainjp
Date:
2010-09-17
Revision:
9:dcfdac59ef74
Parent:
0:ec264f4ce158

File content as of revision 9:dcfdac59ef74:

#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 };
    volatile int s;
};

#endif