电脑编程技巧与维护
VC下QNX实时系统的通信
鱼洋
(重庆市公安局户政处,重庆400012)
摘要:对QNX实时嵌入式系统进行研究,明确实时操作系统的概念,QNX操作系统的特点。在TCP/IP协议,以及QNX的多线程编程技术理论的支持下实现了QNX嵌入式系统的通信编程,并对该通信的应用进行了简要的说明。
关键词:嵌入式系统;QNX;RTS;操作系统;通信;TCP;多线程
Communication in QNX Real-time System Using VC
YU Yang
(registered permanent residence administrator bureau of chongqing public security bureau,Chongqing400012)
周士第Abstract:In this paper QNX real-time embedded system is studied,The concept of the operating system and its characteristics are disscussed.Using the TCP/IP protocol,and the multi-thread programming theory,the QNX communication programing is done under the support of the embedded system.Finally,the application of the communication programme is analyzed.
Key words:embedded system;QNX;RTS;Operating system;Communication;TCP;multi-threading
嵌入式系统是电脑软件和硬件的综合,以应用为中心,软硬件可裁减,能够适应实际应用中对功能、可靠性、成本、体积、处理能力、存储器、功耗、产品数量、产品寿命等严格要求。在现代的嵌入式系统中,嵌入式操作系统是灵魂。实时QNX就是其中一种,在QNX操作系统下开发支持实时多任务的应用程序将大大缩短开发周期,降低开发成本。
1概述
实时系统指在确定的时间内完成规定功能,并能对外部异步事件做出正确响应的计算机系统。实时系统的核心是必须在确定的时间内执行完一项预先定义的操作,否则将引起性能下降甚至系统崩溃等严重后果。因此实时系统产生系统输出的时间对系统至关重要,从输入到输出的滞后时间必须足够小到一定时限,即系统执行时间。按时限对系统的影响程度不同,实时系统分为软实时系统(soft real-time
system)和硬实时系统(hard real-time system)。前者对偶尔超过时限的操作可以容忍,并且具有相应的处理机制,不会因为个别存在的超时限操作而引起严重的后果;后者是不能容忍的,超时限的后果无法预测。
2QNX实时操作系
QNX是某软件系统有限公司开发的实时操作系统,是少数支持图形用户界面的实时操作系统之一,它有如下的几个特点:(1)是一个分布式、嵌入式、可扩展的实时系统。遵循POSIX.1(程序接口)和POSIX.2(Shell和工具)。(2)核心仅提供4种服务:进程调度、进程间通信、底层通信和中断处理,其进程在独立的地址空间运行。其它OS服务实现为用户进程,因此非常小巧而且速度极快。(3)提供POSIX.1b标准进程调度:32个进程优先级;抢占式的、基于优先级的正文切换;可选调度策略:FIFO、轮转策略、适应性策略。(4)多种资源管理器,支持多个文件系统同时运行,支持多种闪存设备的嵌入式文件系统,支持SMB文件系统、DOS文件系统、CD-ROM文件系统等。(5)图形/窗口支持。包括QNX Window System for QNX、对MS Windows NT/95和X Window 系统的远程图形连接。(6)支持多种CPU:AMD ElanSC300/ 310/400/410、Am386DE/SE、x86、Pentium。多种总线:Compact PCI、EISA、ISA、MPE、STD、STD32、PC/104、PC/104-Plus、PCI、PCMCIA。各种外设:多种SCSI设备、IDE/EIDE驱动器、以太网卡、多种PCMCIA设备、闪存、声卡等。
3通信编程
3.1TCP/IP协议基础
TCP/IP即传输控制协议/网际协议定义了计算机通过网络互相通信及协议族各层次之间通信的规范。在这个网络中,每台主机都分配有一个32位的IP地址,唯一地标识主机。IP 地址由两部分组成:网络(net work)地址和主机(host)地址。网络地址由IP地址的高位组成,主机地址由低位组成,这两部分的大小取决于网络的类型。IP地址的主机部分可以分出多个子网,利用子网技术,大的网络(即主机地址部分占较多字节)可以被分为若干小的子网(sub net work),每一个子网均可独立维护。当连接一台主机或访问一个Web主页时,都要
收稿日期:2009-11-16
84
--
网络与通信NETWORK AND COMMUNICATION
通过本机的IP地址与被访问主机通信,用IP报文交换数据。
3.2通信线程的操作
QNX没有单独的线程库,QNX中与线程有关的API是作为C++语言库函数的一部分使用的,头文件是<pthread.h>,同样方便地提供线程的创建、终止和同步等功能。QNX不仅在C语言库函数中提供了符合POSIX1003.1c标准的与线程相关的API,而且还提供了很多POSIX标准没有的扩展功能,使得多线程编程变得更加容易。
(1)线程的创建
int pthread_create(pthread_t*thread,const pthread_attr_t* attr,void*(*start_routine)(void*),void*arg)被创建的线程执行start_routine()函数,thread返回创建的线程描述符。而attr是创建线程时设置的线程属性,arg可以作为任意类型的参数start_routine()数QNX对创建线程前需要设置的线程属性扩展如下:可以禁止一个线程的取消(终止操作),可以设置一个线程的取消类型,可以指定某个线程接到信号时它如何操作。
(2)线程的取消
int pthread_cancel(pthread_t*thread)函数取消由thread 指定的线程,如果成功则返回0,否则为非0,成功并不意味着thread会终止,要视取消的状态和类型而定。
(3)线程的终止
void pthread_exit(void*value_ptr)当一个线程在执行了start_routine()函数后返回时,系统自动隐式调用pthread_exit ()使其退出,start_routine()的返回值作为线程的退出状态。在一个线程中也可以显式调用pthread_exit()退出,对于单线程进程而言,调用pthread_exit()与调用exit(0)是等效的。
多线程序中线程之间的关系是复杂的,为了防止竞争条件和数据被破坏的情况发生。QNX提供了多种互斥和同步机制。包括互斥体条件变量、信号灯、屏障、读/写锁、sleepon 锁等,其中最主要的是互斥体和条件变量。其余的同步机制都是由他们构造而成的,当然也可以根据自己的要求构建自己的同步机制。
3.3对于线程功能的扩展
具有Neutrino内核的QNX6操作系统对线程的功能进行扩展,提供了POSIX标准没有提供的功能。
(1)POS1X标准规定使用互斥体的线程必须在同一进程内,作为扩展QNX支持住不同进程中的线程使用互斥体。如果在两个进程间创建一块共享内存,并在内存中初始化一个互斥体,那么两个进程之间的线程可以用这个互斥体来进行同步操作,这是POS1X做不到的。
(2)QNX操作系统还提出了一种独特的“线程池”概念。当程序需要很多线程同时工作时,利用“线程池”可以将线程的个数限定在一定的范围内。“高水位”、“低水似”的概念分别对应着程序中的最大线程数和最小线程数。当程序中
线程数目小于“低水位”时,“线程池”会自动创建新的线程进行工作,当线程数目大于“高水位”时,“线程池”会“清除”多余的线程,以防止溢出。这样将始终始终保持着一定数量的线程工作,“线程池”特别适用客户端/服务器结构,可以很好地保护服务器的资源。QNX提供了专门的程序库来管理“线程池”,头文件是<sys/dispatch.h>,相应的API 主要有:thread_pool_create(),用于建立一个线程池;thread_pool_destroy()程序运行结束后用它来清除线程池;thread_pool_start()用来启动一个线程池。
QNX实时操作系统的实时性很好,上下文切换时间、中断延时都非常微小,本身提供了对于多线程技术的强人支持,如果任QNX下使用多线程编程技术来解决大型并发多任务系统的控制调度,具有很大优势,前景非常广阔。
3.4基于TCP/IP和多线程流程图
通信环境是服务器运行于QNX系统计算机上,而客户端运行于Windows系统机器上。根据TCP/IP协议利用QNX的系统函数编写的服务器端程序,服务器首先生成侦听套节字监听端口,当有客户请求到达时,生成线程处理客户请求,服务器继续监听端口的客户请求,线程处理完客户请求后回送结果,结束该线程。服务器主程序无限循环监听客户连接请求,流程图如图1所示。
3.5主要代码
while(1)
{/*监听连接请求*/
if((newfd=accept(sockfd,(SOCKADDR*) (&cli_addr),&socklen))<0)
{
图1
软件流程
85
--
寒潮电脑编程技巧与维护
及同时支持.NET和JEE平台的异构环境迁移。为此,PB11将这些新标准和新技术内置到开发工具中,使开发人员能够重点关注手头的任务,而不需要投入大量成本和培训时间来了解新技术,加快了开发速度。
(2).NET部署
PB11可轻松将现有的和最新的应用程序部署到丰富的.NET 世界,可以快速、轻松地以.NET WinForm或ASP.NET2 WebForm方式部署应用程序--无需完全重新编写代码,从而节约时间和资金。同时,PB11还具有一个全新的组件--智能更新系统,可利用该组件使.NET Windows Form应用能够快速简便地自我更新。Smart Client应用程序实现了将用户熟知的C/S架构应用与易于部署的Web应用相结合。
(3)DataWindow美化和增强
全新改进的数据可视化功能使业务数据的表现过程更加丰富,并通过高度图形化的交互式用户体验为终端用户提供清晰、可利用的信息,并提供特殊的渐变梯度和透明度功能,以及支持PNG文件。此外,它还为列增加了Rich Text格式。
参考文献
[1]陈永强.SQL Server2005-PowerBuilder11高级开发指南.
清华大学出版社.
[2]韩海雯,等.Web程序设计-ASP.NET.人民邮电出版社.
[3]A(美)Shahram Khosravi,刘志忠.SP.NET AJAX编程参
考手册.清华大学出版社.
作者简介
杨奔全,男(1973-),硕士,讲师,研究方向:无线网络。
perror("accept error");
break;
}
printf("\nOne client is request service from%s at PORT%d\n",
inet_btoa(cli_addr.sinaddr),ntohs(cli_addr.杜淳最新图片
sin_port));
arg.sockid=newfd;/*拼装参数*/
strcpy(arg.address,inet_ntoa(cli_addr.sin_addr));
/*生成一线程来处理请求*/
if(pthread_create(&thread_id,NULL,add,(void*) &arg)>0)
{
perror("pthread_create error");
exit(3);
}
幼儿园大班教师个人工作总结printf("thread%d will process the request\n", thread_id);
}
这里限于篇幅无法给出图1中所示的全部过程代码。
4系统应用
在QNX进行通信编程有着很强的实际意义。在实施性很高的嵌入式系统应用中,应用QNX操作系统,同时应用这种实用的通信的程序可以达到速度与功能的良好结合。在此只是给出了整个通信的框架和实现,对于其功能并没有详细的给出。实际上,来自于一个真实的应用环境:由一个机器产生实时仿真的数据,另外一个进行视景和曲线的输出。把两者功能融合到一台计算机里是无法实现的,因为仿真的实时性要求必须用嵌入式QNX系统来实现,而视景开发在QNX 系统上是很难的。这样分别应用了QNX的实时性,以及Windows机的可观、界面优良特性,实现了一个较好的仿真应用。
参考文献
[1]Rob Krten.Getting Started with QNX Neutrino2[M].QNX鹿晗关晓彤公开恋情
Software System Ltd,1999.
[2]罗蕾著.嵌入式实时操作系统及应用开发[M].北京航空
航天大学出版社,2005.
[3]Rob krten.QNX Operating System Architecture.QNXSoftware
system ltd,2000.仓库管理员职责
作者简介
鱼洋,男(1970-),助理工程师,研究方向:VC++程序开发。
(上接第81页)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
86
-
-
发布评论