Сценарий: def и async def
Декоратор объявляет сценарий; форма функции выбирает режим исполнения.
с 0.1.0-rc.1с 0.3.0
Методы
Изменения API 3 (0.5.0)
def сохраняет синхронную форму. async def — когда цель должна работать без остановки.
Правильно
Синхронный сценарий для конфигурации и ветвлений, асинхронный — для живого окна с halt в finally.
from stm32_gdbtest import case
@case("HW_BOOT", timeout_s=30, labels=("boot",))
def boot(t):
t.reach("main")
t.check("SystemCoreClock", t.read("SystemCoreClock"), 16_000_000)
@case("HW_LIVE", timeout_s=20)
async def live(t):
await t.reach("app_loop")
t.resume(sync=False)
try:
waited = await t.wait(timeout=0.2)
t.check("still running", waited["outcome"], "timeout")
finally:
await t.halt(timeout=2)Не рекомендуется
Навигация без await в async def: следующая операция с целью будет отклонена. Переводить работающий def в async без причины не нужно.
@case("HW_LIVE")
async def live(t):
t.reach("app_loop") # no await
t.resume(sync=False) # refused: unawaited_operationФрагменты показывают отклонённые или нежелательные приёмы, а не рабочий рецепт.
Фрагменты для тела сценария; символы прошивки условные.