版友好
我是在 Linux 写 C。之前写了一个 process ,是 1个 byte 1 个 byte 读取的
blocking 程式,每读1个byte就检查是否是 header,但被说写得不好。
于是乎再写了一个 non-blocking的,主要是先蒐集我想要的长度后,再检查是否是
header。
protocol header 如下:
byte0 sig1 (0xab)
byte1 sig2 (0xba)
byte2 id
byte3 packet length
byte4 seq num
概念上,我会读取 uart fd,读到的 rcv_len 加总起来,若有我达到的长度
就去检查这5个byte是不是有 header。 只要看到 0xab 0xba 我就认定是一个
header 的起始。也有可能这2个byte出现在这5个byte的任何地方,甚至 byte4
会是 0xab,此时我们就有可能需要再读取1个byte来做判定是否有header。当我发
现一个header时,我就会从此header到结尾整个位移到packet的起始。并回传 left
值,此left值代表意思是说,我还需要读取几个byte来做判定。 我感觉我这写法满
囉嗦的,WAIT_HEADER status这样写,WAIT_PAYLOAD status也会这样写,后面势必
一大坨,但又想不出啥更好的方法,所以想来求助一下版友看有没有更好的写法?
这是我的范例 code: https://reurl.cc/bzrez3
恳请建议,谢谢。