(嵌入式软件设计)SYSTEM-2440开发平台

一、实验内容

1、 完成S3C2440开发板的基本测试任务。

在PC机上运行DNW.exe,在configuration中设置为:COM1,波特率为115200,USBPort中地址选择0x32000000


开发板上电或复位后,在DNW中敲入任意键进入Bootloader功能界面,如下图:


在DNW中输入“0”进入USB下载并运行,出现“USBhost is connected.waiting a download.” 说明USB正确枚举了,这时可以通过USB下载了。在DNW中选择“USB Port”下的”Transmit”选项,选择SYSTEM-2440A_Test.bin 这个映像文件,接着点击打开,这样就开始下载了。下载结束后,会自动运行。出现如下界面,然后可以分别进行相关外围资源测试,分别有:蜂鸣器测试(Test PWM),实时时钟测试(RTC time display),ADC测试(Test ADC),按键测试(Testinterrupt and key scan),触摸屏测试(Test Touchpanel),LCD 测试(Test LCD),红外线测试(Test IrDA),IIC 测试(Test IIC EEPROM),音频输出测试(UDA1341 playmusic),音频输入测试(UDA1341 recird voice)。


1、 编写Hello World!,完成编译,下载到开发板运作。

首先需要启动Linux,进入Bootloader的主功能菜单后,选择“7”对启动参数进行配置,在接着出现的选项中输入“0”进行启动系统选择设置,然后回车,在出现“please  enter value:”的提示下,输入1(1为Linux系统,3为WIN CE系统),然后回车,接着再进行一次回车(相当于输入15号退出功能),将会提示“Do you want to saveparameters? press y or Y for save.”,这时输入“y”,这样就将该参数保存了。如下图所示,退出后返回上一级界面,选择“5”从Nand Flash上启动程序。


然后在虚拟机上实验程序,hello.c代码如下:

#include<stdio.h>
int main()
{
	      printf(“Hello World!\n”);return 0;
}

由于虚拟机没有安装交叉编译软件包,所以需要将硬盘中“Linux源码和工具”下“toolchain”文件夹下的编译工具arm-linux-3.4.1.tar.bz2拷贝linux系统下的某个目录下,然后进入该目录,执行解包命令

#tar  –xjvf  arm-linux-3.4.1.tar.bz2,

之后可编辑/etc/bashrc文件,在最后添加路径export   PATH=/usr/local/arm/3.4.1/bin:$PATH,以后编译内核或其他应用程序均可用arm-linux-来指定交叉编译器。最后可以echo $PATH查看环境变量中是否有/usr/local/arm/3.4.1/bin路径变量。

然后用编译hello.c文件,用如下命令:

#arm-linux-gcc–o hello hello.c

生成hello文件,将文件传送至开发板,发现传送过程有很多乱码,最后采用超级终端代替DNW软件的使用,于是重新设置。首先打开超级终端,基本设置与DNW软件差不多即可,这样就不需要USB线了。在终端下使用命令进入tmp目录,因为这是开发板与外部提供的交互的地方,然后点击传送文件,将hello文件送入开发板。

传送至开发板以后,由于外部文件进入至开发板会失去“可执行”属性,估需要重新添加上去,命令如下:

#chmod +x hello

修改成可执行文件以后就可以去运行了,执行命令“./hello”运行即可,超级终端会反馈开发板的信息显示“Hello World!”。

1、 编写UDP通信,完成第3章的例2.

由于实验过程中出现一些问题,开发板与虚拟机之间的通信效果不理想,最后降低了实验要求,在虚拟机之间开启两个终端进行通信进行通信,实验采用可见Linux编程基础.ppt上的130页的程序代码,代码如下:

client.c
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define DEST_PORT 3000
#define DSET_IP_ADDRESS "192.168.0.104"
int main()
{
	int sock_fd;/*套接字文件描述符*/
	int send_num;
	int recv_num;
	int dest_len;
	char send_buf[20]={"hello tiger"};
	char recv_buf[20];
	struct sockaddr_in addr_serv;/*服务端地址,客户端地址*/
	sock_fd = socket(AF_INET,SOCK_DGRAM,0);//创建套接子
	//初始化服务器端地址
	memset(&addr_serv,0,sizeof(addr_serv));
	addr_serv.sin_family = AF_INET;
	addr_serv.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);
	addr_serv.sin_port = htons(DEST_PORT);
	dest_len = sizeof(struct sockaddr_in);
	printf("begin send:\n");
	send_num = sendto(sock_fd,send_buf,sizeof(send_buf),0,(struct sockaddr *)&addr_serv,dest_len);
	if(send_num < 0){
		perror("sendto");
		exit(1);
	}else{
		printf("send sucessful:%s\n",send_buf);
	}
	recv_num = recvfrom(sock_fd,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&addr_serv,&dest_len);
	if(recv_num <0 ){
		perror("recv_from");
		exit(1);
	}else{
		printf("recv sucessful\n");
	}
	recv_buf[recv_num]='\0';
	printf("the receive:%s\n",recv_buf);
	close(sock_fd);
return 0;
}

需要注意的是#define DSET_IP_ADDRESS定义的ip地址换成虚拟机的ip地址,查看ip地址的命令用“ifconfig”命令即可。

server.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>
#define SERV_PORT 3000
int main()
{
	int sock_fd;
	int recv_num;
	int send_num;
	int client_len;
	char recv_buf[20];
	struct sockaddr_in addr_serv;
	struct sockaddr_in addr_client;
	sock_fd = socket(AF_INET,SOCK_DGRAM,0);
	if(sock_fd < 0){
		perror("socket");
		exit(1);
	}else{
		printf("sock sucessful\n");
	}
	memset(&addr_serv,0,sizeof(struct sockaddr_in));
	addr_serv.sin_family = AF_INET;//协议族
	addr_serv.sin_port = htons(SERV_PORT);
	addr_serv.sin_addr.s_addr = INADDR_ANY;
	client_len = sizeof(struct sockaddr_in);
	if(bind(sock_fd,(struct sockaddr *)&addr_serv,sizeof(struct sockaddr_in))<0)
	{
		perror("bind");
		exit(1);
	}else{
		printf("bind sucess\n");
	}
	while(1){
		printf("begin recv:\n");
		recv_num = recvfrom(sock_fd,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&addr_client,&client_len);
		if(recv_num < 0){
			printf("bad\n");
			perror("again recvfrom");
			exit(1);
		}else{
			recv_buf[recv_num]='\0';
			printf("recv sucess:%s\n",recv_buf);
		}
		printf("begin send:\n");
		send_num = sendto(sock_fd,recv_buf,recv_num,0,(struct sockaddr *)&addr_client,client_len);
		if(send_num < 0){
			perror("sendto");
			exit(1);
		}else{
			printf("send sucessful\n");
		}
	}
	close(sock_fd);
	return 0;		
}

分别编译生成可执行文件,开两个中断,首先运行service程序,然后运行client程序。显示结果如下:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值