Windows で Perl を実行するのは初めてでavrdude.exe
、HEX ファイルを Atmel マイクロコントローラーにアップロードしようとしているときに、システム コマンドに問題が発生しています。これらは、コマンドを実行するために使用している Perl コマンドです。
$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);
今、私は最終的なコマンドを印刷して、問題がないことを確認しています。ただし、実際の実行には何らかの権限の問題があるようです。印刷されたコマンドをコピーして Windows ターミナルに貼り付けると、次のようになります。
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 でコマンドを実行する場合と .xml を介してコマンドを実行する場合に、何らかの権限の違いがあると思われますsystem()
。誰かがこれについて洞察を提供したり、この問題を解決するためのヒントを教えてくれたりすると、大歓迎です. 事前に感謝します。
編集: Atmel にハード リセットを送信した後に avrdude.org を呼び出す Perl スクリプトを作成しました (このスレッドのコードに基づいて):
#!/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));
ただし、これにはまだ同じ問題があります。Perlsystem()
呼び出しがコマンド ラインで実行するのと同じ権限を持っている場合、コマンド ラインでコマンドを実行できるのに、Perl から同じ EXE を呼び出すと COM4 アクセスが制限されるのはなぜですか? :S