edouard@251: (*
edouard@251:  * (c) 2011 Edouard Tisserant
edouard@251:  *
edouard@251:  * Fake semaphore support, for non preemptive implementation.
edouard@251:  *
edouard@251:  *)
edouard@251: 
edouard@251: 
edouard@251: FUNCTION_BLOCK SEMA
edouard@251:   VAR_INPUT
edouard@251:     CLAIM : BOOL;
edouard@251:     RELEASE : BOOL;
edouard@251:   END_VAR
edouard@251:   VAR_OUTPUT
edouard@251:     BUSY : BOOL;
edouard@251:   END_VAR
edouard@251:   VAR
edouard@251:     Q_INTERNAL : BOOL;
edouard@251:   END_VAR
edouard@251: 
edouard@251:   Q_INTERNAL := CLAIM OR ( Q_INTERNAL AND (NOT RELEASE));
edouard@251:   BUSY := Q_INTERNAL;
edouard@251: 
edouard@251: END_FUNCTION_BLOCK
edouard@251: