| /* |
| * 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 char __noinit __stack tstack[STACK_SIZE]; |
| |
| 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 */ |
| assert_equal((char *)p1, tp1, NULL); |
| assert_equal((int)p2, tp2, NULL); |
| assert_equal((struct k_sema *)p3, tp3, NULL); |
| } |
| |
| static void thread_entry_priority(void *p1, void *p2, void *p3) |
| { |
| /* checkpoint: check priority */ |
| assert_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_spawn(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_spawn(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_spawn(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 */ |
| assert_true(tp2 == 10, NULL); |
| /* checkpoint: check spawn thread executed */ |
| k_sleep(100); |
| assert_true(tp2 == 100, NULL); |
| k_thread_abort(tid); |
| } |