如何从串口正确构建缓冲区。
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”
如何构建我的readed缓冲区以适合这样的
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));
}
答案 0 :(得分:0)
在你的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);