新闻中心

EEPW首页 > 模拟技术 > 设计应用 > C/S模型在WinCE串口编程中的应用

C/S模型在WinCE串口编程中的应用

作者:时间:2012-08-21来源:网络收藏

1.4 客户端程序流程及工作原理
客户端程序流程图如图3所示。客户端程序只需将要发送的数据按照控制协议要求整合,将符合控制协议的数据提交给服务器端的程序即可。

本文引用地址:http://www.eepw.com.cn/article/185889.htm

c.JPG



2 关键技术
2.1 结构体定义
为实现服务器端程序所有线程的管理,同时方便所有线程之间数据的共享,在创建线程时,对线程传递参数的定义就变得尤为重要。在本方法的实现中定义了一个线程传递参数,定义如下:
d.JPG
2.2 CMapStringToPtr类
CMapStringToPtr类是MFC集合类中的一个模板类,也称为“字典”,就像一种只有曲列的表格,一列是关键字,一列是数据项,它们是一一对应的。关键字是唯一的,给出一个关键字,映射表类会很快找到对应的数据项。映射表的查找是以哈希表的方式进行的,因此在映射表中查找数值项的速度很快。该类最适用丁需要根据以CString对象为关键字进行快速检索的场合。
为便于缓冲区和句柄的索引,在本方法的实现中使用CMapStringToPtr类的对象来管理线程和缓冲区的句柄。
2.3 CEvent类
CEvent类的一个对象,表示一个“事件”——一个允许一个事件发生时线程通知另一个线程的同步对象。在一个线程需要了解何时执行任务时,事件是十分有用的。例如,拷贝数据到数据文档时,线程应被通知何时数据是可用的。当新数据可用时,通过运用CEvent对象来通知拷贝线程,线程才可能尽快地执行。
另一个使用CEvent对象的方法是添加一个CEvent类型的变量,使之成为希望控制的类的一个数据成员。在控制对象被构造期间,可调用CEvent数据成员的构造函数,它指明时间是否是最初就被标记、需要的事件对象类型、事件名称(如果在进程中要使用)和所希望的安全属性。
此外CEvent对象还可以保护控制的资源,使该资源在一个时间里只可被一个线程访问;使用时要先在资源访问成员函数中构造一个CEvent类型的变量,然后调用封锁对象的Lock成员函数。此时,线程要么等待资源释放后访问;要么等待资源释放而超时,访问资源失败。在各种情况下,资源都被以线程安全方式访问。
总之,该方法实现的关键技术主要包含3个线程、结构体定义、CMapStringToPtr成员、CEvent成员和控制协议。

3 实现和应用
基于上面的讲述,为了使用方便,将其所有的数据成员和方法封装成一个类。本文所有代码的实现使用的开发环境为EVC4.0,由于篇幅的关系,新建类的方法和开发环境的使用细节请详阅参考文献;对于在代码中出现的API函数的一些用法和参数说明可以详阅参考文献;想对嵌入式系统有进一步了解,可以仔细阅读参考文献。
使用EVC4.0的Class wizrd插入一个新类,之后将上述代码加入,使用时只需在程序开始时涮用AfxGetSerMsgQ()->Open()函数来打开串口,此时即可对相应的串口数据进行实时处理,同时不影响其他线程对该串口的使用;当其他线程使用该串口时,只需调用AfxGetSerMsgQ()->WriteBuffer()函数来发送数据,调用AfxGetSerMsgQ()->ReadData()函数来读取数据即可。同时,这两个函数的调用不会影响相应串口数据的实时接收,完全实现了串口的复用功能。

结语
本文提到的方法不但解决了操作系统不支持串口复用的问题,而且实现代码简单、通用性强,对于解决其他资源复用问题同样有效。本文提到的方法已经在实际产品中应用,解决了实际的工程问题。该方法实现的代码具有通用性,只需修改少量代码就可以应用到其他嵌入式系统软件代码设计当中。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭