Quantum LeaPs 例程之Blinky

在SOURCEFORGE上下载QP-C、QM和QTools


软件的手册见

注意:官方建议不要安装到Program Files中
It is generally not recommended to install QM™ in such Windows locations as "Program Files" or "Program Files (x86)", because these directories have access limitations and don't allow you to modify the QM Style Sheet (qm.qss) or new model templates.

我统一安装到D盘中
在系统环境变量中添加QM和QTools工具的路径

创建系统变量 QPC

测试QM是否能正常运行


按照QM™ Tutorial 使用QM创建一个Blinky的简单例程

打开QM生成的blinky.c文件,下面的代码就是QM根据我们画的状态机自动生成的C代码
/*************** ask QM to declare the Blinky class ******************/
/*$declare${AOs::Blinky} ###################################################*/
/*${AOs::Blinky} ...........................................................*/
typedef struct {
/* protected: */
    QActive super;

/* private: */
    QTimeEvt timeEvt;
} Blinky;

/* protected: */
static QState Blinky_initial(Blinky * const me, QEvt const * const e);
static QState Blinky_off(Blinky * const me, QEvt const * const e);
static QState Blinky_on(Blinky * const me, QEvt const * const e);
/*$enddecl${AOs::Blinky} ###################################################*/
/*************** ask QM to define the Blinky class  ******************/
/* Check for the minimum required QP version */
#if (QP_VERSION < 630U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#error qpc version 6.3.0 or higher required
#endif

/*$define${AOs::Blinky} ####################################################*/
/*${AOs::Blinky} ...........................................................*/
/*${AOs::Blinky::SM} .......................................................*/
static QState Blinky_initial(Blinky * const me, QEvt const * const e) {
    /*${AOs::Blinky::SM::initial} */
    QTimeEvt_armX(&me->timeEvt, BSP_TICKS_PER_SEC/2, BSP_TICKS_PER_SEC/2);
    return Q_TRAN(&Blinky_off);
}
/*${AOs::Blinky::SM::off} ..................................................*/
static QState Blinky_off(Blinky * const me, QEvt const * const e) {
    QState status_;
    switch (e->sig) {
        /*${AOs::Blinky::SM::off} */
        case Q_ENTRY_SIG: {
            BSP_ledOff();
            status_ = Q_HANDLED();
            break;
        }
        /*${AOs::Blinky::SM::off::TIMEOUT} */
        case TIMEOUT_SIG: {
            status_ = Q_TRAN(&Blinky_on);
            break;
        }
        default: {
            status_ = Q_SUPER(&QHsm_top);
            break;
        }
    }
    return status_;
}
/*${AOs::Blinky::SM::on} ...................................................*/
static QState Blinky_on(Blinky * const me, QEvt const * const e) {
    QState status_;
    switch (e->sig) {
        /*${AOs::Blinky::SM::on} */
        case Q_ENTRY_SIG: {
            BSP_ledOn();
            status_ = Q_HANDLED();
            break;
        }
        /*${AOs::Blinky::SM::on::TIMEOUT} */
        case TIMEOUT_SIG: {
            status_ = Q_TRAN(&Blinky_off);
            break;
        }
        default: {
            status_ = Q_SUPER(&QHsm_top);
            break;
        }
    }
    return status_;
}
/*$enddef${AOs::Blinky} ####################################################*/
调用D:\qp\qtools\bin里边的gcc编译生成可在Windows上执行的blinky.exe程序


执行效果

猜你喜欢

转载自blog.csdn.net/lwx62/article/details/80986468