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程序


执行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值