出现的问题及解决思路
变量名相近,比如wrnum,wrsum,在具体的使用过程中,很容易就出现问题,而且因为相近,这个问题出现在数组(例wrbuff[wrnum],wrbuff[sum])中时,不容易被发现:
解决:https://blog.csdn.net/u012314708/article/details/52130961
心得总结
程序的书写应该遵循层层递进的原则,比如说这次的232程序中的发送程序要包含起始位、数据位、校验位、停止位。如果一上来就直接把这些东西都包括进来,可能出现问题的地方太多,不利于问题的定位。所以,可以层层递进,先保证数据可以完整的被发送与接受,然后在增加起始位,停止位,把最容易出现问题的校验位的设置放到最后。
在使用while()死循环,很容易就让就让CPU跑到100%,适当加入一些sleep函数或者是usleep函数,可以在不影响程序运行的情况下,使得CPU的占用率降下来,一般还是使用usleep函数多一点。
fork()绝对是一个神奇的函数,可以被用来创建子进程,相当于把一个CPU一分为二,通过fork的不同返回值,只需要一个简单的if进行判断就可以进入到不同的程序中,让232的发送与接受做到了同时进行。
细节
异或运算:按照abcdefgh进行异或得到的结果,跟按照hgfedcba进行异或得到的结果是不相同的。
printf:多使用printf函数,把各种参数在程序运行过程中的变化显示出来,方便判断问题出在哪里,前面的renum、resum的问题就是通过这样的方法检查出来。
ASCII:控制字符虽然会影响到printf()函数的输出显示,但控制字符本身在内存还是占据存储空间的。只影响显示,不影响存储。
程序
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
#include <getopt.h>
#define SERIAL_DEV_DIR "/dev/ttyS2"
int set232port(int fd )
{
struct termi