micropython-samples/mutex/mutex_test.py

33 wiersze
950 B
Python

import pyb, mutex
mutex = mutex.Mutex()
def update(t): # Interrupt handler may not be able to acquire the lock
global var1, var2 # if main loop has it
if mutex.test(): # critical section start
var1 += 1
pyb.udelay(200)
var2 += 1
mutex.release() # critical section end
def main():
global var1, var2
var1, var2 = 0, 0
t2 = pyb.Timer(2, freq = 995, callback = update)
t4 = pyb.Timer(4, freq = 1000, callback = update)
for x in range(1000000):
with mutex: # critical section start
a = var1
pyb.udelay(200)
b = var2
result = a == b # critical section end
if not result:
print('Fail after {} iterations'.format(x))
break
pyb.delay(1)
if x % 1000 == 0:
print(x)
t2.deinit()
t4.deinit()
print(var1, var2)