当前位置:首页 > 电源 > 数字电源
[导读]1 引言 PXA270 是Intel 公司的一款基于XScale 架构的高集成度高性能嵌入式处理器,采用ARMv5TE内核,包含了Intel的SpeedStep 技术,优化了处理器的功耗,可以动态调节 CPU 的电压和频率来节省电源的功耗。支持

1  引言
    PXA270 是Intel 公司的一款基于XScale 架构的高集成度高性能嵌入式处理器,采用ARMv5TE内核,包含了Intel的SpeedStep 技术,优化了处理器的功耗,可以动态调节 CPU 的电压和频率来节省电源的功耗。支持多种嵌入式操作系统,如Linux、WinCE、Nucleus、Palm OS、VxWorks等。
    Socket接口是TCP/IP网络层的API,定义了许多函数和例程,可以用它们来开发TCP/IP网络层的应用程序。网络的Socket数据传输是一种特殊的I/O,具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
2 系统设计
    系统的设计分为服务器端和客户端设计两部分,服务器端为运行Linux操作系统的PC机,客户端为PXA270系统,在该系统中移植和构建Linux嵌入式操作系统,两者通过Switch交换机进行网络通信。
2.1 系统工作原理
    在Linux 操作系统中,Socket 属于文件系统的一部分,网络通信可以被看作是对文件的读取。Linux 拥有POSIX 标准库函数,Socket()、Bind()、Sendto()、Recvfrom()等库函数可以方便地实现客户/ 服务器模型中数据的传送与接收。系统设计主要的目的是完成服务器和客户端网络通信的实现。首先启动宿主机和客户机的操作系统Linux,然后每个模块加载网络设备驱动程序,最后通过TCP/IP协议建立双方的通信链路,完成Socket通信,详细情况如图1所示。
2.2  嵌入式TCP/IP协议架构
    嵌入式系统作为TCP服务器,在三次握手建立连接的过程中,嵌入式系统作为监听状态的服务器,处于LISTEN状态,等待对方发起连接。当它接收到SYN数据片,立即发出SYN+ACK的数据片确认收到对方的SYN,此时变为SYN_ RECEIVED状态。再接收到对方返回的一个包含ACK的空数据片则三次握手完成,进入ESTABLISHED状态,最后进行TCP数据通讯。

图1  系统的原理示意图
    嵌入式系统建立连接时初始化序列号,然后根据对方发包中的值来确定序列号,不记忆序列号,不能识别重复报文。嵌入式服务器仅仅在服务器端响应客户端的请求,接收一个发送一个确认回答,不考虑失序问题。同时接收到TCP请求后,将存储于发送缓冲区中的数据立即发送即可,只需一个数据包就能完成,也不需考虑失序问题。
    因为嵌入式系统采用滑动窗口为1的传输方式,即发送一次数据包就等待返回应答,因此当接收不到确认包,就认为自己发送的包丢失,直接发送上次发送的数据。TCP的连接中,当客户机异常导致连接崩溃时,嵌入式系统发数据时会被回复复位信号,回到初始状态。嵌入式TCP/IP协议如图2所示。
3  客户端/服务器端功能设计
    在TCP/IP网络中,通信的两个进程间相互作用的主要模式是客户/服务器模式,即客户端向服务器端发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式在操作过程中采取的是主动请求方式。

图2  嵌入式TCP/IP图解[!--empirenews.page--]
3.1  客户端程序设计
    客户端可以向服务器端发送连接请求,并且客户端也可以接收到来自服务器端发送回来的数据。客户端可以判断当前自己的工作状态,如连接的建立,启动的成功和数据包通信的个数等。客户端程序设计主要按以下的步骤完成函数的调用:
    ①建立自己的Socket(并验证建立成功);
    ②启动连接(并验证建立成功);
    ③返回连接信息;
    ④接收收到的数据;
    ⑤判断数据的属性。
    客户端程序设计的程序基本流程如图3所示。

图3  客户端程序简单示意图
    客户端打开通信通道,并连接到服务器所在主机的特定端口,向服务器发送请求报文,等待并接收应答,请求结束后关闭通信通道并终止通信。客户端主要程序如下:
    Int main(int argc,char *argv[])
    if(argc!=3)
    printf("error!!!please enter the remote IP and PORT please!!! the form like 192.168.0.* 4000\n");                           
    mysocket=socket(AF_INET,SOCK_STREAM,0);    //建立一个套接字
    if(mysocket==-1)
    printf("error!!! failed to created the new socket,program end here\n");
    printf("OK-- you have successful created a socket named mysocket\n");
    return(0);         //socket 建立不成功,回初始位置
    connectcheck=connect(mysocket,(struct sockaddr*)&addr_remote,sizeof(struct sockaddr));
    //调用connect函数连接服务器端
    if(connectcheck==-1)
    printf("error!!!sorry you have failed to connect the remote server!!try again !program end here\n");
   // connect不成功回初始位置
    printf("OK-- Now you have successful connect the server,this server IP =%s,and it's PORT =%s,now you can communicat with this server!!!!!!!\n ",argv[1],argv[2])
    //打印服务器IP地址和端口号
    while(1)
    bzero(gotbuffer,long);
    number=recv(mysocket,gotbuffer,long,0);       
    //调用阻塞函数
    if(number==-1)
    printf("error!!! some thing wrong !let you can not got the data form server,program end here\n");
    return(0);
    gotbuffer[number]='\0';  
    close(mysocket);          
3.2  服务器端程序设计
    服务器端可以快速的做出客户端的连接请求反映,服务器端反映来自客户端的连接参数,如连接的IP、连接时间、连接的当前状态等。服务器启动后根据请求提供以下服务:
    ①打开通信通道并告知本地主机,在某一公认地址上接收客户请求;
    ②等待客户请求到达该端口;
    ③接收到重复服务请求,处理该请求并发送应答信号;
    ④返回第二步,等待另一客户请求;
    ⑤关闭服务器。
    服务器端程序设计的流程如图4所示。[!--empirenews.page--]
    客户端与服务器端进程的作用是非对称的,因此编码不同。同时,服务器进程一般是先于客户请求请求而启动的,只要系统运行,该服务进程一直存在,直到正常或强迫终止。服务器端主要程序如下:
    mysocket=socket(AF_INET,SOCK_STREAM,0);
    //建立新的套接字
    if(mysocket==-1)
    printf("error!!! failed to created mysocket\n");
    return(0);        //socket建立不成功,回初始位置
    mybindcheck=bind(mysocket,(struct sockaddr*)&addr_local,sizeof(struct sockaddr));
    if(mybindcheck==-1)
    printf("error!!!failed to bind the IP and port with mysocket\n");
    return(0);

图4  服务器端程序简单示意图
    { printf("OK--you have successed bind your IP with port %d\n",port);
    listencheck=listen(mysocket,howmany);
    if(listencheck==-1)
    printf("error!!! you have failed listen this port,program end here\n");
    return(0);                        //调用监听函数
    sin_size=sizeof(struct sockaddr_in);
    newsocket=accept(mysocket,(struct sockaddr*)&addr_remote,&sin_size);     
    //调用接收函数
    if(newsocket==-1)
    printf("error!!!failed to got remote connect this server,program end here\n");
    return(0);         //建立新的socket失败返回
    printf("OK--  now have created the newsocket to use this own connection,use this communicate with clint%s\n",inet_ntoa(addr_remote.sin_addr),port);
    printf("OK-- server have successed got connect from clint IP = %s,port = %d,now connecting is running;\n",inet_ntoa(addr_remote.sin_addr),port)
pid_t pid;
    pid=fork();           //调用fork()建立子进程
    if(pid>0)
    printf("OK-- i am a father procces,child proccess will continue for you,it's ID= %d,now end newsock and use old socket to listen again................. \n",pid);
    close(newsocket);
    printf("OK-- i am a child procces,i am responsible for this new communicate,blow i will do for connect\n");
    printf("OK-- please enter your data which you want to send n");                             
    while(1)
    bzero(sendbuffer,long);
    scanf("%s",sendbuffer);
    sendcheck=send(newsocket,sendbuffer,strlen(sendbuffer),0); //发送数据
    if(sendcheck==-1)
    printf("error!!!failed to send to remote\n");
    close(newsocket);
    else
    printf("OK--now you have send %d byte data to remote!!!pleases send again!!!!\n",sendcheck);[!--empirenews.page--]
4  应用与测试

图5  数据发送验证客户端    
    系统测试前,服务器端通过以太网和客户端实现连接。客户端构建了linux嵌入式操作系统,客户端的程序通过嵌入式交叉编译环境进行调试。测试前应保证网络的顺畅和串口的操作正常。
    启动服务器端,运行Linux操作系统,并建立新的用户终端,然后运行服务器端socket通信程序。
    启动客户端,运行Linux嵌入式操作系统,配置IP地址为192.168.15.15,运行客户端socket通信程序。
    服务器端和客户端连接,在服务器端会有详细的连接请求显示出来,如IP地址、服务器当前状态,通信模式等。服务器开始发送数据,客户端开始接收来自服务器的数据,验证是否正确。图5为数据发送验证客户端。
5  结论
    通过在PXA270中增加嵌入式操作系统Linux的基础上实现一个较为简单的网络通信模块,验证了嵌入式系统socket通行的可行性,实现嵌入式系统基于TCP/IP协议的网络接入,针对各种智能设备如家用电器、工业控制装置或仪器、安全监控系统、汽车电子接入互联网变得简单容易。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭