我正在读取停止位编码数据流,我需要能够识别具有停止位的字节。
我的代码片段:
const unsigned char *b; // Pointer to the datastream
...
// Test the sign bit
-> if (*b & 0x40)
{
// Negative number, do relevant stuff
...
}
while(true)
{
-> if (!(*b & 0x80))
{
// Not the stopbit
...
}
else
{
// Reached the stopbit, breaking out of the loop
...
b++;
break;
}
b++;
}
此功能在紧密循环中运行,需要实时工作。我用箭头标记了探查器显示为" hot"的行,它们是符号位和停止位的测试。
任何想法如何优化这些操作(特别是符号位测试,因为它似乎需要更多时间,即使它不在循环中)?
编辑: 之前应该已经提到过,指针b在循环中使用,因此我不能在while()中迭代。
答案 0 :(得分:0)
我将while(true)
与循环内的(附加)测试结合起来。
但是我不确定这是否真的是问题,因为"而不是停止位" -code很可能比位测试花费的时间更长。
unsigned char c = 1;
while ( !((c=*p++) & 0x80)) {
// Not the stop bit stuff
printf ("%d\n", c);
}
// stop bit reached stuff