子函数中设置校验方式mark,space
2012-10-15 20:43
281 查看
#include <stdio.h> /*标准输入输出定义*/ #include <stdlib.h> /*标准函数库定义*/ #include <unistd.h> /*Unix 标准函数定义*/ #include <sys/types.h> /*系统类型定义*/ #include <sys/stat.h> /*系统状态定义*/ #include <fcntl.h> /*文件控制定义*/ #include <termios.h> /*PPSIX 终端控制定义*/ #include <errno.h> /*错误号定义*/ #include <string.h> int spaceSerialPort(int m_fd) //空校验 { int fd=m_fd; struct termios serialAttr; memset(&serialAttr, 0, sizeof serialAttr); serialAttr.c_cflag |= PARENB|CMSPAR|PARODD; if(tcsetattr(fd, TCSANOW, &serialAttr) !=0) //配置立刻起作用 { perror("serial error"); return -1; } return 0; } int main(void) { int fd = -1; const char *devName = "/dev/ttyUSB0"; fd = open(devName, O_RDWR|O_NONBLOCK); if (fd < 0) { return -1; } struct termios serialAttr; memset(&serialAttr, 0, sizeof serialAttr); serialAttr.c_iflag = IGNPAR; serialAttr.c_cflag = B9600 | HUPCL | CS8 | CREAD | CLOCAL; serialAttr.c_cc[VMIN] = 0; //serialAttr.c_cflag |= PARENB|CMSPAR|PARODD; if (tcsetattr(fd, TCSANOW, &serialAttr) != 0) { return -1; } spaceSerialPort(fd); while(1) { char addr = 0x01; write(fd, &addr, 1); usleep(90000); } }
2012年10月18日20:50:48:
突然想想,mark,space还没搞准确,就来这个,先试试用子函数来改奇偶校验试试
#include <stdio.h> /*标准输入输出定义*/ #include <stdlib.h> /*标准函数库定义*/ #include <unistd.h> /*Unix 标准函数定义*/ #include <sys/types.h> /*系统类型定义*/ #include <sys/stat.h> /*系统状态定义*/ #include <fcntl.h> /*文件控制定义*/ #include <termios.h> /*PPSIX 终端控制定义*/ #include <errno.h> /*错误号定义*/ #include <string.h> int spaceSerialPort(int m_fd) //空校验 { int fd=m_fd; struct termios serialAttr; memset(&serialAttr, 0, sizeof serialAttr); serialAttr.c_cflag |= PARENB;//JI serialAttr.c_cflag &= ~PARODD; if(tcsetattr(fd, TCSANOW, &serialAttr) !=0) //配置立刻起作用 { perror("serial error"); return -1; } return 0; } int main(void) { int fd = -1; const char *devName = "/dev/ttySAC1"; fd = open(devName, O_RDWR|O_NONBLOCK); if (fd < 0) { return -1; } struct termios serialAttr; memset(&serialAttr, 0, sizeof serialAttr); serialAttr.c_iflag = IGNPAR; serialAttr.c_cflag = B9600 | HUPCL | CS8 | CREAD | CLOCAL | PARENB; serialAttr.c_cflag |= PARODD; //JI serialAttr.c_cc[VMIN] = 0; //serialAttr.c_cflag |= PARENB|CMSPAR|PARODD; if (tcsetattr(fd, TCSANOW, &serialAttr) != 0) { return -1; } spaceSerialPort(fd); while(1) { char addr = 0x03; write(fd, &addr, 1); usleep(90000); } }
2012年10月18日21:08:18:实验通过,在此铭记!!!!!是可以通过子函数来更忙串口的校验方式的!!!!!
================================================================================================================
2012年10月21日14:54:34:
0.3:
#include <stdio.h> /*标准输入输出定义*/ #include <stdlib.h> /*标准函数库定义*/ #include <unistd.h> /*Unix 标准函数定义*/ #include <sys/types.h> /*系统类型定义*/ #include <sys/stat.h> /*系统状态定义*/ #include <fcntl.h> /*文件控制定义*/ #include <termios.h> /*PPSIX 终端控制定义*/ #include <errno.h> /*错误号定义*/ #include <string.h> struct termios serialAttr; int spaceSerialPort(int m_fd) //空校验 { int fd=m_fd; serialAttr.c_cflag |= PARENB | PARODD | CMSPAR;//ou if(tcsetattr(fd, TCSANOW, &serialAttr) !=0) //配置立刻起作用 { perror("serial error"); return -1; } return 0; } int markSerialPort(int m_fd) // { int fd=m_fd; serialAttr.c_cflag |= PARENB | CMSPAR;//ou serialAttr.c_cflag &= ~PARODD; if(tcsetattr(fd, TCSANOW, &serialAttr) !=0) //配置立刻起作用 { perror("serial error"); return -1; } return 0; } int main(void) { int fd = -1; const char *devName = "/dev/ttySAC1"; fd = open(devName, O_RDWR|O_NONBLOCK); if (fd < 0) { return -1; } memset(&serialAttr, 0, sizeof serialAttr); serialAttr.c_iflag = IGNPAR; serialAttr.c_cflag = B9600 | HUPCL | CS8 | CREAD | CLOCAL ; serialAttr.c_cflag |= PARODD; //JI serialAttr.c_cc[VMIN] = 0; if (tcsetattr(fd, TCSANOW, &serialAttr) != 0) { return -1; } spaceSerialPort(fd); while(1) { char addr = 0x03; write(fd, &addr, 1); usleep(90000); } }
==================================================================================================================
2012年10月21日17:33:56:
v0.4
#include <stdio.h> /*标准输入输出定义*/ #include <stdlib.h> /*标准函数库定义*/ #include <unistd.h> /*Unix 标准函数定义*/ #include <sys/types.h> /*系统类型定义*/ #include <sys/stat.h> /*系统状态定义*/ #include <fcntl.h> /*文件控制定义*/ #include <termios.h> /*PPSIX 终端控制定义*/ #include <errno.h> /*错误号定义*/ #include <string.h> struct termios serialAttr; const char data[]={0x02,0x01,0x05}; int spaceSerialPort(int m_fd) //空校验 { int fd=m_fd; serialAttr.c_cflag |= PARENB | PARODD | CMSPAR;//ou if(tcsetattr(fd, TCSANOW, &serialAttr) !=0) //配置立刻起作用 { perror("serial error"); return -1; } return 0; } int markSerialPort(int m_fd) // { int fd=m_fd; serialAttr.c_cflag |= PARENB | CMSPAR;//ou serialAttr.c_cflag &= ~PARODD; if(tcsetattr(fd, TCSANOW, &serialAttr) !=0) //配置立刻起作用 { perror("serial error"); return -1; } return 0; } int main(void) { int fd = -1; const char *devName = "/dev/ttySAC1"; char read_buf[33]; fd = open(devName, O_RDWR|O_NONBLOCK); if (fd < 0) { return -1; } memset(&serialAttr, 0, sizeof serialAttr); serialAttr.c_iflag = IGNPAR; serialAttr.c_cflag = B9600 | HUPCL | CS8 | CREAD | CLOCAL ; serialAttr.c_cflag |= PARODD; //JI serialAttr.c_cc[VMIN] = 0; if (tcsetattr(fd, TCSANOW, &serialAttr) != 0) { return -1; } while(1) { printf("hw\n"); char addr = 0x02; char i = 0; markSerialPort(fd); write(fd, &addr, 1); usleep(1000); spaceSerialPort(fd); write(fd, data, 3); usleep(90000); read(fd,read_buf,sizeof read_buf); for(i=0;i<33;i++) { printf("%u",read_buf[i]); } printf("\n"); } }
结果:
[root@FriendlyARM mark]# ./a
hw
233014694194567891921718192021222324253233342003738394041130
hw
233014694194567891921718192021222324253233342003738394041130
hw
233014694194567891921718192021222324253233342003738394041130
hw
233014694194567891921718192021222324253233342003738394041130
结论:不丢数了,是因为我成功的搞好mark校验了,本来就不应该丢数!!!!
=================================================================================================================================
2012年11月4日15:25:25:更新至:单片机串口调试丢包验证过程记录
相关文章推荐
- 串口通信校验方式(even,odd,space,mark)
- 串口通信校验方式(even,odd,space,mark)
- 串口通信校验方式(even,odd,space,mark)
- Linux串口通讯(mark, space校验方式的实现)
- 串口通信校验方式(even,odd,space,mark)
- 串口通信校验方式(even,odd,space,mark)
- Linux串口通讯(mark, space校验方式的实现)
- 串口通信校验方式(even,odd,space,mark)UART数据波形分析
- 串口通信校验方式(even,odd,space,mark) 分类: 开发工具 2015-07-31 16:01 5人阅读 评论(0) 收藏
- S3C2440串口mark和space校验
- 做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
- 设置JVM参数的几种方式解决java.lang.OutOfMemoryError:Java heap space
- vs2012设置tab为4个space的方式
- 做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
- PHP在函数中使用static变量来加载和设置配置文件
- vim开发配置,函数颜色格式设置
- 一个18位身份证校验计算函数
- dll的def文件与__declspec(dllexport)导出函数方式比较
- 在ASP.NET中以编程方式设置母版页
- JS 设置与获取Cookie,函数setCookie(name,value,time)getCookie(name)