static void threads_suspend_resume(int prio) { int old_prio = k_thread_priority_get(k_current_get()); /* set current thread */ last_prio = prio; k_thread_priority_set(k_current_get(), last_prio); /* spawn thread with lower priority */ int spawn_prio = last_prio + 1; k_tid_t tid = k_thread_spawn(tstack, STACK_SIZE, thread_entry, NULL, NULL, NULL, spawn_prio, 0, 0); /* checkpoint: suspend current thread */ k_thread_suspend(tid); k_sleep(100); /* checkpoint: spawned thread shouldn't be executed after suspend */ assert_false(last_prio == spawn_prio, NULL); k_thread_resume(tid); k_sleep(100); /* checkpoint: spawned thread should be executed after resume */ assert_true(last_prio == spawn_prio, NULL); k_thread_abort(tid); /* restore environment */ k_thread_priority_set(k_current_get(), old_prio); }
/** * * @brief Software interrupt generating thread * * Lower priority thread that, when it starts, it waits for a semaphore. When * it gets it, released by the main thread, sets up the interrupt handler and * generates the software interrupt * * @return 0 on success */ void int_thread(void) { k_sem_take(&INTSEMA, K_FOREVER); irq_offload(latency_test_isr, NULL); k_thread_suspend(k_current_get()); }