我在Windows上运行Perl有点新,在尝试运行avrdude.exe
以将HEX文件上传到Atmel微控制器时,系统命令出现了一些问题。这是我用来执行命令的命令的Perl:Perl系统()EXE权限?
$AVR_CMD = "\"".$AVR_DUDE."\"" . " -C" . "\"".$AVR_DUDE_CONF."\"";
$AVR_CMD .= " -v -v -v -v -patmega2560 -cstk500v2";
$AVR_CMD .= " -P\\\\.\\".$PORT;
$AVR_CMD .= " -b115200 -D -Uflash:w:". "\"".$HEX_FILE."\"". ":i";
system($AVR_CMD);
现在,我打印了最后的命令,以确保它是确定的,而且它似乎是。但是,在实际执行中似乎存在某种权限问题。当我复制并粘贴印刷命令到窗口终端,它导致这样的:
avrdude.exe: Version 5.11, compiled on Sep 2 2011 at 19:38:36
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is BLOCKED FOR SO
Using Port : \\.\COM4
Using Programmer : stk500v2
Overriding Baud Rate : 115200
avrdude.exe: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]
这是显然AVRDUDE正在使用正确的参数运行
。然而,当我运行使用system()
此命令,我收到这样的输出:
avrdude.exe: Version 5.11, compiled on Sep 2 2011 at 19:38:36
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is BLOCKED FOR SO
Using Port : \\.\COM4
Using Programmer : stk500v2
Overriding Baud Rate : 115200
avrdude.exe: ser_open(): can't open device "\\.\COM4": Access is denied.
avrdude.exe done. Thank you.
这使我相信,有某种在运行CMD命令,并通过system()
运行它之间权限的差异。如果有人可以提供一些有关这方面的见解或给我任何提示来解决这个问题,将不胜感激。事先感谢。 (基于一些代码this线程),我写了一个Perl脚本,发硬复位到爱特梅尔后调用avrdude.org:
编辑
#!/usr/bin/perl -w
use Win32::SerialPort qw(:STAT 0.19);
use FindBin qw($Bin);
#Do port reset
foreach (@ARGV)
{
if ($_ =~ /-P\\\\\.\\(.*)/)
{
print "Found -P argument - ";
print ("Resetting DTR on " . $1 . "\n");
$P1 = new Win32::SerialPort ($1);
$P1->pulse_dtr_on(1000);
last;
}
}
select(undef, undef, undef, 0.1);
print ("Executing avrdude\n");
system($Bin . "/avrdude.org " . join(" ", @ARGV));
然而,这仍然有同样的问题。如果Perl system()
调用与通过命令行运行的权限相同,那么为什么我可以在命令行中执行该命令,但是当我从Perl调用相同的EXE时,COM4访问受到限制? :S
Re“这使我相信在CMD中运行一个命令并通过'system()'运行它之间存在某种权限差别。”“不,没有。特别是因为你告诉Perl使用'cmd'! – ikegami
我很困惑,为什么我可以使用命令行访问avrdude中的COM4,但不能通过perl使用相同的命令......如果它们具有相同的权限设置,它应该不工作? – SuperTron
我已经说过,区别不在于Perl和Perl之间,而是问Perl和Perl之间的区别是什么,并不是有效的。 – ikegami