Title: Semaphore APIs
Description:
This test verifies that the nanokernel semaphore APIs operate as expected.
---------------------------------------------------------------------------
Building and Running Project:
This nanokernel project outputs to the console. It can be built and executed
on QEMU as follows:
make qemu
---------------------------------------------------------------------------
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 Nanokernel Semaphores
Nano objects initialized
Giving and taking a semaphore in a task (non-blocking)
Giving and taking a semaphore in an ISR (non-blocking)
Giving and taking a semaphore in a fiber (non-blocking)
Semaphore from the task woke the fiber
Semaphore from the fiber woke the task
Semaphore from the ISR woke the task.
First pass
multiple-waiter fiber 0 trying to get semaphore...
multiple-waiter fiber 1 trying to get semaphore...
multiple-waiter fiber 2 trying to get semaphore...
multiple-waiter fiber 0 acquired semaphore, sending reply
multiple-waiter fiber 1 acquired semaphore, sending reply
multiple-waiter fiber 2 acquired semaphore, sending reply
Task took multi-waiter reply semaphore 3 times, as expected.
Second pass
multiple-waiter fiber 0 trying to get semaphore...
multiple-waiter fiber 1 trying to get semaphore...
multiple-waiter fiber 2 trying to get semaphore...
multiple-waiter fiber 0 acquired semaphore, sending reply
multiple-waiter fiber 1 acquired semaphore, sending reply
multiple-waiter fiber 2 acquired semaphore, sending reply
Task took multi-waiter reply semaphore 3 times, as expected.
test nano_task_sem_take() with timeout > 0
nano_task_sem_take() timed out as expected
nano_task_sem_take() got sem in time, as expected
testing timeouts of 5 fibers on same sem
got fiber (q order: 2, t/o: 10, sem: 200001c8) as expected
got fiber (q order: 3, t/o: 15, sem: 200001c8) as expected
got fiber (q order: 0, t/o: 20, sem: 200001c8) as expected
got fiber (q order: 4, t/o: 25, sem: 200001c8) as expected
got fiber (q order: 1, t/o: 30, sem: 200001c8) as expected
testing timeouts of 9 fibers on different sems
got fiber (q order: 0, t/o: 10, sem: 200001d4) as expected
got fiber (q order: 5, t/o: 15, sem: 200001c8) as expected
got fiber (q order: 7, t/o: 20, sem: 200001c8) as expected
got fiber (q order: 1, t/o: 25, sem: 200001c8) as expected
got fiber (q order: 8, t/o: 30, sem: 200001d4) as expected
got fiber (q order: 2, t/o: 35, sem: 200001c8) as expected
got fiber (q order: 6, t/o: 40, sem: 200001c8) as expected
got fiber (q order: 4, t/o: 45, sem: 200001d4) as expected
got fiber (q order: 3, t/o: 50, sem: 200001d4) as expected
testing 5 fibers timing out, but obtaining the sem in time
(except the last one, which times out)
got fiber (q order: 0, t/o: 20, sem: 200001c8) as expected
got fiber (q order: 1, t/o: 30, sem: 200001c8) as expected
got fiber (q order: 2, t/o: 10, sem: 200001c8) as expected
got fiber (q order: 3, t/o: 15, sem: 200001c8) as expected
got fiber (q order: 4, t/o: 25, sem: 200001c8) as expected
===================================================================
PASS - main.
===================================================================
PROJECT EXECUTION SUCCESSFUL