Remove RETAIN qualifier for F_TRIG and R_TRIG 'M' variable. This is not following standard, and implicitely consumes a lot of RETAIN memory. User can explicitely qualify R_TRIG of F_TRIG instance as RETAIN if needed.
(*
* (c) 2011 Edouard Tisserant
*
* Fake semaphore support, for non preemptive implementation.
*
*)
FUNCTION_BLOCK SEMA
VAR_INPUT
CLAIM : BOOL;
RELEASE : BOOL;
END_VAR
VAR_OUTPUT
BUSY : BOOL;
END_VAR
VAR
Q_INTERNAL : BOOL;
END_VAR
Q_INTERNAL := CLAIM OR ( Q_INTERNAL AND (NOT RELEASE));
BUSY := Q_INTERNAL;
END_FUNCTION_BLOCK