Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite3a6c84

Browse files
committed
tests,rp2: Add a test case for light sleeping from CPU1.
Not currently passing.This work was funded through GitHub Sponsors.Signed-off-by: Angus Gratton <angus@redyak.com.au>
1 parenta245e85 commite3a6c84

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Verify that a thread running on CPU1 can go to lightsleep
2+
# and wake up in the expected timeframe
3+
import_thread
4+
importtime
5+
importunittest
6+
frommachineimportlightsleep,Pin
7+
8+
N_SLEEPS=5
9+
SLEEP_MS=250
10+
11+
IDEAL_RUNTIME=N_SLEEPS*SLEEP_MS
12+
MAX_RUNTIME= (N_SLEEPS+1)*SLEEP_MS
13+
MAX_DELTA=20
14+
15+
16+
classLightSleepInThread(unittest.TestCase):
17+
defthread_entry(self,is_thread=True):
18+
for_inrange(N_SLEEPS):
19+
lightsleep(SLEEP_MS)
20+
ifis_thread:
21+
self.thread_done=True
22+
23+
defelapsed_ms(self):
24+
returntime.ticks_diff(time.ticks_ms(),self.t0)
25+
26+
defsetUp(self):
27+
self.thread_done=False
28+
self.t0=time.ticks_ms()
29+
30+
deftest_cpu0_busy(self):
31+
_thread.start_new_thread(self.thread_entry, ())
32+
# CPU0 is busy-waiting not asleep itself
33+
whilenotself.thread_done:
34+
self.assertLessEqual(self.elapsed_ms(),MAX_RUNTIME)
35+
self.assertAlmostEqual(self.elapsed_ms(),IDEAL_RUNTIME,delta=MAX_DELTA)
36+
37+
deftest_cpu0_sleeping(self):
38+
_thread.start_new_thread(self.thread_entry, ())
39+
time.sleep_ms(MAX_RUNTIME)
40+
self.assertTrue(self.thread_done)
41+
self.assertAlmostEqual(self.elapsed_ms(),MAX_RUNTIME,delta=MAX_DELTA)
42+
43+
deftest_cpu0_also_lightsleep(self):
44+
_thread.start_new_thread(self.thread_entry, ())
45+
time.sleep(0.050)# account for any delay in starting the thread
46+
self.thread_entry(False)# does the same lightsleep loop, doesn't set the done flag
47+
self.assertTrue(self.thread_done)
48+
# only one thread can actually be in lightsleep at a time to avoid races, so the total
49+
# runtime is doubled by doing it on both CPUs
50+
self.assertAlmostEqual(self.elapsed_ms(),IDEAL_RUNTIME*2,delta=IDEAL_RUNTIME)
51+
52+
53+
if__name__=="__main__":
54+
unittest.main()

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp