Loading...
/* * Copyright (c) 2016 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ /** * @addtogroup t_threads_lifecycle * @{ * @defgroup t_threads_spawn test_thread_spawn * @brief TestPurpose: verify basic thread spawn relevant apis * @} */ #include <ztest.h> #define STACK_SIZE (256 + CONFIG_TEST_EXTRA_STACKSIZE) static K_THREAD_STACK_DEFINE(tstack, STACK_SIZE); static struct k_thread tdata; static char tp1[8]; static int tp2 = 100; static struct k_sema *tp3; static int spawn_prio; static void thread_entry_params(void *p1, void *p2, void *p3) { /* checkpoint: check parameter 1, 2, 3 */ zassert_equal((char *)p1, tp1, NULL); zassert_equal((int)p2, tp2, NULL); zassert_equal((struct k_sema *)p3, tp3, NULL); } static void thread_entry_priority(void *p1, void *p2, void *p3) { /* checkpoint: check priority */ zassert_equal(k_thread_priority_get(k_current_get()), spawn_prio, NULL); } static void thread_entry_delay(void *p1, void *p2, void *p3) { tp2 = 100; } /*test cases*/ void test_threads_spawn_params(void) { k_tid_t tid = k_thread_create(&tdata, tstack, STACK_SIZE, thread_entry_params, (void *)tp1, (void *)tp2, (void *)tp3, 0, 0, 0); k_sleep(100); k_thread_abort(tid); } void test_threads_spawn_priority(void) { /* spawn thread with higher priority */ spawn_prio = k_thread_priority_get(k_current_get()) - 1; k_tid_t tid = k_thread_create(&tdata, tstack, STACK_SIZE, thread_entry_priority, NULL, NULL, NULL, spawn_prio, 0, 0); k_sleep(100); k_thread_abort(tid); } void test_threads_spawn_delay(void) { /* spawn thread with higher priority */ tp2 = 10; k_tid_t tid = k_thread_create(&tdata, tstack, STACK_SIZE, thread_entry_delay, NULL, NULL, NULL, 0, 0, 120); /* 100 < 120 ensure spawn thread not start */ k_sleep(100); /* checkpoint: check spawn thread not execute */ zassert_true(tp2 == 10, NULL); /* checkpoint: check spawn thread executed */ k_sleep(100); zassert_true(tp2 == 100, NULL); k_thread_abort(tid); } |