Real-time example
{
PERIODIC_SPEC_SIG = Q_USER_SIG,
TIMEOUT_SIG,
SPORADIC_A_SIG,
SPORADIC_B_SIG,
REMINDER_SIG,
// ...
MAX_SIG // the last signal
};
= (QActive *)&Periodic1_inst;
Periodic1 * const me = &Periodic1_inst;
QMActive_ctor(&me->super, Q_STATE_CAST(&Periodic1_initial));
QTimeEvt_ctorX(&me->te, (QActive *)me, TIMEOUT_SIG, 0U);
= (QActive *)&Periodic4_inst;
Periodic4 * const me = &Periodic4_inst;
QMActive_ctor(&me->super, Q_STATE_CAST(&Periodic4_initial));
QTimeEvt_ctorX(&me->te, (QActive *)me, TIMEOUT_SIG, 0U);
= (QActive *)&Sporadic2_inst;
Sporadic2 * const me = &Sporadic2_inst;
QMActive_ctor(&me->super, Q_STATE_CAST(&Sporadic2_initial));
= (QActive *)&Sporadic3_inst;
Sporadic3 * const me = &Sporadic3_inst;
QMActive_ctor(&me->super, Q_STATE_CAST(&Sporadic3_initial));
// the initial event must be provided and must be WORKLOAD_SIG
QEvt const *e = (QEvt const *)par;
Q_REQUIRE_ID(300, (e != (QEvt const *)0)
&& (e->sig == PERIODIC_SPEC_SIG));
QTimeEvt_armX(&me->te,
Q_EVT_CAST(PeriodicSpecEvt)->ticks,
Q_EVT_CAST(PeriodicSpecEvt)->ticks);
me->toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
for (uint16_t i = me->toggles; i > 0U; --i) {
BSP_d6on();
BSP_d6off();
}
BSP_d6on();
QTimeEvt_disarm(&me->te);
QTimeEvt_armX(&me->te,
Q_EVT_CAST(PeriodicSpecEvt)->ticks,
Q_EVT_CAST(PeriodicSpecEvt)->ticks);
me->toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
BSP_d6off();
// the initial event must be provided and must be WORKLOAD_SIG
QEvt const *e = (QEvt const *)par;
Q_REQUIRE_ID(300, (e != (QEvt const *)0)
&& (e->sig == PERIODIC_SPEC_SIG));
QTimeEvt_armX(&me->te,
Q_EVT_CAST(PeriodicSpecEvt)->ticks,
Q_EVT_CAST(PeriodicSpecEvt)->ticks);
me->toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
for (uint16_t i = me->toggles; i > 0U; --i) {
BSP_d3on();
BSP_d3off();
}
BSP_d3on();
QTimeEvt_disarm(&me->te);
QTimeEvt_armX(&me->te,
Q_EVT_CAST(PeriodicSpecEvt)->ticks,
Q_EVT_CAST(PeriodicSpecEvt)->ticks);
me->toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
BSP_d3off();
Q_UNUSED_PAR(par);
Q_UNUSED_PAR(me);
BSP_d5on();
QACTIVE_POST(AO_Sporadic3, e, me); // Sporadic2 --> Sporadic3
BSP_d5off();
BSP_d5on();
QACTIVE_POST(AO_Periodic1, BSP_getEvtPeriodic1(1U), me);
BSP_d5off();
for (uint16_t i = Q_EVT_CAST(SporadicSpecEvt)->toggles;
i > 0U; --i)
{
BSP_d5on();
BSP_d5off();
}
Q_UNUSED_PAR(par);
Q_UNUSED_PAR(me);
BSP_d4on();
// Sporadic3 --> Periodic4
QACTIVE_POST(AO_Periodic4, BSP_getEvtPeriodic4(1U), me);
BSP_d4off();
for (uint16_t i = Q_EVT_CAST(SporadicSpecEvt)->toggles;
i > 0U; --i)
{
BSP_d4on();
BSP_d4off();
}
#ifndef APP_H_
#define APP_H_
$declare ${Shared}
#endif // APP_H_
#include "qpc.h" // QP/C real-time event framework
#include "bsp.h" // Board Support Package
#include "app.h" // Application interface
$declare ${AOs::Periodic1}
Q_DEFINE_THIS_MODULE("periodic1")
$define ${Shared::Periodic1_ctor}
$define ${Shared::AO_Periodic1}
$define ${AOs::Periodic1}
#include "qpc.h" // QP/C real-time event framework
#include "bsp.h" // Board Support Package
#include "app.h" // Application interface
$declare ${AOs::Periodic4}
Q_DEFINE_THIS_MODULE("periodic4")
$define ${Shared::Periodic4_ctor}
$define ${Shared::AO_Periodic4}
$define ${AOs::Periodic4}
#include "qpc.h" // QP/C real-time event framework
#include "bsp.h" // Board Support Package
#include "app.h" // Application interface
$declare ${AOs::Sporadic2}
//Q_DEFINE_THIS_MODULE("sporadic2")
$define ${Shared::Sporadic2_ctor}
$define ${Shared::AO_Sporadic2}
$define ${AOs::Sporadic2}
#include "qpc.h" // QP/C real-time event framework
#include "bsp.h" // Board Support Package
#include "app.h" // Application interface
$declare ${AOs::Sporadic3}
//Q_DEFINE_THIS_MODULE("sporadic3")
$define ${Shared::Sporadic3_ctor}
$define ${Shared::AO_Sporadic3}
$define ${AOs::Sporadic3}