zephyr/tests/kernel/context
Carles Cufi e83a13aabf kconfig: Rename the TEST_EXTRA stack size option to align with the rest
All stack sizes should end with STACK_SIZE.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2022-02-22 08:23:05 -05:00
..
src kconfig: Rename the TEST_EXTRA stack size option to align with the rest 2022-02-22 08:23:05 -05:00
CMakeLists.txt
README.txt
prj.conf kconfig: Rename the ZTEST stack size option to align with the rest 2022-02-22 08:23:05 -05:00
testcase.yaml tests: added kernel tests for arm arch with linker script generator 2021-08-30 08:54:23 -04:00

README.txt

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
  - Tickless Kernel: CPU to be woken up by a kernel timer (k_timer)
  - Non-tickless kernel:
    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