我有一个嵌入式linux盒子,附带perl 5.10和GSM调制解调器。 我编写了一个简单的perl脚本来通过调制解调器设备文件(/ dev / ttyACM0)读/写AT命令。
如果我将一个类似“ATZ \ r”的simle命令写入调制解调器并等待响应,我会收到非常奇怪的数据,例如“\ n \ n \ nATZ \ n \ n0 \ n \ nOK \ n \ n \ n \ n \ nATZ \ n \ n \ n \ n ...“并且数据不断进入。看起来反应似乎与其他数据混淆。
我希望像“ATZ \ nOK \ n”这样的东西(如果启用了回声)。
如果我手动发送“ATZ”命令,例如minicom一切都按预期工作。
这让我觉得它可能是某种perl缓冲问题,但这只是猜测。
我在perl中打开设备就像这样(我的嵌入式linux perl安装上没有Device :: Serialport):
open(FH, "+<", "/dev/ttyACM0") or die "Failed to open com port $comport";
并一次读取一个字节的响应:
while(1) {
my $response;
read(FH, $response, 1);
printf("hex response '0x%02X'\n", ord $response);
}
我是否缺少一些初始化或其他东西才能做到这一点?
此致 克劳斯
答案 0 :(得分:2)
我认为你不需要while循环。此代码应发送ATZ命令,等待响应,然后打印响应:
open(FH, "+>", "/dev/ttyACM0") or die "Failed to open com port $comport";
print FH ("ATZ\n");
$R = <FH>;
print $R;
close(FH);
答案 1 :(得分:2)
这可能与截断有关。尝试更改“+&gt;”进入“+&lt;”。
或者它可能与缓冲有关,在open()之后尝试unbuffering输出:
select((select(FH), $| = 1)[0]);
答案 2 :(得分:0)
感谢您的回答。虽然不是我问题的明确答案,但它确实让我走上正轨。
正如mti2935所指出的,这确实不是一个perl问题,而只是一个配置问题。
使用&#34; stty&#34;带有以下参数的命令在&#34;期望&#34;中设置我的串口。模式:
也可以使用组合设置&#34; raw&#34;以正确的方式设置所有这些参数。
-