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 fiber to help with k_yield() tests
- start a fiber to test fiber related functionality
k_yield
- Called by a higher priority fiber when there is another fiber
- Called by an equal priority fiber when there is another fiber
- Called by a lower priority fiber when there is another fiber
k_current_get
- Called from an ISR (interrupted a task)
- Called from an ISR (interrupted a fiber)
- Called from a task
- Called from a fiber
k_is_in_isr
- Called from an ISR that interrupted a task
- Called from an ISR that interrupted a fiber
- Called from a task
- Called from a fiber
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