| Title: Context and IRQ APIs | 
 |  | 
 | Description: | 
 |  | 
 | This test verifies that the kernel CPU and context APIs operate as expected. | 
 |  | 
 |  | 
 | APIs tested in this test set | 
 | ============================ | 
 |  | 
 | k_thread_create | 
 |   - start a helper thread to help with k_yield() tests | 
 |   - start a thread to test thread related functionality | 
 |  | 
 | k_yield | 
 |   - Called by a higher priority thread when there is another thread | 
 |   - Called by an equal priority thread when there is another thread | 
 |   - Called by a lower priority thread when there is another thread | 
 |  | 
 | k_current_get | 
 |   - Called from an ISR (interrupted a task) | 
 |   - Called from an ISR (interrupted a thread) | 
 |   - Called from a task | 
 |   - Called from a thread | 
 |  | 
 | k_is_in_isr | 
 |   - Called from an ISR that interrupted a task | 
 |   - Called from an ISR that interrupted a thread | 
 |   - Called from a task | 
 |   - Called from a thread | 
 |  | 
 | k_cpu_idle | 
 |   - CPU to be woken up by tick timer.  Thus, after each call, the tick count | 
 |     should have advanced by one tick. | 
 |  | 
 | irq_lock | 
 |   - 1. Count the number of calls to _tick_get_32() before a tick expires. | 
 |   - 2. Once determined, call _tick_get_32() many more times than that | 
 |        with interrupts locked.  Check that the tick count remains unchanged. | 
 |  | 
 | irq_unlock | 
 |   - Continuation irq_lock: unlock interrupts, loop and verify the tick | 
 |     count changes. | 
 |  | 
 | irq_offload | 
 |   - Used when triggering an ISR to perform ISR context work. | 
 |  | 
 | irq_enable | 
 | irq_disable | 
 |   - Use these routines to disable and enable timer interrupts so that they can | 
 |     be tested in the same way as irq_lock() and irq_unlock(). | 
 |  | 
 | --------------------------------------------------------------------------- | 
 |  | 
 | Building and Running Project: | 
 |  | 
 | This project outputs to the console.  It can be built and executed | 
 | on QEMU as follows: | 
 |  | 
 |     make run | 
 |  | 
 | --------------------------------------------------------------------------- | 
 |  | 
 | Troubleshooting: | 
 |  | 
 | Problems caused by out-dated project information can be addressed by | 
 | issuing one of the following commands then rebuilding the project: | 
 |  | 
 |     make clean          # discard results of previous builds | 
 |                         # but keep existing configuration info | 
 | or | 
 |     make pristine       # discard results of previous builds | 
 |                         # and restore pre-defined configuration info | 
 |  | 
 | --------------------------------------------------------------------------- | 
 |  | 
 | Sample Output: | 
 |  | 
 | tc_start() - Test kernel CPU and thread routines | 
 | Initializing kernel objects | 
 | Testing k_cpu_idle() | 
 | Testing interrupt locking and unlocking | 
 | Testing irq_disable() and irq_enable() | 
 | Testing some kernel context routines | 
 | Testing k_current_get() from an ISR and task | 
 | Testing k_is_in_isr() from an ISR | 
 | Testing k_is_in_isr() from a preemtible thread | 
 | Spawning a thread from a task | 
 | Thread to test k_current_get() and k_is_in_isr() | 
 | Thread to test k_yield() | 
 | Testing k_busy_wait() | 
 | Thread busy waiting for 20000 usecs | 
 | Thread busy waiting completed | 
 | Testing k_sleep() | 
 |  thread sleeping for 50 milliseconds | 
 |  thread back from sleep | 
 | Testing k_thread_create() without cancellation | 
 |  thread (q order: 2, t/o: 500) is running | 
 |  got thread (q order: 2, t/o: 500) as expected | 
 |  thread (q order: 3, t/o: 750) is running | 
 |  got thread (q order: 3, t/o: 750) as expected | 
 |  thread (q order: 0, t/o: 1000) is running | 
 |  got thread (q order: 0, t/o: 1000) as expected | 
 |  thread (q order: 6, t/o: 1250) is running | 
 |  got thread (q order: 6, t/o: 1250) as expected | 
 |  thread (q order: 1, t/o: 1500) is running | 
 |  got thread (q order: 1, t/o: 1500) as expected | 
 |  thread (q order: 4, t/o: 1750) is running | 
 |  got thread (q order: 4, t/o: 1750) as expected | 
 |  thread (q order: 5, t/o: 2000) is running | 
 |  got thread (q order: 5, t/o: 2000) as expected | 
 | Testing k_thread_create() with cancellations | 
 |  cancelling [q order: 0, t/o: 1000, t/o order: 0] | 
 |  thread (q order: 3, t/o: 750) is running | 
 |  got (q order: 3, t/o: 750, t/o order 1) as expected | 
 |  thread (q order: 0, t/o: 1000) is running | 
 |  got (q order: 0, t/o: 1000, t/o order 2) as expected | 
 |  cancelling [q order: 3, t/o: 750, t/o order: 3] | 
 |  cancelling [q order: 4, t/o: 1750, t/o order: 4] | 
 |  thread (q order: 4, t/o: 1750) is running | 
 |  got (q order: 4, t/o: 1750, t/o order 5) as expected | 
 |  cancelling [q order: 6, t/o: 1250, t/o order: 6] | 
 | PASS - main. | 
 | =================================================================== | 
 | PROJECT EXECUTION SUCCESSFUL |