参考代码
This commit is contained in:
110
components/system/test/os_test_thread_yield.c
Executable file
110
components/system/test/os_test_thread_yield.c
Executable file
@@ -0,0 +1,110 @@
|
||||
#include "os_test.h"
|
||||
|
||||
static os_thread_t thread_1;
|
||||
static os_thread_t thread_2;
|
||||
static os_thread_t thread_3;
|
||||
static os_thread_t thread_4;
|
||||
static vuint count1 = 0;
|
||||
static vuint count2 = 0;
|
||||
static vuint count3 = 0;
|
||||
static vuint count4 = 0;
|
||||
|
||||
#define _TEST_TIMES 2000
|
||||
|
||||
static void _test_os_t1(void *arg)
|
||||
{
|
||||
count1 = 0;
|
||||
while (1)
|
||||
{
|
||||
if (count1++ % _TEST_TIMES == 0)
|
||||
{
|
||||
SYS_LOG_DBG("%d", count1 / _TEST_TIMES);
|
||||
if (count1 >= (_TEST_TIMES * 10))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
os_thread_yield();
|
||||
}
|
||||
}
|
||||
static void _test_os_t2(void *arg)
|
||||
{
|
||||
count2 = 0;
|
||||
while (1)
|
||||
{
|
||||
if (count2++ % _TEST_TIMES == 0)
|
||||
{
|
||||
SYS_LOG_DBG("%d", count2 / _TEST_TIMES);
|
||||
if (count2 >= (_TEST_TIMES * 10))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
os_thread_yield();
|
||||
}
|
||||
}
|
||||
|
||||
static void _test_os_t3(void *arg)
|
||||
{
|
||||
count3 = 0;
|
||||
while (1)
|
||||
{
|
||||
if (count3++ % _TEST_TIMES == 0)
|
||||
{
|
||||
SYS_LOG_DBG("%d", count3 / _TEST_TIMES);
|
||||
if (count3 >= (_TEST_TIMES * 10))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
os_thread_suspend(NULL);
|
||||
SYS_ASSERT_FALSE(count3 != count4, "count3 = %d, count4 = %d, suspend fail", count3, count4);
|
||||
}
|
||||
}
|
||||
static void _test_os_t4(void *arg)
|
||||
{
|
||||
count4 = 0;
|
||||
while (1)
|
||||
{
|
||||
if (count4++ % _TEST_TIMES == 0)
|
||||
{
|
||||
SYS_LOG_DBG("%d", count4 / _TEST_TIMES);
|
||||
if (count4 >= (_TEST_TIMES * 10))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
os_thread_resume(&thread_3);
|
||||
SYS_ASSERT_FALSE(count4 + 1 != count3, "count3 = %d, count4 = %d, thread 3 dead!", count3, count4);
|
||||
}
|
||||
}
|
||||
|
||||
void os_test_yield(uint TestTime)
|
||||
{
|
||||
uint start_tick, test_tick, time_nS;
|
||||
SYS_LOG_INF("");
|
||||
|
||||
os_scheduler_suspend();
|
||||
|
||||
os_test_create_thread(&thread_1, _test_os_t1, "task01-4", 4);
|
||||
os_test_create_thread(&thread_2, _test_os_t2, "task02-4", 4);
|
||||
|
||||
start_tick = os_get_sys_ticks();
|
||||
os_scheduler_resume();
|
||||
test_tick = os_get_sys_ticks();
|
||||
time_nS = (test_tick - start_tick) * 1000000 / (count1 + count2);
|
||||
SYS_LOG_DBG("平均时间: %d.%03d uS", time_nS / 1000, time_nS % 1000);
|
||||
|
||||
os_scheduler_suspend();
|
||||
|
||||
os_test_create_thread(&thread_3, _test_os_t3, "task03-3", 3);
|
||||
os_test_create_thread(&thread_4, _test_os_t4, "task04-2", 2);
|
||||
|
||||
start_tick = os_get_sys_ticks();
|
||||
os_scheduler_resume();
|
||||
test_tick = os_get_sys_ticks();
|
||||
time_nS = (test_tick - start_tick) * 1000000 / (count3 + count4);
|
||||
SYS_LOG_DBG("平均时间: %d.%03d uS", time_nS / 1000, time_nS % 1000);
|
||||
|
||||
os_sys_print_info();
|
||||
}
|
||||
Reference in New Issue
Block a user