Fork of LCD-Window which works with Enhanced TextLCD from Wim
Fork of LcdWindow by
semaphore.cpp
- Committer:
- charly
- Date:
- 2016-01-13
- Revision:
- 13:99b500b05716
- Parent:
- 10:d40c70908bf0
File content as of revision 13:99b500b05716:
/** * code from Igor Skochinsky * taken from http://mbed.org/forum/mbed/post/799/ */ #include "semaphore.h" Semaphore::Semaphore(): s(SemFree) {}; bool Semaphore::_abort=false; bool Semaphore::take(bool block) { if (_abort) block=false; int oldval; /* #if defined(TARGET_LPC1768) // on Cortex-M3 we can use ldrex/strex do { // read the semaphore value oldval = __ldrex(&s); // loop again if it is locked and we are blocking // or setting it with strex failed } while ( (block && oldval == SemTaken) || __strex(SemTaken, &s) != 0 ); if ( !block ) __clrex(); // clear exclusive lock set by ldrex #else // on arm7 there's only swp do { // swp sets the pointed data to the given value and returns the previous one oldval = __swp(SemTaken, &s); // if blocking, loop until the previous value becomes 0 // which would mean we have successfully taken the lock } while (block && oldval == SemTaken); //#endif return oldval == SemFree; */ return true; } // release the semaphore void Semaphore::release() { s = SemFree; }