使用visual studio 2013建立一个基于QPC的简单工程

转载请标明出处:http://blog.csdn.net/chenbb8/article/details/52330032
注:本文的软件环境是QPC5.6.5+QM3.3+vs2013+WIN7

在上篇文章《使用QM的外部工具功能编译代码》中,介绍了在PC机上如何使用gcc对单文件进行编译。本文则是通过VS2013建立一个基于UML状态图框架QPC的简单的工程,方便在没有嵌入式目标版的时候提前通过vs2013进行初步的仿真调试。
另外QPC_5.3.1中的WIN32下的VC例子也可以在通过vs2013打开,自动转换成vs2013的工程后,通过本文的相关设置就能再次运行了。
本文利用是《QM™ Tutorial》中生成的单文件blinky.c,但同样可以推广到多文件上。

  • 建立工程

首先新建工程,打开VS2013的FILE菜单->NEW->project…,在弹出窗口中填入工程名字和目录。
这里写图片描述

确定后,在接卸来的application set窗口中,只选择console application一个选项。然后点击finish。
这里写图片描述

接下来将Solution Explorer中Source Files文件夹的两个cpp文件删掉,然后右击Source Files->Existing Item..添加之前使用QM生成的blinky.c。

  • 设置环境变量

下一步将会用到QPC的相对目录,如果是使用绝对目录,可以跳过这一步。
回到桌面,鼠标右击”我的电脑”->属性->高级系统设置->高级->环境变量->系统变量->Path。在Path中,添加QPC的目录,注意目录和目录之间使用’;’号分隔。
这里写图片描述

  • 添加包含目录

回到VS2013中,在Solution Explorer中右击工程名字blinky->propertis->configuration properties->vc++ directories->include directories->edit,在弹出窗口中添加:

$(QPC)\include
$(QPC)\ports\win32

如果使用的是QPC5.3.1,还要添加$(QPC)/ports/win32/vc,具体根据调试信息查找添加

然后在上面打开的blinky Property窗口下->configuration properties->VC++ directories->Library Directories->edit下添加:

$(QPC)\ports\win32\Debug

如果使用的是QPC5.3.1,则是添加$(QPC)\ports\win32\vc\Debug
这里写图片描述

最后在上面打开的blinky Property窗口下->configuration properties->Linker->Input->Additional Dependencies->Edit下添加qp.lib
这里写图片描述
设置完毕。

好的,开始仿真调试吧
这里写图片描述

qp官网下载qpc,移植到stm32f103单片机,在正点原子战舰V3开发板上实验成功 qp搭建步骤重要提示: #define RED_QUEUE_LEN 3 #define BLUE_QUEUE_LEN 3 #define TACKER_EVENT_POOL_LEN (RED_QUEUE_LEN + BLUE_QUEUE_LEN) static QEvt const * l_redQueueSto[RED_QUEUE_LEN]; //事件队列 static QEvt const * l_blueQueueSto[BLUE_QUEUE_LEN]; //事件队列 static LedEvt LedEvtPoolSto[TACKER_EVENT_POOL_LEN]; //事件池 static QSubscrList SubSrcSto[MAX_PUB_SIG]; //订阅列表 typedef struct LedEvtTag LedEvt; //定义事件结构 struct LedEvtTag{ QEvt super_; uint16_t uiParaH; uint16_t uiParaL; }; //定义信号枚举 enum LedSignals{ START_SIG = Q_USER_SIG, KEY0_SIG, KEY1_SIG, KEY2_SIG, KEYUP_SIG, ALL_OFF_SIG, ONLY_BULE_SIG, ONLY_RED_SIG, ALL_ON_SIG, MAX_PUB_SIG }; void PublishLedEvt(uint16_t uiSig, uint16_t uiParaH, uint16_t uiParaL) //发布事件函数 { LedEvt* peTacker; peTacker = Q_NEW(LedEvt, uiSig); peTacker->uiParaH = uiParaH; peTacker->uiParaL = uiParaL; QF_publish_((QEvt*)peTacker); } QF_init(); //时间事件列表、活动对象查找表、优先级集合 QF_psInit(SubSrcSto, Q_DIM(SubSrcSto)); //初始化事件池 QF_poolInit(LedEvtPoolSto,sizeof(LedEvtPoolSto),sizeof(LedEvtPoolSto[0])); RedLed_Start(uiPrio++, l_redQueueSto, Q_DIM(l_redQueueSto), 0, 0); //建立活动对象 BlueLed_Start(uiPrio++, l_blueQueueSto, Q_DIM(l_blueQueueSto), 0, 0); /////////////////////////////////////////////////// typedef struct RedActiveTag RedActive; //构建一个活动对象活动类型 struct RedActiveTag{ QActive super_; volatile uint16_t RedLedStateNow; uint16_t a; uint16_t b; }; extern RedActive RedLed; RedActive RedLed; void RedLed_Start(uint_fast8_t prio, QEvt const *qSto[], uint_fast16_t qLen, void *stkSto, uint_fast16_t stkSize) { RedLed_Ctor(&RedLed;); QActive_start_((QActive*)&RedLed;, prio, qSto, qLen, stkSto, stkSize, (QEvt const *)0); //创立活动对象的线程并提醒 QF 开始管理活动对象 } void RedLed_Ctor(RedActive* me) { QActive_ctor(&me;->super_, (QStateHandler)RedLed_Initial); //初始化状态机基础类(成员 super) me->RedLedStateNow = 0; }
STM32 HAL QPC 是一种针对STM32系列微控制器的硬件抽象层(Hardware Abstraction Layer),它最初是由Quantum Leaps公司开发的。它的目的是提供一种方便使用的编程接口,使开发者能够更容易地配置和控制STM32微控制器的各种功能。 HAL是STM32全新的软件平台,整合了STM32CubMX和STM32CubeF4,为开发人员提供了一种基于HAL库的新的软件开发方式。它提供了一组高级API函数,用于配置和控制STM32的内部模块,如GPIO、USART、SPI、I2C等。这使得开发者可以更加方便地编写和维护代码。 而QPC(Qt Positioning Control)是一个由Quantum Leaps开发的嵌入式实时操作系统(RTOS)和事件驱动的框架。它为开发者提供了一种易于使用的方法,用于编写高效、可靠的嵌入式软件。QPC提供了一种事件驱动的编程模型,开发者可以通过定义事件和事件处理函数的方式来编写应用程序。在QPC中,每个事件都有一个优先级,这样可以确保高优先级事件在低优先级事件之前得到处理。 STM32 HAL QPC的结合使用使得开发者能够更轻松地开发出高性能、可靠的嵌入式应用程序。HAL提供了方便的编程接口,使得配置和控制STM32的各种外设变得更加容易。而QPC提供了一种高效的开发框架,通过事件驱动的方式,使得程序的执行更加可控和可靠。这种结合使用的方式,可以大大提高开发效率和软件质量,使得开发者能够更快地将产品推向市场。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值