Сценарий: def и async def

Декоратор объявляет сценарий; форма функции выбирает режим исполнения.

с 0.1.0-rc.1с 0.3.0

Методы

ЭлементСигнатураДоступен сAPI 3
casecase(identifier, *, timeout_s=20, labels=(), contracts=())0.1.0-rc.1def или async def
testtest(identifier, *, timeout_s=20, labels=(), contracts=())0.3.0как case

Изменения 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

Фрагменты показывают отклонённые или нежелательные приёмы, а не рабочий рецепт.

Фрагменты для тела сценария; символы прошивки условные.

Все группыНавигация →