Counting Semaphore of the QXK preemptive kernel.
More...
#include "qxk.hpp"
Counting Semaphore of the QXK preemptive kernel.
- Details
QP::QXSemaphore is a blocking mechanism intended primarily for signaling extended threads. The semaphore is initialized with the maximum count (see QXSemaphore::init()), which allows you to create a binary semaphore (when the maximum count is 1) and counting semaphore when the maximum count is > 1.
- Usage
The following example illustrates how to instantiate and use the semaphore in your application.
. . .
1U);
for (;;) {
. . .
}
}
Counting Semaphore of the QXK preemptive kernel.
void init(std::uint_fast8_t const count, std::uint_fast8_t const max_count=0xFFU) noexcept
bool wait(QTimeEvtCtr const nTicks=QXTHREAD_NO_TIMEOUT) noexcept
eXtended (blocking) thread of the QXK preemptive kernel
Definition at line 142 of file qxk.hpp.
◆ init()
void QP::QXSemaphore::init |
( |
std::uint_fast8_t const | count, |
|
|
std::uint_fast8_t const | max_count = 0xFFU ) |
|
noexcept |
Initialize the counting semaphore
- Details
Initializes a semaphore with the specified count and maximum count. If the semaphore is used for resource sharing, both the initial count and maximum count should be set to the number of identical resources guarded by the semaphore. If the semaphore is used as a signaling mechanism, the initial count should set to 0 and maximum count to 1 (binary semaphore).
- Parameters
-
[in] | count | initial value of the semaphore counter |
[in] | max_count | maximum value of the semaphore counter. The purpose of the max_count is to limit the counter so that the semaphore cannot unblock more times than the maximum. |
- Precondition
qxk_sema:100
- count must not exceed max_count
- max_count must not be zero
- max_count must not exceed 0xFFU (dynamic range of uint8_t)
- Note
- QXSemaphore::init() must be called before the semaphore can be used (signaled or waited on).
- Usage
The following example illustrates how to instantiate and use the semaphore in your application.
. . .
1U);
for (;;) {
. . .
}
}
*/
Definition at line 76 of file qxk_sema.cpp.
◆ wait()
◆ tryWait()
bool QP::QXSemaphore::tryWait |
( |
| ) |
|
|
noexcept |
Try wait on the semaphore (non-blocking)
- Details
This function checks if the semaphore counter is greater than 0, in which case the counter is decremented.
- Returns
- 'true' if the semaphore was taken and 'false' if not taken (would BLOCK).
- Precondition
qxk_sema:300
- the semaphore must be initialized
- Note
- This function can be called from any context, including ISRs and basic threads (active objects).
Definition at line 180 of file qxk_sema.cpp.
◆ signal()
bool QP::QXSemaphore::signal |
( |
| ) |
|
|
noexcept |
Signal (unblock) the semaphore
- Details
If the semaphore counter value is 0 or more, it is incremented, and this function returns to its caller. If the extended threads are waiting for the semaphore to be signaled, QXSemaphore_signal() removes the highest-priority thread waiting for the semaphore from the waiting list and makes this thread ready-to-run. The QXK scheduler is then called to determine if the awakened thread is now the highest-priority thread that is ready-to-run.
- Parameters
-
[in,out] | me | current instance pointer (see oop) |
- Returns
- 'true' when the semaphore signaled and 'false' when the semaphore count exceeded the maximum.
- Precondition
qxk_sema:400
- the semaphore must be initialized
- Note
- A semaphore can be signaled from many places, including from ISRs, basic threads (AOs), and extended threads.
Definition at line 221 of file qxk_sema.cpp.
◆ m_waitSet
QPSet QP::QXSemaphore::m_waitSet |
|
private |
Set of extended threads waiting on this semaphore
Definition at line 144 of file qxk.hpp.
◆ m_count
std::uint8_t QP::QXSemaphore::m_count |
|
private |
Semaphore up-down counter
Definition at line 145 of file qxk.hpp.
◆ m_max_count
std::uint8_t QP::QXSemaphore::m_max_count |
|
private |
Maximum value of the semaphore counter (e.g., 1 for binary semaphore)
Definition at line 146 of file qxk.hpp.
The documentation for this class was generated from the following files: