STM32 + RT Thread OS 学习笔记[七]

1、  GUI分析

GUI代码编写,完全可以在visualC++中进行,没必要使用MDK。GUI的simulator是基于Visual C++ 2005的,目前在微软官网上找到的最低版本是Visual C++ 2008 Express Edition(Express版本是免费的,但功能要少些,但用来运行模拟器已经足够了),所以,用scons –target=vs –s生成的2005版project.vcproj在打开的时候,会提示进行转换,直接点Finish即可。

 STM32 + RT Thread OS 学习笔记[七]_第1张图片

 

Visual C++ 2008的项目管理简介

Visual C++ 2008对代码的管理分成三层,分别是Solution(解决方案),Project(项目),Source(源码,包括代码,资源等)。在以前的版本,没有最上层的Solution,根节点是从Project开始的。引入Solution是因为,一个项目,可能要引用其它项目(Project)生成的中间件(dll, ocx等),方便管理。对于新手来说,可能只知道Project编译生成exe文件,其实还可以生成如dll, ocx等中间件,封装逻辑功能,提供给主应用程序调用,以实现代码简单复用,功能分割管理,交由团队不同组来完成。

STM32 + RT Thread OS 学习笔记[七]_第2张图片

打开一个project文件,会自动新建一个Solution来加载,下次直接打开project.sln文件即可。

 

运行贪吃蛇,在snake_gui.c中,设置一个断点到event_handler()的起始位置,然后操作贪吃蛇,这时程序被中断停止下来了,我们查看Call Stack,就可以对GUI的运行机制有个大概的判断了。

STM32 + RT Thread OS 学习笔记[七]_第3张图片

在我们的程序中,调用了rtgui_win_show(),就自动进入了rtgui_application_event_loop(),当前线程就运行在这个循环里,不断的从mq(消息队列)中检查是否有新事件进入,并处理。最后,收到close消息,关闭窗口,清理资源后,退出这个循环。当前线程如果没有循环后,线程即被回收销毁。我们的例程没有为贪吃蛇新建一个单独线程,而是使用了application.c中的rt_init_thread_entry()。

通常,rt_init_thread_entry()用来作系统初始化,如初始化LCD,触摸屏驱动等,完成后即被回收。一般建议为GUI创建独立的线程。如触摸屏校准程序calibration.c就在calibration_init()中动态创建了一个线程。

RTGUI主要两部分,一个是创建与销毁,另外就是消息处理。主要的功能都在消息处理这部分完成。消息有键盘,鼠标消息;控件管理消息(激活,重绘,移动,隐藏,关闭等);自定义消息(RTGUI_EVENT_COMMAND)。在贪吃蛇中,还定义了定时器,这是GUI提供的,编写定时器消息完成贪吃蛇的爬行。

在官方PDF对应的版本,创建控件,要自己提供消息队列(mq),在1.1.1版本中,这些都被封装了,连事件循环rtgui_application_event_loop()都不需要调用,减少了代码量。

 

对于RTGUI,其它的,似乎就剩下抄demo的代码了。

 

STM32 + RT Thread OS 学习笔记[七]_第4张图片

线程回收,在消息循环结束后,由系统自动完成。

 

最后提一句:rtgui_dc_begin_drawing()会阻止GUI的Timer,必须与rtgui_dc_end_drawing()成对出现,rtgui_dc_end_drawing()出现两次也不行。

 

 

你可能感兴趣的:(Embedded,C++)