SOS!从串口输入数据在网页中无法显示
时间:2010-06-12
来源:互联网
我想通过将串口输入的数据在网页中实时显示出来,但没能顺利实现,请教各位老师。
现状:所使用的硬件为m3C2410,希望通过向串口调试助手写入数据传给m3c2410并显示与对应的网页界面。
调试中现象:从网页向串口发送数据正常,从串口向网页发送命令异常,页面打印信息显示为读取串口失败,即“Read_Port(fd,rbuf,size)=-1”,百思不得其解,望各位老师指点迷津:
有关串口的设置如下:
int Open_Port(int i) //打开串口
{
struct termios options;
if(i==1)
fd1 = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK);
else if(i==2)
fd1 = open("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY);
else if(i==3)
fd1 = open("/dev/ttyS2", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd1==-1)
{
return -1;
}
fcntl(fd1, F_SETFL, 0); //fd1是文件句柄,F_SETFL设置文件状态标志和访问模式
bzero(&options,sizeof(options));
tcgetattr(fd1, &options);
cfsetispeed(&options, BAUDRATE);
cfsetospeed(&options, BAUDRATE);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_lflag &= ~(ICANON | ECHO | ECHOE |ISIG);
options.c_cflag &= ~CRTSCTS;
options.c_iflag &= ~(IXON | IXOFF | IXANY); // disable SW Flow Control
options.c_oflag &= ~OPOST;
tcsetattr(fd1, TCSANOW, &options);
return fd1;
}
main() 后面读串口,并在网页中给出提示信息:
Open_Port(1); //打开串口1,好像会影响CGI重定向,所以要多加权限
// Write_Port(Send,2); //发送数据
// Read_Port(rport,25);
// for(j=0; j<3; j++) //等待返回接收
// {
hh = read(fd1, rport,512);
if( hh > 0)
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head><title>DateBack</title>\n");
printf("<meta http-equiv=\"refresh\" content=\"5;URL=%s\">",Referer);
printf("</head>\n");
printf("<body>\n");
printf("<br><br><br>");
printf("<hr>");
printf("<div align=\"center\">");
printf("<h1> The lights states </h1>\n");
printf("\nReadWordLenth= %d\n",hh);
printf( "\n Input Words are :%s\n",rport); //字符串输出
printf("<hr>");
printf("<br><br>");
for(i=0;i<hh;i++)
printf( "\n%x\n",rport[i]); //字符串输出
rport[hh+1]= '\0';
printf("<br><br><br>");
printf("</div>");
printf("</body>\n");
printf("</html>\n");
fflush(stdout); //刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
}
else
{
// Write_Port(Send,2); //发送数据
kk = write(fd1, Send, 2);
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head><title>DateError!</title>\n");
printf("<meta http-equiv=\"refresh\" content=\"5;URL=%s\">",Referer);
printf("</head>\n");
printf("<body>\n");
printf("<br><br><br>");
printf("<div align=\"center\">");
printf("<h2>Read Serial port Failure数据读取失败!</h2>\n");
printf("\nRead Serial Data State = %d\n\r",hh);
printf("<br>");
printf("\nWrite Serial Data State = %d\n",kk);
printf("<hr>");
printf("</div>");
printf("</body>\n");
printf("</html>\n");
}
fcntl(fd1, F_SETFL, FNDELAY);//FNDELAY选项将导致当端口上没有字符可读时,read函数返回0,
Close_Port();
调试结果:
Read Serial port Failure数据读取失败!
nRead Serial Data State = -1
现状:所使用的硬件为m3C2410,希望通过向串口调试助手写入数据传给m3c2410并显示与对应的网页界面。
调试中现象:从网页向串口发送数据正常,从串口向网页发送命令异常,页面打印信息显示为读取串口失败,即“Read_Port(fd,rbuf,size)=-1”,百思不得其解,望各位老师指点迷津:
有关串口的设置如下:
int Open_Port(int i) //打开串口
{
struct termios options;
if(i==1)
fd1 = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK);
else if(i==2)
fd1 = open("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY);
else if(i==3)
fd1 = open("/dev/ttyS2", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd1==-1)
{
return -1;
}
fcntl(fd1, F_SETFL, 0); //fd1是文件句柄,F_SETFL设置文件状态标志和访问模式
bzero(&options,sizeof(options));
tcgetattr(fd1, &options);
cfsetispeed(&options, BAUDRATE);
cfsetospeed(&options, BAUDRATE);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_lflag &= ~(ICANON | ECHO | ECHOE |ISIG);
options.c_cflag &= ~CRTSCTS;
options.c_iflag &= ~(IXON | IXOFF | IXANY); // disable SW Flow Control
options.c_oflag &= ~OPOST;
tcsetattr(fd1, TCSANOW, &options);
return fd1;
}
main() 后面读串口,并在网页中给出提示信息:
Open_Port(1); //打开串口1,好像会影响CGI重定向,所以要多加权限
// Write_Port(Send,2); //发送数据
// Read_Port(rport,25);
// for(j=0; j<3; j++) //等待返回接收
// {
hh = read(fd1, rport,512);
if( hh > 0)
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head><title>DateBack</title>\n");
printf("<meta http-equiv=\"refresh\" content=\"5;URL=%s\">",Referer);
printf("</head>\n");
printf("<body>\n");
printf("<br><br><br>");
printf("<hr>");
printf("<div align=\"center\">");
printf("<h1> The lights states </h1>\n");
printf("\nReadWordLenth= %d\n",hh);
printf( "\n Input Words are :%s\n",rport); //字符串输出
printf("<hr>");
printf("<br><br>");
for(i=0;i<hh;i++)
printf( "\n%x\n",rport[i]); //字符串输出
rport[hh+1]= '\0';
printf("<br><br><br>");
printf("</div>");
printf("</body>\n");
printf("</html>\n");
fflush(stdout); //刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
}
else
{
// Write_Port(Send,2); //发送数据
kk = write(fd1, Send, 2);
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head><title>DateError!</title>\n");
printf("<meta http-equiv=\"refresh\" content=\"5;URL=%s\">",Referer);
printf("</head>\n");
printf("<body>\n");
printf("<br><br><br>");
printf("<div align=\"center\">");
printf("<h2>Read Serial port Failure数据读取失败!</h2>\n");
printf("\nRead Serial Data State = %d\n\r",hh);
printf("<br>");
printf("\nWrite Serial Data State = %d\n",kk);
printf("<hr>");
printf("</div>");
printf("</body>\n");
printf("</html>\n");
}
fcntl(fd1, F_SETFL, FNDELAY);//FNDELAY选项将导致当端口上没有字符可读时,read函数返回0,
Close_Port();
调试结果:
Read Serial port Failure数据读取失败!
nRead Serial Data State = -1
作者: yxg2007 发布时间: 2010-06-12
好ddddddddd
作者: kko8888 发布时间: 2010-06-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28