用c从串口读取值

用c从串口读取值,c,serial-port,C,Serial Port,我从串行端口获取数据,即: i = 0 7e 126 i = 1 00 0 i = 2 02 2 i = 3 ffffff8a 4294967178 i = 4 03 3 i = 5 72 114 i = 6 7e 126 i = 7 00 0 i = 8 1d 29 i = 9 ffffff80 4294967168 i = 10 00 0 i = 11 7d 125 i = 12 33 51 i = 13 ffffffa2 429496

我从串行端口获取数据,即:

i = 0   7e 126
i = 1   00 0
i = 2   02 2
i = 3   ffffff8a 4294967178
i = 4   03 3
i = 5   72 114
i = 6   7e 126
i = 7   00 0
i = 8   1d 29
i = 9   ffffff80 4294967168
i = 10   00 0
i = 11   7d 125
i = 12   33 51
i = 13   ffffffa2 4294967202
i = 14   00 0
i = 15   40 64
i = 16   ffffffc2 4294967234
i = 17   40 64
i = 18   30 48
i = 19   27 39
i = 20   00 0
i = 21   23 35
i = 22   32 50
i = 23   36 54
i = 24   2e 46
i = 25   31 49
i = 26   32 50
i = 27   23 35
i = 28   34 52
i = 29   33 51
i = 30   2e 46
i = 31   32 50
i = 32   31 49
i = 33   23 35
i = 34   30 48
i = 35   2e 46
i = 36   35 53
i = 37   36 54
i = 38   23 35
i = 39   ffffffeb 4294967275
i = 40   7e 126
i = 41   00 0
i = 42   02 2
i = 43   ffffff8a 4294967178
i = 44   03 3
i = 45   72 114
i = 46   00 0
i = 47   30 48
i = 48   30 48
i = 49   30 48
i = 50   30 48
i = 51   30 48
i = 52   30 48
i = 53   30 48
i = 54   30 48
i = 55   30 48
i = 56   30 48
i = 57   30 48
i = 58   30 48
i = 59   30 48
i = 60   30 48
i = 61   30 48
i = 62   30 48
i = 63   30 48
i = 64   30 48
i = 65   30 48
i = 66   30 48
i = 67   30 48
i = 68   30 48
i = 69   30 48
i = 70   30 48
i = 71   30 48
i = 72   30 48
i = 73   30 48
i = 74   30 48
i = 75   30 48
i = 76   30 48
i = 77   30 48
i = 78   30 48
i = 79   30 48
i = 80   30 48
i = 81   30 48
i = 82   30 48
i = 83   30 48
i = 84   30 48
i = 85   30 48
i = 86   30 48
i = 87   30 48
i = 88   30 48
i = 89   30 48
i = 90   30 48
i = 91   30 48
i = 92   30 48
i = 93   30 48
i = 94   30 48
i = 95   30 48
i = 96   30 48
i = 97   30 48
i = 98   30 48
i = 99   30 48
i = 100   30 48
i = 101   30 48
i = 102   30 48
i = 103   30 48
i = 104   30 48
i = 105   30 48
i = 106   30 48
i = 107   30 48
i = 108   30 48
i = 109   30 48
i = 110   30 48
i = 111   30 48
i = 112   30 48
i = 113   30 48
i = 114   30 48
i = 115   30 48
i = 116   30 48
i = 117   30 48
i = 118   30 48
i = 119   30 48
i = 120   30 48
i = 121   30 48
i = 122   30 48
i = 123   30 48
i = 124   30 48
i = 125   30 48
i = 126   30 48
i = 127   30 48
i = 128   30 48
i = 129   30 48
i = 130   30 48
i = 131   30 48
i = 132   30 48
i = 133   30 48
i = 134   30 48
i = 135   30 48
i = 136   30 48
i = 137   30 48
i = 138   30 48
i = 139   30 48
i = 140   30 48
i = 141   30 48
i = 142   30 48
i = 143   30 48
i = 144   30 48
i = 145   30 48
i = 146   30 48
i = 147   30 48
i = 148   30 48
i = 149   30 48
i = 150   30 48
i = 151   30 48
i = 152   30 48
i = 153   30 48
i = 154   30 48
i = 155   30 48
i = 156   30 48
i = 157   30 48
i = 158   30 48
i = 159   30 48
i = 160   30 48
i = 161   30 48
i = 162   30 48
i = 163   30 48
i = 164   30 48
i = 165   30 48
i = 166   30 48
i = 167   30 48
i = 168   30 48
i = 169   30 48
i = 170   30 48
i = 171   30 48
i = 172   30 48
i = 173   30 48
i = 174   30 48
i = 175   30 48
i = 176   30 48
i = 177   30 48
i = 178   30 48
i = 179   30 48
i = 180   30 48
i = 181   30 48
i = 182   30 48
i = 183   30 48
i = 184   30 48
i = 185   30 48
i = 186   30 48
i = 187   30 48
i = 188   30 48
i = 189   30 48
i = 190   30 48
i = 191   30 48
i = 192   30 48
i = 193   30 48
i = 194   30 48
i = 195   30 48
i = 196   30 48
i = 197   30 48
i = 198   30 48
i = 199   30 48
i = 200   30 48
i = 201   30 48
i = 202   30 48
i = 203   30 48
i = 204   30 48
i = 205   30 48
i = 206   30 48
i = 207   30 48
i = 208   30 48
i = 209   30 48
i = 210   30 48
i = 211   30 48
i = 212   30 48
i = 213   30 48
i = 214   30 48
i = 215   30 48
i = 216   30 48
i = 217   30 48
i = 218   30 48
i = 219   30 48
i = 220   30 48
i = 221   30 48
i = 222   30 48
i = 223   30 48
i = 224   30 48
i = 225   30 48
i = 226   30 48
i = 227   30 48
i = 228   30 48
i = 229   30 48
i = 230   30 48
i = 231   30 48
i = 232   30 48
i = 233   30 48
i = 234   30 48
i = 235   30 48
i = 236   30 48
i = 237   30 48
i = 238   30 48
i = 239   30 48
i = 240   30 48
i = 241   30 48
i = 242   30 48
i = 243   30 48
i = 244   30 48
i = 245   30 48
i = 246   30 48
i = 247   30 48
i = 248   30 48
i = 249   30 48
i = 250   30 48
i = 251   30 48
i = 252   30 48
i = 253   30 48
i = 254   30 48
它是255缓冲区的打印结果。在该缓冲器中,7e 126是i=0处的起始位。该缓冲区254地址处的结束位为3048。现在我想从I=24打印到I=40。这是我读取串行数据的代码:

#include <sys/types.h>
      #include <sys/stat.h>
      #include <fcntl.h>
      #include <termios.h>
      #include <stdio.h>

      #define BAUDRATE B115200
      #define MODEMDEVICE "/dev/ttyUSB1"
      #define _POSIX_SOURCE 1 /* POSIX compliant source */
      #define FALSE 0
      #define TRUE 1

      volatile int STOP=FALSE; 

      main()
      {
        int fd,c, res, i;
        struct termios oldtio,newtio;
        char buf[255];

        fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); 
        if (fd <0) {perror(MODEMDEVICE); exit(-1); }

        tcgetattr(fd,&oldtio); /* save current port settings */

        memset(&newtio,'0', sizeof(newtio));
        //bzero(&newtio, sizeof(newtio));
        newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;

        /* set input mode (non-canonical, no echo,...) */
        newtio.c_lflag = 0;

        //newtio.c_cc[VTIME]    = 0;   /* inter-character timer unused */
        //newtio.c_cc[VMIN]     = 5;   /* blocking read until 5 chars received */

        tcflush(fd, TCIFLUSH);
        tcsetattr(fd,TCSANOW,&newtio);

        int k = 7e 126;
    int m = 30 48;
        while (STOP==FALSE) {       /* loop for input */
          memset(buf,'0', 255);
          res = read(fd,buf,255);   /* returns after 5 chars have been input */
          buf[res]=0;               /* so we can printf... */
      //printf("%d", res);
          //printf(":%s:%d\n", buf, res);
          for(i = 0; i<255; i++)
    if(i[0] == k && i[254] == m)
    {
        for(i = 24; i<25; i++)
          printf("i = %d   %02x %u\n", i, buf[i], buf[i]);
    }
          //printf("");
          if (buf[0]=='z') STOP=TRUE;
        }

        tcsetattr(fd,TCSANOW,&oldtio);
      }
#包括
#包括
#包括
#包括
#包括
#定义波特率B115200
#定义MODEMDEVICE“/dev/ttyUSB1”
#定义_POSIX_SOURCE 1/*兼容POSIX的源*/
#定义FALSE 0
#定义真1
volatile int STOP=FALSE;
main()
{
int fd,c,res,i;
结构termios oldtio、NERTIO;
char-buf[255];
fd=打开(MODEMDEVICE,O|RDWR | O|NOCTTY);

if(fd
for(i=0;iWhy't can't compile?您尝试时出了什么问题?@DavidSchwartz请参阅编辑部分中的错误
int k=7e 126;int m=30 48;
是语法错误。只需从第一个错误开始修复每个错误。您真的发现这些消息如此混乱吗?第一个看起来像是丢失的
\include
(赠品,它不知道退出是什么意思。它怎么知道呢?)。第二个看起来是一样的。第三个很明显。“7e 126”到底是什么意思?这是整数吗?以此类推。对不起,字符*将是,而不是int
serasync.c:22:42: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
         if (fd <0) {perror(MODEMDEVICE); exit(-1); }
                                          ^
serasync.c:26:9: warning: incompatible implicit declaration of built-in function ‘memset’ [enabled by default]
         memset(&newtio,'0', sizeof(newtio));
         ^
serasync.c:41:17: error: exponent has no digits
         int k = 7e 126;
                 ^
serasync.c:41:20: error: expected ‘,’ or ‘;’ before numeric constant
         int k = 7e 126;
                    ^
serasync.c:42:13: error: expected ‘,’ or ‘;’ before numeric constant
  int m = 30 48;
             ^
serasync.c:50:6: error: subscripted value is neither array nor pointer nor vector
  if(i[0] == k && i[254] == m)
      ^
serasync.c:50:19: error: subscripted value is neither array nor pointer nor vector
  if(i[0] == k && i[254] == m)
      for(i = 0; i<255; i++)
if(i[0] == k && i[254] == m)