Files
ESPC3-wireless/components/system/test/os_test_thread_yield.c
2024-03-28 12:19:52 +08:00

111 lines
2.7 KiB
C
Executable File

#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();
}