第7章 嵌入式uClinux及其应用开发(2)(4)

2019-05-18 21:41

if(spfd<0) return -1;

tcgetattr(spfd,&oldtio); cfmakeraw(&oldtio); cfsetispeed(&oldtio,B19200); cfsetospeed(&oldtio,B19200); tcsetattr(spfd,TCSANOW,&oldtio); rbuf=hd;

printf(\

retv=read(spfd,rbuf,1); if(retv==-1) perror(\ while(*rbuf!='\\0') { }

for(i=0;i

ncount+=1; rbuf++;

retv=read(spfd,rbuf,1);

printf(\ if(retv==-1) perror(\

}

realdata+=(hd[i]-48)*pow(10,ncount-i-1);

printf(\

close(spfd); return 0; }

发送程序writetest.c的源码如下:

/******************************************************* * Institute of Automation, Chinese Academy of Sciences * File Name: writetest.c

* Description: send data to serial * Author: * Date:

Xueyuan Nie

*******************************************************/ #include #include #include #include #include #include #include #include

int spfd;

int main(int argc, char *argv[]) {

char fname[16],*sbuf; int sfd,retv,i; struct termios oldtio;

spfd=open(\if(spfd<0) {

perror(\return -1;

}

printf(\ tcgetattr(spfd,&oldtio); cfmakeraw(&oldtio); cfsetispeed(&oldtio,B19200); cfsetospeed(&oldtio,B19200); tcsetattr(spfd,TCSANOW,&oldtio);

fname[0]='1'; fname[1]='2';

fname[2]='3'; fname[3]='\\0';

sbuf=(char *)malloc(4);

strncpy(sbuf,fname,4); retv=write(spfd,sbuf,4); if(retv==-1) perror(\

printf(\

close(spfd);

return 0; }

本例程实现:在发送端发送数字123,在接收端接收并显示接收到的数据。 这里请读者注意的是,发送方按字符发送数据,接收方将接收的字符相应的ascii值与字符0所对应的ascii值相减,最终得到实际的十进制数值。 按照前面介绍的方法编译程序,有关如何将可执行文件添加到目标板的方法将在下一小节介绍。

开始运行程序。先在装有Linux的 PC上运行接收程序,然后在S3C4510B上运行发送程序,整个运行的过程如下所示: 在Linux的PC上:

root@uClinux nie]# ./recvtest & [1] 2171

[root@uClinux nie]# open /dev/ttyS1: Success

ready for receiving data...

[root@uClinux nie]# the number received is 1 the number received is 1 the number received is 1 complete receiving the data 123

[1]+ Done ./recvtest

在目标板上:

/var/tmp> ./writetest ready for sending data... the number of char sent is 4

这里所举的例子比较简单,旨在为读者介绍最基本的串行通信的步骤,读者可以此为基础,开发出满足自己需求的应用程序来。

7.4.2 socket编程

uClinux本身就是一个网络的产物,它可以从网上供人们自由免费的下载,正是通过很多爱好者利用网络修改,改善Linux,才得到我们现在的uClinux,所以没有网络可以说就看不到今天的uClinux。因此,在学习uClinux的时候,就不能不涉及到网络,而要掌握在uClinux下设计用户应用程序,就必须要学习有关uClinux下的网络编程。本节主要讲述当前在网络编程中被广泛使用的socket。

socket一般被翻译为“套接字”,简而言之就是网络进程中的ID。 其实网络通信,本质就是进程间的通信,在网络中,每个节点都有唯一一个网络地址,即通常说的IP地址,两个进程在通信的时候,必须首先要确定通信双方的网络地址。但是网络地址只能确定进程所在的PC机,然而同一台PC可能有好几个网络进程,只有网络地址是不能够确定到底是哪个进程,所以套接字还需要提供其他信息,那就是端口号,同一台PC机,一个端口号只能分配给一个进程。所以,网络地址和端口号结合在一起,才可以共同确定整个Internet中的一个网络进程。

套接字最常用的有两种:流式套接字(Stream Socket)和数据报套接字(Datagram Socket)。在Linux中,分别称为”SOCK_STREAM”


第7章 嵌入式uClinux及其应用开发(2)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:分子克隆实验标准步骤

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: