125 IEC_%(IECtype)s __%(name)s_wbuffer; |
125 IEC_%(IECtype)s __%(name)s_wbuffer; |
126 long __%(name)s_rlock = 0; |
126 long __%(name)s_rlock = 0; |
127 long __%(name)s_wlock = 0; |
127 long __%(name)s_wlock = 0; |
128 int __%(name)s_wbuffer_written = 0; |
128 int __%(name)s_wbuffer_written = 0; |
129 void __SafeGetPLCGlob_%(name)s(IEC_%(IECtype)s *pvalue){ |
129 void __SafeGetPLCGlob_%(name)s(IEC_%(IECtype)s *pvalue){ |
130 IEC_%(IECtype)s res; |
|
131 while(AtomicCompareExchange(&__%(name)s_rlock, 0, 1)); |
130 while(AtomicCompareExchange(&__%(name)s_rlock, 0, 1)); |
132 *pvalue = __%(name)s_rbuffer; |
131 *pvalue = __%(name)s_rbuffer; |
133 AtomicCompareExchange((long*)&__%(name)s_rlock, 1, 0); |
132 AtomicCompareExchange((long*)&__%(name)s_rlock, 1, 0); |
134 } |
133 } |
135 __SafeSetPLCGlob_%(name)s(IEC_%(IECtype)s *value){ |
134 void __SafeSetPLCGlob_%(name)s(IEC_%(IECtype)s *value){ |
136 while(AtomicCompareExchange(&__%(name)s_wlock, 0, 1)); |
135 while(AtomicCompareExchange(&__%(name)s_wlock, 0, 1)); |
137 __%(name)s_wbuffer = *value; |
136 __%(name)s_wbuffer = *value; |
138 __%(name)s_wbuffer_written = 1; |
137 __%(name)s_wbuffer_written = 1; |
139 AtomicCompareExchange((long*)&__%(name)s_wlock, 1, 0); |
138 AtomicCompareExchange((long*)&__%(name)s_wlock, 1, 0); |
140 } |
139 } |