QP/C  7.3.3
Real-Time Embedded 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 (uint_fast8_t const ceiling)
 
void QK_schedUnlock (QSchedStatus const prevCeil)
 
void QK_onIdle (void)
 

Static Private Member Functions

uint_fast8_t QK_sched_ (void)
 
void QK_activate_ (void)
 

Private Attributes

QK_Attr QK_priv_
 

Detailed Description

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

Definition at line 50 of file qk.h.

Member Function Documentation

◆ QK_schedLock()

QK::QK_schedLock ( uint_fast8_t const  ceiling)
static

QK selective scheduler lock

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().
Precondition qk:100
  • The QK scheduler lock cannot be called from an ISR
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
Definition qk.h:60
QSchedStatus QK_schedLock(uint_fast8_t const ceiling)
void QK_schedUnlock(QSchedStatus const prevCeil)
Definition qk.c:113

◆ QK_schedUnlock()

QK::QK_schedUnlock ( QSchedStatus const  stat)
static

QK selective scheduler unlock

This function unlocks the QK scheduler to the previous status.

Parameters
[in]statprevious QK Scheduler lock status returned from QK_schedLock()
Precondition qk:200
  • the QK scheduler cannot be unlocked: from the ISR context
  • the current lock ceiling must be greater than the previous
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 113 of file qk.c.

◆ QK_onIdle()

QK::QK_onIdle ( void  )
static

QK idle callback (customized in BSPs for QK)

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.

◆ QK_sched_()

QK::QK_sched_ ( void  )
staticprivate

QK scheduler finds the highest-priority AO ready to run

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.
Precondition qk:400
  • check the internal integrity (duplicate inverse storage)
Attention
QK_sched_() must be always called with interrupts disabled and returns with interrupts disabled.

Definition at line 148 of file qk.c.

◆ QK_activate_()

QK::QK_activate_ ( void  )
staticprivate

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

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

Precondition qk:500
  • QK_attr_.actPrio and QK_attr_.nextPrio must be in range
Attention
QK_activate_() must be always called with interrupts disabled and returns with interrupts disabled.

Definition at line 192 of file qk.c.

Member Data Documentation

◆ QK_priv_

QK_Attr QK_priv_
private

Definition at line 116 of file qk.h.


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