QP/C 8.1.1
Real-Time Event Framework
Loading...
Searching...
No Matches
QK Class Reference

QK preemptive non-blocking kernel (QK namespace emulated as a "class" in C. More...

#include <qk.h>

Static Public Member Functions

QSchedStatus QK_schedLock (uint8_t const ceiling)
 QK selective scheduler lock.
void QK_schedUnlock (QSchedStatus const prevCeil)
 QK selective scheduler unlock.
void QK_onIdle (void)
 QK idle callback (customized in BSPs for QK).

Static Private Member Functions

uint_fast8_t QK_sched_ (void)
 QK scheduler finds the highest-priority AO ready to run.
uint_fast8_t QK_sched_act_ (QActive const *const act, uint_fast8_t const pthre_in)
 QK internal helper function to determine whether activation is needed.
void QK_activate_ (void)
 QK activator activates the next active object. The activated AO preempts the currently executing AOs.

Private Attributes

QPSet readySet
uint8_t actPrio
uint8_t nextPrio
uint8_t actThre
uint8_t lockCeil
uint8_t intNest
QK QK_priv_

Detailed Description

QK preemptive non-blocking kernel (QK namespace emulated as a "class" in C.

See also
Preemptive Non-Blocking Kernel

Definition at line 38 of file qk.h.

Member Function Documentation

◆ QK_sched_()

uint_fast8_t QK_sched_ ( void )
staticprivate

QK scheduler finds the highest-priority AO ready to run.

Details
The QK scheduler finds out the priority of the highest-priority AO that (1) has events to process and (2) has priority that is above the current priority.

Returns
The QF-priority of the next active object to activate, or zero if no activation of AO is needed.
Attention
QK_sched_() must be always called with interrupts disabled and returns with interrupts disabled.

Definition at line 113 of file qk.c.

◆ QK_sched_act_()

uint_fast8_t QK_sched_act_ ( QActive const *const act,
uint_fast8_t const pthre_in )
staticprivate

QK internal helper function to determine whether activation is needed.

Details

Parameters
[in]actcurrently executing Active Object
[in]pthre_incurrent priority threshold
Returns
the priority of Active Object to activate or 0 if no activation needed
Attention
QK_act_() must be always called with interrupts disabled and returns with interrupts disabled.

Definition at line 141 of file qk.c.

◆ QK_activate_()

void QK_activate_ ( void )
staticprivate

QK activator activates the next active object. The activated AO preempts the currently executing AOs.

Details
QK_activate_() activates ready-to run AOs that are above the initial preemption-threshold.

Attention
QK_activate_() must be always called with interrupts disabled and returns with interrupts disabled.

Definition at line 177 of file qk.c.

◆ QK_schedLock()

QSchedStatus QK_schedLock ( uint8_t const ceiling)
static

QK selective scheduler lock.

Details
This function locks the QK scheduler to the specified ceiling.

Parameters
[in]ceilingpreemption ceiling to which the QK scheduler needs to be locked
Returns
The previous QK Scheduler lock status, which is to be used to unlock the scheduler by restoring its previous lock status in QK_schedUnlock().
Note
QK_schedLock() must be always followed by the corresponding QK_schedUnlock().
See also
QK_schedUnlock()

Usage
The following example shows how to lock and unlock the QK scheduler:

uint32_t BSP_random(void) {
uint32_rnd;
QSchedStatus lockStat = QK_schedLock(N_PHILO); // <== N_PHILO ceiling
. . . // access/manipulate the shared random seed resource
QK_schedUnlock(lockStat); // <=== unlock
return rnd;
}
uint_fast8_t QSchedStatus
The scheduler lock status for QK_schedLock() and QK_schedUnlock().
Definition qk.h:34
QSchedStatus QK_schedLock(uint8_t const ceiling)
QK selective scheduler lock.
Definition qk.c:52
void QK_schedUnlock(QSchedStatus const prevCeil)
QK selective scheduler unlock.
Definition qk.c:80

Definition at line 52 of file qk.c.

◆ QK_schedUnlock()

void QK_schedUnlock ( QSchedStatus const prevCeil)
static

QK selective scheduler unlock.

Details
This function unlocks the QK scheduler to the previous status.

Parameters
[in]prevCeilprevious QK Scheduler lock ceiling returned from QK_schedLock()
Note
QK_schedUnlock() must always follow the corresponding QK_schedLock().
See also
QK_schedLock()

Usage
The following example shows how to lock and unlock the QK scheduler:

uint32_t BSP_random(void) {
uint32_rnd;
QSchedStatus lockStat = QK_schedLock(N_PHILO); // <== N_PHILO ceiling
. . . // access/manipulate the shared random seed resource
QK_schedUnlock(lockStat); // <=== unlock
return rnd;
}

Definition at line 80 of file qk.c.

◆ QK_onIdle()

void QK_onIdle ( void )
static

QK idle callback (customized in BSPs for QK).

Details
QK_onIdle() is called continuously by the QK idle loop. This callback gives the application an opportunity to enter a power-saving CPU mode, or perform some other idle processing.

Note
QK_onIdle() is invoked with interrupts enabled and must also return with interrupts enabled.

Member Data Documentation

◆ readySet

QPSet readySet
private

Definition at line 39 of file qk.h.

◆ actPrio

uint8_t actPrio
private

Definition at line 40 of file qk.h.

◆ nextPrio

uint8_t nextPrio
private

Definition at line 41 of file qk.h.

◆ actThre

uint8_t actThre
private

Definition at line 42 of file qk.h.

◆ lockCeil

uint8_t lockCeil
private

Definition at line 43 of file qk.h.

◆ intNest

uint8_t intNest
private

Definition at line 44 of file qk.h.

◆ QK_priv_

QK QK_priv_
private

Definition at line 68 of file qk.h.


The documentation for this class was generated from the following files: