extmod/uasyncio: Add clear method to ThreadSafeFlag.

This is useful in situations where the ThreadSafeFlag is reused and needs
to be cleared of any previous, unwanted event.

For example, clear the flag at the start of an operation, trigger the
operation (eg an I2C write), then (a)wait for an external event to set the
flag (eg a pin IRQ).  Further events may trigger the flag again but these
are unwanted and should be cleared before the next cycle starts.
This commit is contained in:
Ned Konz
2021-09-01 10:48:15 -07:00
committed by Damien George
parent cf90e24335
commit 5543b2a9cc
4 changed files with 41 additions and 2 deletions

View File

@@ -75,5 +75,25 @@ async def main():
print("wait task")
await t
# Flag set, cleared, and set again.
print("----")
print("set event")
flag.set()
print("yield")
await asyncio.sleep(0)
print("clear event")
flag.clear()
print("yield")
await asyncio.sleep(0)
t = asyncio.create_task(task(4, flag))
print("yield")
await asyncio.sleep(0)
print("set event")
flag.set()
print("yield")
await asyncio.sleep(0)
print("wait task")
await t
asyncio.run(main())

View File

@@ -19,3 +19,14 @@ yield
task 3
task 3 done
wait task
----
set event
yield
clear event
yield
yield
task 4
set event
yield
wait task
task 4 done