如何正确地从串行构造缓冲区。
int serialCheckforBuffer (int fd)
{
int result ;
if (ioctl (fd, FIONREAD, &result) == -1)
return -1 ;
return result ;
}
int serialGetchar (int fd)
{
uint8_t x ;
if (read (fd, &x, 1) != 1)
return -1 ;
return ((int)x) & 0xFF ;
}
我正在这样阅读
for (;;)
{
while (serialCheckforBuffer (fd))
{
printf ("%02X", serialGetchar(fd));
fflush (stdout) ;
}
usleep(10000);
}
输出结果为“ 071E00000118”
我如何构造我的读取缓冲区以适合这样
struct obj_Properties
{
int Type;
int ID;
int Index;
unsigned int msb;
unsigned int lsb;
int chksum;
};
因此,如果我再次阅读,它将采用这种格式
struct obj_Properties prop;
printf ("%02X %02X %02X %02X %02X %02X", prop.Type, prop.ID, prop.Index, prop.msb, prop.lsb, prop.chksum);
我尝试了代码,但没有成功。也许我想念一些东西。
void buildBuffer(struct obj_Properties *buffer)
{
while((serialCheckforBuffer(fd)) == -1)
usleep(1000);
memcpy(buffer, &sBuffer, sizeof(struct obj_Properties));
}
在while循环中,不要循环打印输出值,而是分配它们:
prop.Type = serialGetchar(fd));
prop.ID = serialGetchar(fd));
prop.Index = serialGetchar(fd));
prop.msb = serialGetchar(fd));
prop.lsb = serialGetchar(fd));
prop.chksum = serialGetchar(fd));
printf ("%02X %02X %02X %02X %02X %02X", prop.Type, prop.ID, prop.Index, prop.msb, prop.lsb, prop.chksum);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句