嵌入式系统实验串行端口程序设计Word格式文档下载.docx
- 文档编号:19751457
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:7
- 大小:26.34KB
嵌入式系统实验串行端口程序设计Word格式文档下载.docx
《嵌入式系统实验串行端口程序设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验串行端口程序设计Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
学生姓名
班级学号
学院(系)
专业
电子信息工程
实验类型
验证试验
实验学时
4
2012.6.18
一、实验目的和要求
目的:
了解在linux环境下串行程序设计的基本方法,掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用,学习使用多线程来完成串口的收发处理。
要求:
读懂程序源代码,学习终端I/O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中
二、实验环境(实验设备)
硬件:
UP-NETARM2410-S嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。
软件:
PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境
三、实验原理及内容
实验内容:
了解在linux环境下串行程序设计的基本方法。
掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。
学习使用多线程来完成串口的收发处理要求
实验步骤:
1、阅读理解源码
进入exp\basic\03_tty目录,使用vi编辑器阅读理解源代码。
源代码如下:
#include<
termios.h>
stdio.h>
unistd.h>
fcntl.h>
sys/signal.h>
pthread.h>
#defineBAUDRATEB115200
#defineCOM1"
/dev/ttyS0"
#defineCOM2"
/dev/ttyS1"
#defineENDMINITERM27/*ESCtoquitminiterm*/
#defineFALSE0
#defineTRUE1
volatileintSTOP=FALSE;
volatileintfd;
voidchild_handler(ints)
{
printf("
stop!
!
\n"
);
STOP=TRUE;
}
/*--------------------------------------------------------*/
void*keyboard(void*data)
intc;
for(;
;
){
c=getchar();
if(c==ENDMINITERM){
break;
returnNULL;
/*modeminputhandler*/
void*receive(void*data)
readmodem\n"
while(STOP==FALSE)
read(fd,&
c,1);
/*comport*/
write(1,&
/*stdout*/
exitfromreadingmodem\n"
void*send(void*data)
intc='
0'
senddata\n"
while(STOP==FALSE)/*modeminputhandler*/
c++;
c%=255;
write(fd,&
usleep(100000);
}
intmain(intargc,char**argv)
structtermiosoldtio,newtio,oldstdtio,newstdtio;
structsigactionsa;
intok;
pthread_tth_a,th_b,th_c;
void*retval;
if(argc>
1)
fd=open(COM2,O_RDWR);
else
fd=open(COM1,O_RDWR);
//|O_NOCTTY|O_NONBLOCK);
if(fd<
0){
error(COM1);
exit(-1);
tcgetattr(0,&
oldstdtio);
tcgetattr(fd,&
oldtio);
/*savecurrentmodemsettings*/
newstdtio);
/*getworkingstdtio*/
newtio.c_cflag=BAUDRATE|CRTSCTS|CS8|CLOCAL|CREAD;
/*ctrolflag*/
newtio.c_iflag=IGNPAR;
/*inputflag*/
newtio.c_oflag=0;
/*outputflag*/
newtio.c_lflag=0;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VTIME]=0;
/*nowcleanthemodemlineandactivatethesettingsformodem*/
tcflush(fd,TCIFLUSH);
tcsetattr(fd,TCSANOW,&
newtio);
/*setattrib*/
sa.sa_handler=child_handler;
sa.sa_flags=0;
sigaction(SIGCHLD,&
sa,NULL);
/*handledyingchild*/
pthread_create(&
th_a,NULL,keyboard,0);
th_b,NULL,receive,0);
th_c,NULL,send,0);
pthread_join(th_a,&
retval);
pthread_join(th_b,&
pthread_join(th_c,&
/*restoreoldmodemsetings*/
tcsetattr(0,TCSANOW,&
/*restoreoldttysetings*/
close(fd);
exit(0);
2、编译应用程序
运行make产生term可执行文件
[root@zxtroot]#cd/arm2410s/exp/basic/03_tty/
[root@zxt03_tty]#make
armv4l-unknown-linux-gcc-c-oterm.oterm.c
armv4l-unknown-linux-gcc-o../bin/termterm.o-lpthread
armv4l-unknown-linux-gcc-otermterm.o-lpthread
[root@zxt03_tty]#ls
MakefileMakefile.baktermterm.cterm.otty.c
3、下载调试
切换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录。
进入exp\basic\03_tty目录,运行term,观察运行结果的正确性。
[root@zxtroot]#minicom
[/mnt/yaffs]mount-tnfs-onolock192.168.0.56:
/arm2410s/host
[/mnt/yaffs]cd/host/exp/basic/03_tty/
[/host/exp/basic/03_tty]./term
readmodem
senddata
123456789:
<
=>
?
@ABCDEFGHIJKLMNOPQRSTUVWX
由于内核已经将串口1作为终端控制台,所以可以看到term发出的数据,却无法看到开发主机发来的数据,可以使用另外一台主机连接串口2进行收发测试。
Ctrl+c可使程序强行退出。
四、实验小结(包括问题和解决方法、心得体会、意见与建议等)
本次实验,对串行口在嵌入式系统中的应用有了初步的了解。
在源程序的阅读理解中有一定的困难,由于对嵌入式实验平台和Linux的不熟悉,具体操作步骤操作起来有些困难和不理解。
五、指导教师评语
成绩
批阅人
日期
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 实验 串行 端口 程序设计