私はWindows上でPerlを実行するのにちょっと新しく、avrdude.exe
を実行して、HEXファイルをAtmelマイクロコントローラにアップロードしようとしているときにシステムコマンドにいくつか問題があります。私はそれがOKであることを確認するために、最後のコマンドを印刷しています、今Perl system()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);
を、そしてあるように思わ:これらは、Perlは私がコマンドを実行するために使用していますコマンドです。しかし、実際の実行には何らかのパーミッションの問題があるようです。私は窓の端子に印刷されたコマンドをコピーして貼り付けると、それがこの結果に:明らかに正しいパラメータで実行されてAVRDUDEさ
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.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()
を通してそれを実行している間の権限の違いのいくつかの並べ替えがあることを信じるように私をリード:私はsystem()
を使用してこのコマンドを実行するときしかし、私はこの出力を受け取ります。誰かがこれに関するいくつかの洞察力を提供するか、この問題を改善するためのヒントを私に与えることができれば、それは非常に高く評価されるだろう。事前に感謝します。
EDIT:私はアトメルにハードリセットを送信した後avrdude.orgを呼び出すPerlスクリプトを書いた(thisのスレッドでいくつかのコードに基づく):
#!/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()
コールがコマンドラインで実行しているのと同じ権限を持っている場合、なぜコマンドラインでコマンドを実行できますか?同じEXEをPerlから呼び出すとCOM4アクセスは制限されますか? :S
Re "これは、CMDでコマンドを実行してから' system() 'で実行する場合に、ある種の権限の違いがあると考えています。 "、いいえ、ありません。特にPerlに 'cmd'を使うように言ったからです! – ikegami
私は、コマンドラインを使ってavrdudeでCOM4にアクセスできる理由について混乱していますが、同じコマンドを使用しているperlではなく...同じアクセス権設定をしている場合は、動作しませんか? – SuperTron
私は既に違いがPerlとPerlとの間ではなく、PerlとPerlとの違いが生産的でないことを私に尋ねています。 – ikegami