1Title: Context and IRQ APIs 2 3Description: 4 5This test verifies that the kernel CPU and context APIs operate as expected. 6 7 8APIs tested in this test set 9============================ 10 11k_thread_create 12 - start a helper thread to help with k_yield() tests 13 - start a thread to test thread related functionality 14 15k_yield 16 - Called by a higher priority thread when there is another thread 17 - Called by an equal priority thread when there is another thread 18 - Called by a lower priority thread when there is another thread 19 20k_current_get 21 - Called from an ISR (interrupted a task) 22 - Called from an ISR (interrupted a thread) 23 - Called from a task 24 - Called from a thread 25 26k_is_in_isr 27 - Called from an ISR that interrupted a task 28 - Called from an ISR that interrupted a thread 29 - Called from a task 30 - Called from a thread 31 32k_cpu_idle 33 - Tickless Kernel: CPU to be woken up by a kernel timer (k_timer) 34 - Non-tickless kernel: 35 CPU to be woken up by tick timer. Thus, after each call, the tick count 36 should have advanced by one tick. 37 38irq_lock 39 - 1. Count the number of calls to _tick_get_32() before a tick expires. 40 - 2. Once determined, call _tick_get_32() many more times than that 41 with interrupts locked. Check that the tick count remains unchanged. 42 43irq_unlock 44 - Continuation irq_lock: unlock interrupts, loop and verify the tick 45 count changes. 46 47irq_offload 48 - Used when triggering an ISR to perform ISR context work. 49 50irq_enable 51irq_disable 52 - Use these routines to disable and enable timer interrupts so that they can 53 be tested in the same way as irq_lock() and irq_unlock(). 54 55--------------------------------------------------------------------------- 56 57Building and Running Project: 58 59This project outputs to the console. It can be built and executed 60on QEMU as follows: 61 62 make run 63 64--------------------------------------------------------------------------- 65 66Troubleshooting: 67 68Problems caused by out-dated project information can be addressed by 69issuing one of the following commands then rebuilding the project: 70 71 make clean # discard results of previous builds 72 # but keep existing configuration info 73or 74 make pristine # discard results of previous builds 75 # and restore pre-defined configuration info 76 77--------------------------------------------------------------------------- 78 79Sample Output: 80 81tc_start() - Test kernel CPU and thread routines 82Initializing kernel objects 83Testing k_cpu_idle() 84Testing interrupt locking and unlocking 85Testing irq_disable() and irq_enable() 86Testing some kernel context routines 87Testing k_current_get() from an ISR and task 88Testing k_is_in_isr() from an ISR 89Testing k_is_in_isr() from a preemptible thread 90Spawning a thread from a task 91Thread to test k_current_get() and k_is_in_isr() 92Thread to test k_yield() 93Testing k_busy_wait() 94Thread busy waiting for 20000 usecs 95Thread busy waiting completed 96Testing k_sleep() 97 thread sleeping for 50 milliseconds 98 thread back from sleep 99Testing k_thread_create() without cancellation 100 thread (q order: 2, t/o: 500) is running 101 got thread (q order: 2, t/o: 500) as expected 102 thread (q order: 3, t/o: 750) is running 103 got thread (q order: 3, t/o: 750) as expected 104 thread (q order: 0, t/o: 1000) is running 105 got thread (q order: 0, t/o: 1000) as expected 106 thread (q order: 6, t/o: 1250) is running 107 got thread (q order: 6, t/o: 1250) as expected 108 thread (q order: 1, t/o: 1500) is running 109 got thread (q order: 1, t/o: 1500) as expected 110 thread (q order: 4, t/o: 1750) is running 111 got thread (q order: 4, t/o: 1750) as expected 112 thread (q order: 5, t/o: 2000) is running 113 got thread (q order: 5, t/o: 2000) as expected 114Testing k_thread_create() with cancellations 115 cancelling [q order: 0, t/o: 1000, t/o order: 0] 116 thread (q order: 3, t/o: 750) is running 117 got (q order: 3, t/o: 750, t/o order 1) as expected 118 thread (q order: 0, t/o: 1000) is running 119 got (q order: 0, t/o: 1000, t/o order 2) as expected 120 cancelling [q order: 3, t/o: 750, t/o order: 3] 121 cancelling [q order: 4, t/o: 1750, t/o order: 4] 122 thread (q order: 4, t/o: 1750) is running 123 got (q order: 4, t/o: 1750, t/o order 5) as expected 124 cancelling [q order: 6, t/o: 1250, t/o order: 6] 125PASS - main. 126=================================================================== 127PROJECT EXECUTION SUCCESSFUL 128