基于WinCE的运动员训练及考核系统的实现

时间:2022-08-10 12:32:51

基于WinCE的运动员训练及考核系统的实现

摘要:设计并实现基于WinCE的运动员训练及考核系统,并给出了考核模块的部分源代码。

关键词:WinCE;嵌入式操作系统;计时器

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)04-10935-02

1 引言

运动员的训练计划确定了各个项目的训练内容、要求和进程,计划的制定和执行为教练人员及时掌握运动员的训练情况提供了科学依据,但由于其项目繁多,各个人员内容的不同等使得计划的管理工作极为繁琐;此外,运动员的成绩考核绝大多数是在室外,这就为各次成绩的及时登记和整理带来不便。那么,开发一套基于WinCE的能够在目前绝大多数商用PDA上运行的运动员训练及考核系统无疑将为教练员带来极大的方便。本文通过计划管理模块和考核模块的开发来具体说明这一系统的设计实现。

2 嵌入式操作系统的选择

目前市场上推出的嵌入式操作系统主流有Windows CE、Palm、VxWorks、μCLiux等,之所以选择WinCE主要是基于以下几个方面的考虑:

2.1 API

WinCE与Windows NT/XP和Windows 9x使用相同的基本API。这就大大缩减了软件开发者学习开发技术的时间。

2.2 开发工具

用于WinCE的开发工具和技术与用于Windows NT/XP和Windows9x的基本相同。开发工具包括Visual c++,Visual Basic和Visual Java,这些工具都可以运行于Windows 操作系统之上,极大的方便了PC机和目标平台之间的交叉编译。

2.3 支持多种处理器

WinCE支持广泛的微处理器体系结构,包括CISC和RISC。目前,WinCE支持Hitachi的SH、MIPS、PowerPC、ARM和x86等体系结构,通常每种结构系列又有多个变种,支持广泛的微处理器保证了该系统可以在市场上大多数商用PDA上运行。

该系统使用的操作系统是WinCE .NET 4.2,相应的开发工具为EVC4.0+SP2。

3 训练计划管理模块

由于训练计划内容繁多,教练人员查阅起来不是很方便,鉴于这一特点,本模块中的训练计划内容采用树状结构表示。树状结构中的分支选择项分为两类:一类的属性为非叶子结点,即具有下一级结点,双击该结点,可以打开其子结点;另一类属性为叶子结点,双击该结点时可以打开课目内容。这种构造方式类似于Windows操作系统中的资源管理器。

采用树状结构表示方法将训练计划按照日期有规律地组合在一起,从而方便教练人员对各项计划进行各种操作,如添加、删除、修改等,模块结构图如图1所示:

图1 训练计划管理模块结构图

(1)显示子模块

主要功能是将数据库中的数据显示在树状结构中,方便教练人员查阅和各种处理。

(2)管理子模块

可以添加/删除/修改树结点;可以添加、删除、修改训练计划类别名称和项目名称;编辑/导入计划内容,可以对打开的计划内容进行查看、修改,也可以将PDA中存在的文件导入到计划编辑框中,然后对其进行编辑。

4 考核模块

本模块具有对成绩进行管理的功能,如打开、添加、删除某个运动员的成绩表;具有计时器的功能,主要供某些以时间为成绩的项目使用,该模块能将计时器记录的时间导入到考核成绩登记表中。本模块还具有统计功能,能够根据教练人员的需要统计出最好成绩、最低成绩和平均成绩等。模块结构图如图2所示。

图2 考核模块结构图

4.1 计时器子模块的实现

由于计时器主要用来记录某个项目的成绩,因此最需要解决的问题是高精度计时。常用的解决方法有以下几种:

(1)使用Windows中提供的常规定时器Timer控件

这种方法相对简单,直接使用Windows的定时器API函数SetTime()和killerTimer(),可以在应用程序中设置一个或多个定时时钟。但是这种方法存在两个问题:一是此方法所建立的定时器是由定时器消息WM_TIMER驱动的,而WM_TIMER消息在串行消息队列中的优先级很低,只有当系统处理完消息队列中优先级较高的消息后,才会处理WM_TIMER消息;二是计时器是以PC硬件的时间中断次数来确定计时的长短,而时间中断的周期是以系统电子钟的时间为基准,固定54.95ms。由此可见,计时器的实际精度最多能达到55ms,只能用于实时性要求不高的场合。因此,此方法弊端较多,不能满足本系统的设计要求。

(2)使用多媒体定时器,调用用于多媒体定时的Windows API函数timeGetTime(void)实现

该函数定时精度为ms级,返回从Windows启动开始经过的毫秒数。微软公司在其多媒体Windows中提供了精确定时器的底层API支持,利用多媒体定时器可以很精确地读出系统的当前时间,并且能在非常精确的时间间隔内完成一个事件、函数或过程的调用。不同之处在于调用DWORD timeGetTime(void) 函数之前必须将 Winmm.lib和 Mmsystem.h 添加到工程中,否则在编译时提示DWORD timeGetTime(void)函数未定义。由于使用该函数是通过查询的方式进行定时控制的,所以,应该建立定时循环来进行定时事件的控制。

(3)QueryPerformanceFrequency()和 QueryPerformanceCounter()函数

在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。其定时误差不超过1微秒,精度与CPU等机器配置有关。并要求计算机从硬件上支持精确定时器。

在精度要求较高的情况下,通用性和实时性两方面考虑,第一种方法精度不高,第二种方法需要添加头文件,第三种方法需要硬件支持,通用性不强。

鉴于以上各种方法的缺点,本软件采用的是调用GetTickCount()函数,它既能满足较高精度的要求,又不需要加入头文件,通用性较强,GetTickCount()函数的返回值是 DWORD型,表示以ms为单位的计算机启动后经历的时间间隔,精度比WM_TIMER消息映射高,在较短的定时中其计时误差为10ms。下列代码可以实现50ms的精确定时:

DWORD dwStart = GetTickCount();

DWORD dwEnd = dwStart;

do

{dwEnd = GetTickCount()-dwStart;}while(dwEnd

由于成绩登记模块提供成绩录入功能,为了使该功能具有直观方便的特点,需要一种可以编辑的列表控件,而EVC中自带的列表控件CListCtrl不具有编辑的功能,这就需要自定义一种可编辑的列表控件。本软件采用CListCtrl结合文本控件CEditCtrl的方法,其实实现步骤如下所示。

(1)显示隐藏的文本控件,显示的位置和大小与选中格的位置大小完全相同,这样可以覆盖选中格;

(2)将选中格的内容填到文本控件中;

(3)修改完毕后,将新的内容填到选中格中,同时隐藏文本控件。

4.3 成绩数据库的管理

考核模块提供对成绩数据库进行管理的功能,如添加、删除某个运动员的考核成绩表等。实现方法如下:

将数据库卷中所有的数据库显示在一个可编辑列表控件CEditListCtrl类中,方便教练人员进行管理。由于篇幅所限,下面简单介绍显示成绩数据库的过程:

(1)创建一个可编辑列表控件CEditListCtrl类,用来存放各个运动员的成绩表,在CEditListCtrl中插入序号和表名称项;

(2)然后找到成绩数据库卷标中的第一个数据库,显示在CEditListCtrl中;

(3)找到成绩数据库卷标中的下一个数据库,显示在CEditListCtrl中。直到全部查找结束为止。代码如下:

BOOL showTablet()

{CEditListCtrl ListTablet;//可编辑列表控件

m_ListTablet.InsertColumn(0,_T("序号"),LVCFMT_LEFT,40);

m_ListTablet.InsertColumn(1,_T("成绩表名称"),LVCFMT_LEFT,160);

HANDLE hEnumDB;//数据库句柄

CEOID CeOid;

CEOIDINFO CeObjectInfo;

hEnumDB = CeFindFirstDatabaseEx(&m_ceGuidScore,0);//找到成绩数据库m_ceGuidScore中的第一个数据库

if(hEnumDB == INVALID_HANDLE_VALUE)

return;

while((CeOid = CeFindNextDatabaseEx(hEnumDB,&m_ceGuidScore))!=0)//找下一个

{//得到数据库信息

if(!CeOidGetInfoEx(&m_ceGuidScore,CeOid,&CeObjectInfo))

{ CloseHandle(hEnumDB);

return FALSE;}

else

{//将数据库名称CeObjectInfo.infDatabase.szDbaseName添加到ListTablet中}}}

5 结束语

基于WinCE的运动员训练及考核系统实现了训练计划管理和考核成绩管理两大功能,同时在考核成绩管理模块中还解决了计时器的计时精度问题,这一系统的实现必将为教练人员带来极大的方便。

参考文献:

[1]汪兵.EVC高级编程及其应用开发[M].北京:中国水利水电出版社,2005(1):96.

[2]陈向群.Windows 系统分析及实验教程[M].北京:机械工业出版社,2003(1):255.

[3]王勇译.嵌入式系统编程源代码解析[M].北京:电子工业出版社,2002(9):94.

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:“计算机图形学”的教学实践与改革探讨 下一篇:基于L2TP的VPDN技术在校园网中的应用