QP/C  7.3.1
Real-Time Embedded Framework
No Matches
QV Class Reference

QV non-preemptive, cooperative kernel (QV namespace emulated as a "class" in C) More...

#include "qv.h"

Static Public Member Functions

void QV_schedDisable (uint_fast8_t const ceiling)
void QV_schedEnable (void)
void QV_onIdle (void)

Private Attributes

QV_Attr QV_priv_

Detailed Description

QV non-preemptive, cooperative kernel (QV namespace emulated as a "class" in C)

Definition at line 50 of file qv.h.

Member Function Documentation

◆ QV_schedDisable()

QV::QV_schedDisable ( uint_fast8_t const  ceiling)

QV selective scheduler disable

This function disables the QV scheduler from scheduling threads below the specified ceiling. The main purpose of disabling the QV scheduler is to avoid scheduling threads that might take too long and overruon the next clock tick, for example.
[in]ceilingpreemption ceiling upto which the QV scheduler needs to be disabled
QV_schedDisable() must be unlocked with QV_schedEnable() at some point, but this is typically done in the system clock tick ISR.
See also
The following example shows how to disable the QV scheduler:
static QState Sporadic3_busy(Sporadic3 * const me, QEvt const * const e) {
QState status_;
switch (e->sig) {
uint16_t toggles = me->total - me->done;
if (toggles > me->per_rtc) {
toggles = me->per_rtc;
me->done += toggles;
for (; toggles > 0U; --toggles) {
QV_schedDisable(3U); // <== disable scheduler up to given prio.
. . .
enum QStateRet QState
Definition qp.h:223
Event class.
Definition qp.h:147
QSignal sig
Definition qp.h:151
void QV_schedDisable(uint_fast8_t const ceiling)

◆ QV_schedEnable()

QV::QV_schedEnable ( void  )

QV scheduler enable

This function re-enables the QV scheduler previously disabled with QV_schedDisable().
QV_schedEnable() must be called (typically from the system clock tick ISR) when the application ever uses QV_schedDisable().
See also
The following example shows how to enable the QV scheduler:
void SysTick_Handler(void) {
QTIMEEVT_TICK_X(0U, &l_SysTick_Handler); // time events at rate 0
QV_schedEnable(); // <== enable the scheduler to process next clock tick
. . .
#define QTIMEEVT_TICK_X(tickRate_, sender_)
Definition qp.h:1230
void QV_schedEnable(void)
Definition qv.c:103

Definition at line 103 of file qv.c.

◆ QV_onIdle()

QV::QV_onIdle ( void  )

QV idle callback (customized in BSPs for QV)

QV_onIdle() is called by the cooperative QV kernel (from QF_run()) when the scheduler detects that no events are available for active objects (the idle condition). This callback gives the application an opportunity to enter a power-saving CPU mode, or perform some other idle processing (such as QS software tracing output).

QV_onIdle() is invoked with interrupts DISABLED because the idle condition can be asynchronously changed at any time by an interrupt. QV_onIdle() MUST enable the interrupts internally, but not before putting the CPU into the low-power mode. (Ideally, enabling interrupts and low-power mode should happen atomically). At the very least, the function MUST enable interrupts, otherwise interrupts will remain disabled permanently.

Member Data Documentation

◆ QV_priv_

QV_Attr QV_priv_

Definition at line 83 of file qv.h.

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