tests: Test hardware timers as well as software timers.

On platforms where hardware timers are available, test these in each
combination of hard/soft and one-shot/periodic in the same way as for
software timers. Where a platform supports both software (id = -1) and
hardware (id >= 0) timers, the behaviour of both is now checked.

For now, esp8266 is the only platform that supports hardware timers and
both hard and soft callbacks.

Signed-off-by: Chris Webb <chris@arachsys.com>
This commit is contained in:
Chris Webb
2025-08-25 15:25:21 +01:00
committed by Damien George
parent ccc954256f
commit ec6cdf3718
2 changed files with 61 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
import sys
try:
from machine import Timer
from time import sleep_ms
except:
print("SKIP")
raise SystemExit
if sys.platform == "esp8266":
timer = Timer(0)
else:
# Hardware timers are not implemented.
print("SKIP")
raise SystemExit
# Test both hard and soft IRQ handlers and both one-shot and periodic
# timers. We adjust period in tests/extmod/machine_soft_timer.py, so try
# adjusting freq here instead. The heap should be locked in hard callbacks
# and unlocked in soft callbacks.
def callback(t):
print("callback", mode[1], kind[1], freq, end=" ")
try:
allocate = bytearray(1)
print("unlocked")
except MemoryError:
print("locked")
modes = [(Timer.ONE_SHOT, "one-shot"), (Timer.PERIODIC, "periodic")]
kinds = [(False, "soft"), (True, "hard")]
for mode in modes:
for kind in kinds:
for freq in 50, 25:
timer.init(
mode=mode[0],
freq=freq,
hard=kind[0],
callback=callback,
)
sleep_ms(90)
timer.deinit()

View File

@@ -0,0 +1,16 @@
callback one-shot soft 50 unlocked
callback one-shot soft 25 unlocked
callback one-shot hard 50 locked
callback one-shot hard 25 locked
callback periodic soft 50 unlocked
callback periodic soft 50 unlocked
callback periodic soft 50 unlocked
callback periodic soft 50 unlocked
callback periodic soft 25 unlocked
callback periodic soft 25 unlocked
callback periodic hard 50 locked
callback periodic hard 50 locked
callback periodic hard 50 locked
callback periodic hard 50 locked
callback periodic hard 25 locked
callback periodic hard 25 locked