QMsmTst is a test for the QMsm state machine implementation strategy based on the state machine design from Chapter 2 of the PSiCC2 book. Test active object : QMsm(&initial) (void)e; // avoid compiler warning m_foo = 0U; BSP_display("top-INIT;"); BSP_display("s-ENTRY;"); BSP_display("s-EXIT;"); BSP_display("s-INIT;"); m_foo m_foo = 0U; BSP_display("s-I;"); BSP_display("s-E;"); BSP_terminate(0); BSP_display("s1-ENTRY;"); BSP_display("s1-EXIT;"); BSP_display("s1-INIT;"); BSP_display("s1-I;"); !m_foo m_foo = true; BSP_display("s1-D;"); BSP_display("s1-A;"); BSP_display("s1-B;"); BSP_display("s1-F;"); BSP_display("s1-C;"); BSP_display("s11-ENTRY;"); BSP_display("s11-EXIT;"); BSP_display("s11-H;"); m_foo m_foo = false; BSP_display("s11-D;"); BSP_display("s11-G;"); BSP_display("s2-ENTRY;"); BSP_display("s2-EXIT;"); BSP_display("s2-INIT;"); !m_foo m_foo = true; BSP_display("s2-I;"); BSP_display("s2-F;"); BSP_display("s2-C;"); BSP_display("s21-ENTRY;"); BSP_display("s21-EXIT;"); BSP_display("s21-INIT;"); BSP_display("s21-G;"); BSP_display("s21-A;"); BSP_display("s21-B;"); BSP_display("s211-ENTRY;"); BSP_display("s211-EXIT;"); BSP_display("s211-H;"); BSP_display("s211-D;"); #ifndef QMSMTST_HPP #define QMSMTST_HPP enum QMsmTstSignals { A_SIG = QP::Q_USER_SIG, B_SIG, C_SIG, D_SIG, E_SIG, F_SIG, G_SIG, H_SIG, I_SIG, TERMINATE_SIG, IGNORE_SIG, MAX_SIG }; extern QP::QMsm * const the_msm; // opaque pointer to the test MSM // BSP functions to dispaly a message and exit void BSP_display(char_t const *msg); void BSP_terminate(int16_t const result); #endif // QMSMTST_HPP #include "qpcpp.hpp" #include "qmsmtst.hpp" $declare(SMs::QMsmTst) static QMsmTst l_msmtst; // the only instance of the QMsmTst class // global-scope definitions ----------------------------------------- QP::QMsm * const the_msm = &l_msmtst; // the opaque pointer $define(SMs::QMsmTst)