在没有 LF CR 的情况下处理传入的串行流
Process incoming serial stream without LF CR
下面的代码一次处理传入的 RS232 串行数据 1 个字符并且工作正常。
然而,在我的用例中,传入的串行提要不包含任何 CR 或 LF 字符,这使得进一步 delimiting/processing 管道程序变得困难。
结束分隔符始终是 !感叹号而不是 CR 或 LF。例如123456!abcdef!qwerty!
有没有办法修改下面的代码来替换!字符到 CR(回车 return)?比如传入的字符串是123456abcdef!那么程序应该替换!带有 CR,因此它输出 123456abcdef
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringSerial.h>
int main ()
for (;;)
{
putchar (serialGetchar (fd)) ;
fflush (stdout) ;
}
}
char c = serialGetchar (fd)) ;
c = (c == '!') ? '\r' : c ;
putchar (c) ;
或者,换句话说,
char c = serialGetchar (fd)) ;
if (c == '!') c = '\r' ;
putchar (c) ;
您可以在与以下相同的单个字符基础上执行此操作:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringSerial.h>
int main ()
for (;;)
{
char c = serialGetchar (fd);
putchar (c == '!' ? '\r' : c) ;
fflush (stdout) ;
}
}
通常使用带有回车return的新行,在这种情况下将是:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringSerial.h>
int main ()
for (;;)
{
char c = serialGetchar (fd);
if (c == '!')
{
putchar ('\r') ;
putchar ('\n') ;
}
else
{
putchar (c) ;
}
fflush (stdout) ;
}
}
您可以将整个代码替换为
for(;;)
{
char c = serialGetchar (fd);
if(c == '!')
{
putchar('\n');
}
else
{
putchar(c);
fflush (stdout);
}
}
写入 '\n'
后无需刷新标准输出 - 这样做会自动触发刷新。因此,作为一个小的优化,此代码不会在找到 '!'
.
时刷新 stdout 两次
下面的代码一次处理传入的 RS232 串行数据 1 个字符并且工作正常。
然而,在我的用例中,传入的串行提要不包含任何 CR 或 LF 字符,这使得进一步 delimiting/processing 管道程序变得困难。 结束分隔符始终是 !感叹号而不是 CR 或 LF。例如123456!abcdef!qwerty!
有没有办法修改下面的代码来替换!字符到 CR(回车 return)?比如传入的字符串是123456abcdef!那么程序应该替换!带有 CR,因此它输出 123456abcdef
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringSerial.h>
int main ()
for (;;)
{
putchar (serialGetchar (fd)) ;
fflush (stdout) ;
}
}
char c = serialGetchar (fd)) ;
c = (c == '!') ? '\r' : c ;
putchar (c) ;
或者,换句话说,
char c = serialGetchar (fd)) ;
if (c == '!') c = '\r' ;
putchar (c) ;
您可以在与以下相同的单个字符基础上执行此操作:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringSerial.h>
int main ()
for (;;)
{
char c = serialGetchar (fd);
putchar (c == '!' ? '\r' : c) ;
fflush (stdout) ;
}
}
通常使用带有回车return的新行,在这种情况下将是:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringSerial.h>
int main ()
for (;;)
{
char c = serialGetchar (fd);
if (c == '!')
{
putchar ('\r') ;
putchar ('\n') ;
}
else
{
putchar (c) ;
}
fflush (stdout) ;
}
}
您可以将整个代码替换为
for(;;)
{
char c = serialGetchar (fd);
if(c == '!')
{
putchar('\n');
}
else
{
putchar(c);
fflush (stdout);
}
}
写入 '\n'
后无需刷新标准输出 - 这样做会自动触发刷新。因此,作为一个小的优化,此代码不会在找到 '!'
.