




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本科生实验报告实验课程学院名称信息科学与技术学院嵌入式系统专业名称软件工程学生姓名学生学号指导教师实验地点6a609实验成绩二o年 月二o年 月实验一键盘控制程序1. 实验题目及要求1.1实验题及目的实验题目:本次实验题目为基于linux的键盘控制实验 实验目的:学会编辑软件相关操作。熟悉交叉编译器的使用方法。了解lirmx文件的使用(键盘的操作)1.2实验要求要求:当按一个按键(09)时,把按键输入显示在数码 管中最后一位(数码管其他位不显示)。2. 实验流程图流程图如下:预定义设备文件名#define devicename n/dev/keypadn #define device_name
2、2 '7dev/serial_ledh定义键盘设备描述符intfd定义接收键盘输入的数组unsigned char buf2j 定义无输入键盘返lnl位char pre_scancode=()xff 定义数码管设备文件描述符int fd2 定义数码管输入0-9数据数组intbuf210 定义输入文件临时存储数组intdata10vc打开键盘设备fd =open(device_name,o_rdwr);.jf得到输入数据外先写入3个0在写入输入数据使得仅在 数码管最后一位显示数据datao=oxoo; write(fd2,data,1); write(fd2,data,1); write
3、(fd2,data,1); data0=buf2buf0; write(fd2,data,1);i(关闭数码管设备文件 ret = close(fd2);使用ctrl+c结束3. 实验步骤及结果1)在arm开发板上挂载虚拟机的文件夹2)建立nfs目录“keyboard”文件夹,创建并编辑keytest. 输入源代码。3)在ubuntu上交叉编译keytest. c程序。arm-1inuxgcc keytest. c -o keytest4)加载键盘和数码管驱动insmod pxa270_keyboard_drv. o5)运行程序并敲击按.观察结i./ keytest实验结果如下:4. 源代码#
4、include<stdio. h> #include<string. h> #include<stdlib. h> #include<fcntl. h> #include<unistd. h> #include<math. h>ttdefine device_name 7dev/keypa(fttdefine device_name2 /dev/serial_ledint main(void)int fd; int ret;unsigned char buf2; double x;char pre_scancode=oxf
5、f:int ret2; int fd2; int i, count:int buf210 : 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d 0x07, 0x7f, 0x6f:/ 0123456789 int data10:fd =open(device_name , 0_rdwr): if (fd=-l)printf cerr”);else buf0=0x22: while(1)read (fd, buf, 1):if (buf0!-pre_scancode)if (buf0!=0xff)printf (/zkey=%xnz,, buf 0); fd2 =
6、open(device_name2, 0_rdwr): printf("fd = %dn", fd2); if (fd2 = -1)elsedata0=0x00; write (fd2, data, 1); write (fd2, data, 1); write (fd2, data, 1); data0=buf2buf0; write (fd2, data, 1);ret = close (fd2):pre_scancode =buf0; usleep(5000): ret =close(fd):printf cet=%drt, ret):printf ("cl
7、ose keypad_driver testxn):实验三网络数据传输实验1. 实验题目及要求 1.1实验题及目的实验题目:嵌入式linux网络编程实验目的:熟悉limix的tcp/ip操作函数;掌握linux的编程方法;1.2实验要求要求:实现上位机(pc, ubuntu)串口 2与实验板(arm, 嵌入式limix)的tcp数据通信。该程序包括服务器端程序(sever) 和客户端程序(client)。ubuntu上运行服务器端程序(sever), arm实验板上运行客户端程序(client)。传输模拟转数字信号并存 入文件。编写 makefile 来编译 sever 和 client。2.
8、 实验流程图(对于模拟转数字信号只需把输出的valo和vail 传给buff即可)流程图如下:输川错误信息并结束 fprintf(stderr, "usage:./client hostname(or ip address) textn");exit(l);大于2#define port 4321 #define buffer.size 200定义sock设备fd传送的字竹数传送数据缓存区服务器信息结构体等 int sockfd,sendbytes; char bufbuffer_size; struct hostent *host; struct sockaddr in
9、serv addr;判断是否能够访问到n标服务器 if(host = gethostbyname(argv 1 j) = null)值不为null值为null输出错误信息并结朿: perrorcsocket);exit(l);设置sockaddr_in结构体屮朴i关函数 serv_addr.sin_family = af_inet; serv_addr.sin_port = htons(port); serv_addr.sin_addr = *(struct in_addr *)host -> h_addr); bzero(&(serv_addr.sin_zero), 8);se
10、rver 端:开始预定义端口号最人连接队列型号景数据缓存区人小#define port 4321 #define max_que_conn_nm 5 #define max_sock_fd fd_setsize #dcfinc buffer_size 200定义sockaddrjn结构体和一些临时变量设备fd以及数据缓存区 struct sockaddrjn serversockaddr,client_sockaddr; int sin_size,count;fd_set inset,tmp_inset; int sockfd,client_fd,fd; char bufbuffer_size
11、;打开失败打开成功显示错误信息外退出 perror(" socket”);exit(l);设置sockaddrjn结构体相大参数server_sockaddr.sin_family = afinet; server_sockaddr.sin.port = htons(port); server_sockaddr.sin_addr.s_addr = inaddr_any; bzero(&(server_sockaddr.sin_zero), 8);允许重兌使川木地地址与套接字进行绑定代码.丌始监听vy显示接收到的信息并打开文件 printf("receivedames
12、sagefrom %d: %sn, client_fd, buf);f=open("test.txtn,o_creatio_wronly);关闭文件 close(f);int j=0j+写入文件memcpy(&temp,buf+sizeof(int)*j,sizeof( int);lseek(f,()l,seek_end);sprintf(ctemp,n%(t,temp);write(f,ctemp,4);3. 实验步骤及结果1)在arm开发板上挂载虚拟机的文件夹记下arm板的ip2)建立nfs目录“test “文件夹,创建并编辑server, c和 client, c输入源
13、代码。3)编写makefile文件编译使server在本机下运行client 在arm板运行。4)make all5)加载驱动insmod pxa_ad_drv. o6)分别在本机和arm运行server和client并改变模拟信号 数据在server端观察结果./client 192. 168. 0. 100实验结果如下:45445445445445545445445445354rootubuntu: /mnt/test/adc_sfo文件(e)编辑(e查看(y)终箱(j)棚削 transferred 196 packages in total453 455454 454454455 454
14、454455 454454454454454454454454454455 455455454455454455 454 454454455 454r0s、vtest/adc sen ut est/adi454454454454455454455 455 454 454verhasserver/ssetsockopt (sockfd, sizeof (i);if (bind(sockfd, (struct sockaddr sizeof (struct sockaddr) = 一1) 氺)& server_sockaddr,4. 源代码及makefile文件 server, c:#in
15、cludesys/types. h> ttincludesys/socket. h ttinclude <stdio.h> ttinclude <stdlib. h> includestring. h> ttinclude <sys/time. h>include <fcntl. h>ttinclude <sys/ioctl. h>ttincludeunistd. h>ttincludenetinet/in. h>ttdefine port 4321ttdefine max que conn nm 5ttdef
16、ine max_sock_fd fd_setsizettdefine buffer_size 200int main() struct sockaddr in server sockaddr, client sockaddr;int sin_size, count:fd_set inset, tmp一inset;int sockfd, client_fd, fd;char bufbuffer_size;int f, temp, j:char ctemp10:if(sockfd = socket(af_inet, sock_stream, 0) = -1) perror (socket”); e
17、xit (1);server_sockaddr. sin_family = af_inet: server_sockaddr. sin_port = htons (port):server sockaddr. sin addr. s addr = inaddr any:bzero(&(server_sockaddr. sin_zero), 8);int i = 1;/允i午重复使用本ii地址与套接字进行绑定sol_socket, so_reuseaddr, &i,perror(bind); exit (1);if (listen(sockfd, max_que_conn_nm)
18、 = -1) perror (listen”); exit (1);printf (listening.nz/):/将调用socket ()函数的描述符作为文件描述符fd_zero(&inset):fd_set(sockfd, feinset): while (1)tmp_inset = inset:sin_size = sizeof(struct sockaddr_in); memset(buf, 0 ,sizeof (buf);/调用 select ()函null,null,if (! (select(max sock fd.null) 0)perror(select);for(f
19、d =0; fd < max_sock_fd: fd+) if (fd_isset(fd, &tmp_inset) >0 )if (fd = sockfd)/服务端接收客户端的连接请求(structif(client_fd = accept(sockfd,sockaddr *) & client_sockaddr, &sin_size) = -1) perror (accept); exit (1);fd_set(client_fd, &inset):printf(new connection from %d(socket)n,client_fd);
20、else /处理从客户端发来的消息if (count = recv(client_fd, buf, buffer_size,0) > 0)printf ("received a message from %d: %s %dn, client_fd, buf, count);f=open("test. txt", o_creat|o_wronly); for(j=0;j50;j+)memcpy(fetemp, buf+sizeof(int)*j, sizeof(int);lseek(f, ol, seek_end): sprintf (ctemp,,z%d z
21、/, temp): printf(ctemp): write (f, ctemp, 4):lseek(f, ol, seek_end): write (f, n strlen(,n/,);close (f);else close (fd);fd_clr(fd, &inset):printf (client %d (socket) has leftn,fd);close (sockfd);exit (0);client.c:ttincludettincludettincludettincludettinclude<stdio. h> <stdlib. h> <
22、;errno. h> string, h <netdb. h>ttinclude <sys/types. h>ttincludenetinet/in. h>ttinclude <sys/socket. h>includestring. h>ttinclude <fcntl. h>ttinclude <unistd. h>ttdefine device_name /dev/ad_ctr ttdefine ucb adc inp ado (4«2)ttdefine ucb adc inp adi (5«
23、;2),ttdefine ucb_adc_inp_ad2 (6«2) ttdefine ucb adc inp ad3 (7«2)ttdefine port 4321ttdefine buffer_size 200int main(int argc, char *argv) int fd; int ret; int valo, vail; int i;int sockfd, sendbytes: char bufbuffer_size; struct hostent 木host; struct sockaddr in serv addr;if(argc < 2)fpr
24、intf(stderr, "usage:./client hostname(or ip address)textn");exit (1);if (host = gethostbyname(argv1) = null) perror(gethostbyname); exit (1);/*创建 socket*/if(sockfd = socket(af_inet, sock_stream, 0) = -1) perror(socket); exit (1);/*设置sockaddr_in结构体中相关函数*/ serv_addr. sin_family = af_inet; se
25、rv_addr. sin_port = htons(port):serv_addr. sin_addr = *(struct in_addr *)host 一h_addr): bzero(&(serv_addr. sin_zero), 8);& serv_addr,a调用connect i数主动发对服务器的链接*/ if (connect (sockfd, (struct sockaddr *) sizeof(struct sockaddr) = -1) perror (connect”); exit (1);printf (nstart ad_ctl testnn); fd
26、= open(device_name, 0_rdwr); printf (fd =%dn, fd); if (fd=-l)printf("open device%s errorn", device_name); _ else ioctl (fd);memset(buf, 0, buffer_size); for (i=0;i50;i+)val0=ioctl(fd, ucb_adc_inp_ado, 0):/vall=ioctl(fd, ucb_adc_inp_ad1, 0): printf o;a发送消息给服务器端吟 /sprintf (buf, "val0=%d
27、", valo);/memcpy(buf+i*sizeof(int), &val0, sizeof(int); printf(buf);usleep (500000);if (sendbytes = send(sockfd, buf, buffer_size, 0)=-l) perror(send); exit (1);ret=close(fd):close(sockfd): printf (close testn); return 0;makefile 文件:cc=gcctcc=arm-1inux-gcc cflags=-wall all:client serverclie
28、nt:client.c $(cc) $< -o $server:server, c $(tcc) $< -o $clean:rm client server 氺 o实验二数码管控制程序1. 实验题目及要求1.1实验题及目的实验题目:本次实验题目为基于limix的数码管控制实验 实验目的:学会编辑软件相关操作。熟悉交叉编译器的使用方法。了解数码管的基本使用方法。1.2实验要求要求:编程实现从0到9999计数并显示在数码管上2. 实验流程图流程图如下:预定义数码管设备文件名#define device_name 7dev/serialjedn 定义数码管fd循环变量数码管0-9输入码 临吋数据存储数组int fd;int ret;int count,i;int buf210 = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f;3.实验步骤及结果1)在arm开发板上挂载虚拟机的文件夹2)建立nfs目录“test “文件夹,创建并编辑shumaguan. c 输入源代码。3)交叉编译armlinux-gcc shumaguan. c -o shumaguan4)加载键盘和数码管驱动i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国移动开封市2025秋招笔试行测题库及答案互联网运营
- 2025年上海市闵行区莘庄实验小学代课教师招聘考前自测高频考点模拟试题有完整答案详解
- 农药买卖合同合集15篇
- 同学聚会代表发言稿范文
- 2025年甘肃省金昌市事业单位招聘笔试模拟试卷附答案详解
- 2025年山东省公费师范生(定向临沂就业)竞岗选聘专项考试考前自测高频考点模拟试题附答案详解(完整版)
- 2025年济宁汶上县事业单位公开招聘工作人员(教育类)(33人)考前自测高频考点模拟试题完整参考答案详解
- 土地承包转让合同集锦15篇
- 2025年烟台市芝罘区卫生类事业单位公开招聘高层次人才(11人)考前自测高频考点模拟试题有答案详解
- 2025年老旧小区改造中居民功能需求与满意度影响因素分析报告
- GB/T 44823-2024绿色矿山评价通则
- GRR测量系统分析报告范例
- 教师师德师风专题培训
- 风机基础实施细则
- 《论语》阅读题之为政以德主题
- 生药鉴别细辛、牛膝、大黄、何首乌、川乌、附子演示文稿
- 水上客运企业安全风险辨识分级管控指南
- GB/T 7531-2008有机化工产品灼烧残渣的测定
- GB/T 12604.3-2005无损检测术语渗透检测
- 《行政组织学通论》配套教学课件
- 中控室消防值班记录表正式版
评论
0/150
提交评论