新闻中心

EEPW首页>嵌入式系统>设计应用> 基于uCLinux和ARM7的网络通信设计

基于uCLinux和ARM7的网络通信设计

作者: 时间:2013-04-12 来源:网络 收藏


*struct sockaddr:用来保存socket信息

struct sockaddr{unsigned short sa_family;/*地址族,AF_xxx*/

char sa_data[14]; /*14字节的协议地址*/};

*struct sockaddr_in;和来进行数据类型的转换

struct sockaddr_in{

short int sin_family; /*地址族*/

unsigned short int sin_port; /*端口号*/

sruct in_addr sin_addr; /*IP地址*/

unsigned cha sin_zero[8]; /*填充0,以保持与struct sockaddr同样大小*/};

至此,可经编出工程程序。在此给出部分下实现源代码及其Makefile文件的编写实例。

main()函数中部分代码如下:

int sockfd;

unsigned int uiip;

char szsendbuf[1024];

char head[8];

int*phead=head+4,nsize=1024,allsize=0;

struct sockaddr_in servaddr;

sockfd=socket(AF_INET,SOCK_STREAM,0);/*创建socket*/

bzero(servaddr,sizeof(struct sockaddr_in));

servaddr.sin_family=AF_INET;

servaddr.sin_port=8888;//htons(8888); /*指定通信端口*/将命令行输入的字符串IP转换为connect函数可识别的整数uiip。本来在Linux上开发时可以使用C库函数inet_pton(),但在的库中不支持该函数,因此只好自己实现该函数的功能。

aiptoi()如下所示:

aiptoi(argv[1],uiip);

servaddr.sin_addr.s_addr=uiip; /*指定连接的对端IP*/

connect(sockfd,(struct sockaddr)servaddr,sizeof(struct sockaddr));

/*连接对端接收代码*/

fp=fopen("kongzhi.htm","r"); /*打开控制页面*/

while(nsize==1024)

{bzero(szsendbuf,1024); /*每次从文件中读取巧024个字节发送出去,若读出少于1024字节结束*/

nsize=phead=fread(szsendbuf,1,1024,fp);/*从文件中读取并填入发送BUFFER中*/

write(sockfd,head,8);/*发送协议头*/
nsize=write(sockfd,szsendbuf,nsize);/*发送*/}

fclose(fp);

uCLinux中的Makefile需做的修改如下:

CC=gcc

COFF2FLAT=/uclinux/coff2flt-0.3/coff2flt

CFLAGS=-I/uclinux/uC-libc-pic/include

LDFLAGS=/uclinux/uC-libc-pic/libc.a

ethernet:Ethernet.o

$(CC)-o $@.coff ethernet.c $(CFLAGS)$(LDFLAGS)

$(COFF2FLAT)-o Ethernet ethernet.coff

cp Ethernet /Ethernet

clean:

rm -f Ethernet Ethernet.o

需要注意的是:①uCLinux中不带有pthread库,在编写网络程序要切记;②在uCLinux环境下,处理器(硬件)和内核黄素(软件)均不提供内存管理机制,所以程序的地址空间等同于内存的物理地址空间。在程序中可直接对I/O地址进行操作,而不需要申请和释放I/O空间,但需要用户自己来检查所操作的I/O地址的占用情况。

结语

由于工程广泛应用在嵌入式设备中,以往的文章只是泛泛地叙述网络通信设计的某一个方面。本文结合实际工程项目,从硬件电路的搭建、应用软件的设计要点。这对于在嵌入式设备中,特别是基于uCLinux的系统中应用网络通信有重要的参考意义。


参考文献:
[1].datasheet http://www.dzsc.com/datasheet/_589499.html.
[2]. DM9161 datasheet http://www.dzsc.com/datasheet/DM9161_264516.html.
[3]. RISC datasheet http://www.dzsc.com/datasheet/RISC_1189725.html.
[4]. ARM7TDMI datasheet http://www.dzsc.com/datasheet/ARM7TDMI_139812.html.
[5]. RTL8201 datasheet http://www.dzsc.com/datasheet/RTL8201_586322.html.
[6]. 100M datasheethttp://www.dzsc.com/datasheet/100M_2509927.html.
linux操作系统文章专题:linux操作系统详解(linux不再难懂)

linux相关文章:linux教程


数字通信相关文章:数字通信原理


通信相关文章:通信原理



上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭