Forum: Compiler & IDEs Flashen von Arduino


von werner P. (wernerp)


Angehängte Dateien:

Lesenswert?

Hallo,
ich bin neu bei AVR-GCC aber nicht bei C/C++ und Micro-Kontrollern.

Ich habe ein Arduino mit der gleichnamigen Software. Das Flashen über 
USB klappt dort sehr gut.
Nun bin ich auf AVR Studio 5 umgestiegen und wollte ein Programm auf 
Arduino flashen. Dazu habe ich eine .bat für AVRdude geschrieben, siehe 
anhängende Datei. Der Output enthält den Fehler:

C:\Users\wps_2\Desktop>mode com7 BAUD=19200 DATA=8 PARITY=N dtr=on
Status von Gerät COM7:
----------------------
    Baudrate:        19200
    Parität:         None
    Datenbits:       8
    Stoppbits:       1
    Timeout:       OFF
    XON/XOFF:        OFF
    CTS-Handshaking: OFF
    DSR-Handshaking: OFF
    DSR-Prüfung:     OFF
    DTR-Signal:      ON
    RTS-Signal:      ON

C:\Users\wps_2\Desktop>F:\WinAVR-20100110\bin\avrdude -c stk500v1 -p 
m168 -P \\.\com7 -U 
flash:w:G:\Projekte\AVR\Studio-5\AVR-Frequenzzaehler\AVR-Frequenzzaehler 
\Debug\AVR-Frequenzzaehler.hex

avrdude: invalid file format 
'\Projekte\AVR\Studio-5\AVR-Frequenzzaehler\AVR-Frequenzzaehler\Debug\AV 
R-Frequenzzaehler.hex'  in update specifier

avrdude: error parsing update operation 
'flash:w:G:\Projekte\AVR\Studio-5\AVR-Fr
equenzzaehler\AVR-Frequenzzaehler\Debug\AVR-Frequenzzaehler.hex'

C:\Users\wps_2\Desktop>if 1 == 0 goto fertig

Ich habe es auch mit -c arduino versucht, gleiches Problem.
Hat jemand eine Idee was da flasch läuft?

Gruß wernerP.

von Helfer (Gast)


Lesenswert?

Dein AVRdude.bat
1
REM
2
echo %1
3
if %1=="" goto fertig
4
mode com7 BAUD=19200 DATA=8 PARITY=N dtr=on
5
F:\WinAVR-20100110\bin\avrdude -c stk500v1 -p m168 -P \\.\com7 -U flash:w:G:\Projekte\AVR\Studio-5\%1\%1\Debug\%1.hex
6
if %ERRORLEVEL%==0 goto fertig
7
Pause
8
:fertig
9
exit

Laut deiner Beschreibung hat AVRDUDE Probleme mit dem Format der Datei
G:\Projekte\AVR\Studio-5\AVR-Frequenzzaehler\AVR-Frequenzzaehler\Debug\A 
VR-Frequenzzaehler.hex
aber nicht mit der Hardware an sich.

Dass die Hardware richtig angesprochen wird, könntest du nachprüfen mit
1
REM
2
echo %1
3
if %1=="" goto fertig
4
mode com7 BAUD=19200 DATA=8 PARITY=N dtr=on
5
F:\WinAVR-20100110\bin\avrdude -c stk500v1 -p m168 -P \\.\com7 -vv > "C:\output.txt" 2>&1
6
if %ERRORLEVEL%==0 goto fertig
7
Pause
8
:fertig
9
exit
und dann die Ausgabedatei C:\output.txt betrachten.

Ich würde die Datei
G:\Projekte\AVR\Studio-5\AVR-Frequenzzaehler\AVR-Frequenzzaehler\Debug\A 
VR-Frequenzzaehler.hex
zum Betrachten hier abladen und/oder es mit einem kürzeren Pfad 
probieren z.B. mit einer lokalen Kopie
1
REM
2
echo %1
3
copy G:\Projekte\AVR\Studio-5\%1\%1\Debug\%1.hex %1.hex
4
if %1=="" goto fertig
5
mode com7 BAUD=19200 DATA=8 PARITY=N dtr=on
6
F:\WinAVR-20100110\bin\avrdude -c stk500v1 -p m168 -P \\.\com7 -U flash:w:%1.hex
7
if %ERRORLEVEL%==0 goto fertig
8
Pause
9
:fertig
10
exit

von werner P. (wernerp)


Angehängte Dateien:

Lesenswert?

Hallo Helfer,
vielen Dank für Deine umfangreiche Antwort.
Hier die Output.txt mit arduino. Mit stk500v1 kommt das Gleicher heraus.

Gruß wernerP

von Helfer (Gast)


Lesenswert?

Laut Ausgabe Output.txt klemmt die Verbindung zwischen PC und Arduino.

Bei einer Netzsuche mit der exakten Fehlermeldung "avrdude: 
stk500_getsync(): not in sync: resp=0x00" erscheinen sehr viele Treffer.

Vielversprechend sind die Diskussionen im Arduino Forum z.B. die in 
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1187909552
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1248528012
...

Um das Problem weiter einzugrenzen, beschaffe folgende Informationen:
Welchen Arduino hast du?
Wie bist du auf die Portbezeichnung \\.\com7 gekommen?

Oben schreibst du
>> Ich habe ein Arduino mit der gleichnamigen Software. Das Flashen über
>> USB klappt dort sehr gut.

Beim Flashen aus der Arduino-IDE heraus wird ebenfalls AVRDUDE benutzt. 
Hast du mal die Kommandozeile dort mit deiner Kommandozeile verglichen?

Um in der Arduino-IDE an die AVRDUDE-Kommandozeile heran zu kommen, 
kannst du mit einem Hack arbeiten. Du erzeugst dir ein Programm, das die 
Kommandozeile ausgibt und speicherst das an die Stelle des originalen 
AVRDUDE (Arduino-IDE=>hardware=> tools=>avr=>bin, Backup anfertigen!).

Beispielcode für diesen DOS-Hack:
1
#include <stdio.h>
2
3
int main(int argc, char **argv)
4
{
5
  while(argc--) {
6
    printf("%s ", *argv++);
7
  }
8
  return 0;
9
}

Die Kommandozeile erscheint dann in der Arduino-IDE in dem unteren 
Protokollbereich, wenn du ein Upload machst. Der Upload selber 
funktioniert damit natürlich nicht, dafür musst du wieder das gerettete 
originale Avrdude benutzen.

In einem nächsten Schritt würde ich die so ermittelte Kommandozeile in 
ein Batchfile schreiben und damit ein Upload außerhalb der Arduino-IDE 
probieren. Ggf. die Debugausgabe ergänzen und -vv > "C:\output.txt" 2>&1 
anhängen.

von werner P. (wernerp)


Lesenswert?

Hallo Helfer,
nochmal vielen Dank für die wieder sehr ausführliche und informative 
Antwort.
Ich habe mir zwischen einen AVRDragon bestellt. Mal sehen ob es mit dem 
geht. Ich werde berichten.
Ich habe leider nicht soviel Zeit, jeden Tag hier herein zu schauen.

Zu dem Problem, ich habe die Kommunikation mit der Arduino-Software noch 
einmal getestet. Die läuft einwandfrei.

Könnte es sein, das AVRdude Probleme mit dem Bootloader vom Arduino hat.
So wie ich gesehen habe war in der Fehlermeldung etwas von "in update 
specifier" ausgesagt.
Ich habe hier ein scheinbar neues Modell mit einem ATmega168 im TQFP 32 
Gehäuse. Ansonsten ist eigentlich nicht viel anders an der Platine wie 
bei den Version mit Dual-inline Gehäuse.

Gruß wernerP

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

werner P. schrieb:
> Könnte es sein, das AVRdude Probleme mit dem Bootloader vom Arduino hat.

Das ist ja kein Bootloader, sondern ein separater Prozessor.  Der
wiederum muss das /RESET des eigentlichen Arduino-Prozessors erstmal
aktivieren, deshalb funktioniert es auch nicht mit -p stk500v1,
sondern immer nur mit -p arduino.  (Leider haben die Jungs von
Arduino früher ein gehacktes AVRDUDE mit verteilt, bei dem sie sich
nicht die Mühe gemacht haben, einen eigenen arduino-Programmer zu
erzeugen, sondern stk500v1 gehackt hatten.)

Die Fehlermeldung im ersten Beitrag hat aber andere Ursachen: wenn
man unter Windows eine komplette -U-Option mit dem vollständigen
Pfad (einschließlich "Laufwerk") angeben will, dann muss die
abschließende Bezeichnung des Dateiformats (hier also ":i" für
"Intel Hex") zwingend angegeben werden.  Anders ist AVRDUDE nicht
in der Lage, die Optionen
1
-U flash:w:f:r

(Datei "f" soll als "raw binary" in den Flash geschrieben werden)

und
1
-U flash:w:c:f

(Datei "c:f" soll mit automatischer Formaterkennung in den Flash
geschrieben werden)

auseinander zu klamüsern.  Im zweiten Beispiel würde es "f"
als Bezeichnung des Dateiformats vermuten (da es nach dem dritten
Doppelpunkt steht), und nicht als Datei "c:f".  Daher muss man
1
-U flash:w:c:f:a

schreiben.

Allerdings deutet die Antwort 0x00 darauf hin, dass da irgendwas
grundlegend mit der Kommunikation im Argen ist.  Man kann beim
STK500-v1-Protokoll die serielle Kommunikation übrigens einfach mit
einem Terminalprogramm "zu Fuß" testen.  Wenn man eine 0, gefolgt
von einem Leerzeichen sendet, dann muss die Antwort 0x14 0x10
lauten.  Sendet man eine 1 (ASCII 0x21), gefolgt von einem
Leerzeichen, dann kommt als Antwort 0x14 "AVR STK" 0x10.

von Helfer (Gast)


Lesenswert?

Kann ich bestätigen. Das :i sieht man auch in der Kommandozeile an 
AVRDUDE, wenn man die Arduino-IDE spioniert.

Der Schlüssel für die Funktion wird der rechtzeitige RESET des Atmega168 
auf dem Arduinoboard (welches genau?) vor dem Flashen sein.

Durch den RESET wird ja der Bootloader auf dem Arduinoboard aktiviert, 
so dass er anschliessend mit dem AVRDUDE zusammen arbeitet.

Im ersten Beitrag soll die Zeile
> mode com7 BAUD=19200 DATA=8 PARITY=N dtr=on
und dort konkret das dtr=on den RESET auslösen.

Nun gibt es Arduinoboards, deren RESET auf die das Wackeln auf der DTR 
Leitung reagieren und es gibt welche, die auf das Wackeln auf der RTS 
Leitung reagieren...

Statt der mode Zeile könnte man auch mal eine Pause im Batchfile 
probieren den RESET-Button auf dem Arduinoboard manuell drücken (plus 
ENTER um die Pause aufzuheben). Das wäre unabhängig von der DTR oder RTS 
Problematik.

Die RESET-Maßnahme sollte mit modernen AVRDUDE Versionen (unter anderem 
auch mit deiner avrdude: Version 5.10, compiled on Jan 19 2010 at 
10:45:23 siehe c:\Output.txt) und arduino als Programmertyp nicht mehr 
nötig sein (so wie Jörg auch geschrieben hat). AVRDUDE macht dabei den 
Reset im Programm nach der DTR und der RTS Methode.
http://www.mail-archive.com/avrdude-dev@nongnu.org/msg01815.html

Eine weitere positive Maßnahme wäre die Erhöhung der Baudrate von 19200 
auf 57600.

von wernerP (Gast)


Lesenswert?

Hallo Jörg, hallo Helfer,
vielen Dank für Eure Antworten.
Sowas habe ich mir schon gedacht, dass der Reset vom FT232RL über DTR, 
bzw. RTS ausgelößt wird. Der RTS hängt über 100 Ohm am Reset, der DTR 
über 100nF auch am Reset des Prozessors. Das mitgelieferte Schaltbild 
paßt leider nicht ganz zu meinem Board, dort ist der 28 polige Prozessor 
gezeichnet. Auch finde ich die eingezeichnete Brücke in der DTR-Leitung 
(JSR) nicht auf meinem Board nicht (gegrüßt sei Franzis). Das Board hat 
die Version 1.2.
Mal sehen ob ich morgen dazu komme die Kommandozeile zu hacken. Auf 
jeden Fall werde ich das mit der Pause mal ausprobieren. Ich 
experimentiere mal mit dem DTR, bzw. dem RTS. Es wäre ja möglich, dass 
ich von meinem Script aus den DTR garnicht aktivieren darf, damit 
AVRdude den Reset auslöst. Ich hatte halt gedacht, da ist eine RS232 im 
Spiel (Anzeige im mode) und DTR muss auf jeden Fall aktiv sein. Es fragt 
sich nur, wer spielt hier Terminal und wer Data set :-).

Gruß wernerP.

von Helfer (Gast)


Lesenswert?

Ah, jetzt kommen wir der Sache näher.

Der "Arduino" von Franzis ist eigentlich ein Freeduino, ein 
kompatibler zu Arduino Duomilanova (s. Seiten 36-37 in
http://www.elv-downloads.de/Assets/Produkte/9/951/95116/Downloads/95116_Leseprobe.pdf)

IMHO seltsam, dass man ein "Lernpaket Arduino" bewirbt und dann den 
Nachbau Freeduino benutzt. Kann man verstehen, muss man aber nicht.

Bei älteren Arduino Duomilanova besteht der Jumper RESET-EN aus einer 
Lötbrücke direkt zwischen USB-Buchse und FT232L Chip vgl. 
http://www.arduino.cc/en/Main/ArduinoBoardDuemilanove Ab Werk ist das 
Auto-Reset Feature aktiviert, d.h. zwischen den Lötpads des RESET-EN ist 
eine Leiterbahn gezogen, die man zum Abschalten des Auto-Reset 
durchtrennen kann. Mit einer Lötbrücke über RESET-EN kann man dann das 
Auto-Reset wieder ermöglichen. Bei neueren Arduino Duomilanova fehlt 
dieses Durchtrennfeature (zum Missvergnügen einiger 
Shield-Entwickler/User).

Beim Franzis Board ist das laut Schaltplan anders gelöst. Der Jumper 
in der DTR Leitung ist im Franzis-Schaltplan mit JRS bezeichnet.
(s. Seite 38 in
http://www.elv-downloads.de/Assets/Produkte/9/951/95116/Downloads/95116_Leseprobe.pdf)

Es gibt anscheinend keine Leiterbahn dazwischen. D.h. der Jumper 
müsste gesetzt sein, damit ein Auto-Reset über DTR überhaupt erst 
möglich ist. Das widerspricht deiner erfahrung, dass das Programmieren 
aus der Arduino-IDE heraus problemlos ist (d.h. Aotoreset funktioniert 
irgendwie).

In Produktfotos finde ich den JRS aber nicht. Müsste man an der vor sich 
liegenden Platine oder guten Fotos der beiden Platinenseiten genauer 
untersuchen.

Andere Vorgehensweise...

Ich habe mal eine Mitschrift gemacht, wie meine Arduino-IDE den bei der 
IDE enthaltenen AVRDUDE aufruft. Dazu habe ich die Datei preferences.txt 
im Arduinopaket gesucht (bei mir im Ordner lib) und darin die Zeile
1
upload.verbose = true

ergänzt, um viel AVRDUDE Debugausgabe zu bekommen. Ohne diese Zeile ist 
upload.verbose auf false (= keine Debugausgabe) eingestellt.

Die Debugausgabe selbst kann mit der Maus im Arduino-IDE Fenster 
markiert und mit CONTROL-C kopiert werden. CONTROL-V dann zum Einfügen 
hier:
1
Binary sketch size: 450 bytes (of a 14336 byte maximum)
2
E:\ELEKTRONIK\SB_AVR\ARDUINO-0022\hardware/tools/avr/bin/avrdude -CE:\ELEKTRONIK\SB_AVR\ARDUINO-0022\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega168 -cstk500v1 -P\\.\COM1 -b19200 -D -Uflash:w:f:\temp\build6209700480019652803.tmp\BareMinimum.cpp.hex:i 
3
4
avrdude: Version 5.4-arduino, compiled on Oct 11 2007 at 19:12:32
5
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
6
7
         System wide configuration file is "E:\ELEKTRONIK\SB_AVR\ARDUINO-0022\hardware/tools/avr/etc/avrdude.conf"
8
9
         Using Port            : \\.\COM1
10
         Using Programmer      : stk500v1
11
         Overriding Baud Rate  : 19200
12
avrdude: ser_open(): setting dtr
13
avrdude: Send: 0 [30]   [20] 
14
avrdude: Send: 0 [30]   [20] 
15
avrdude: Send: 0 [30]   [20] 
16
avrdude: Recv: 
17
avrdude: stk500_getsync(): not in sync: resp=0x05
18
avrdude: Send: Q [51]   [20] 
19
avrdude: Recv: 
20
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
21
22
avrdude done.  Thank you.

Nicht wundern! Es ist klar, warum der Upload bei mir scheitert: Ich habe 
kein Arduinoboard angeschlossen, sondern die IDE blind bedient.

Ich empfehle dir dringend, ebenfalls eine solche Mitschrift zu machen. 
Das erleichtert die Suche nach Lösungen ungemein!

Was dann noch offen wäre:

# Die original Kommandozeile aus der Arduino-IDE in dem Batchfile 
verwenden.

# Das ggf. neuere AVRDUDE und AVRDUDE.conf aus den WinAVR Tools mit den 
ggf. älteren aus der Arduino-IDE zu vergleichen.

# Die manuelle Reset-Methode auszuprobieren. Wie oben beschrieben 
unmittelbar vor dem Start von AVRDUDE odr vielleicht auch unmittelbar 
nach dem Start von AVRDUDE.

von wernerP (Gast)


Lesenswert?

Hallo Helfer,
das mit dem upload.verbose hat mich ein ganzes Stück weiter gebracht. 
Das Ergebnis siehe beiliegendes File. Es hnadelt sich um ein avrdude: 
Version 5.4-arduino.
Das Interessante, sie verwenden mit -CG ein 408 kByte großes 
Konfigurationsfile avrdude.conf.
An der riesigen Command-line wundert mich schon einiges:
1. -v -v -v -v    versteht das avrdude nicht beim ersten mal?
2.-patmega168 und -P\\.\COM7     ich finde in meiner Doku v5.11 nur -P 
<port>

Was in meinem Script fehlt, natürlich der Config-File -CG <...> und das 
Format am ende von -U<flash:w:...:i>

Du hattest Recht mit der Kommandozeile, mit der richtigen Einstellung 
funktioniert es auch.

Ich war von Anfang an skeptisch mit Fran... . Die Leute haben sich immer 
noch nicht an ein offenes Umgehen mit ihrer Kundschaft gewöhnt. Aber ich 
muß mich bei Euch und FRAN... bedanken, das war ein guter 
Schnelleinstieg in die Kommunikation mit AVRdude und Arduino. Das sind 
die verborgenen Chancen, die man mit solchen Lehrpaketen haben kann, 
wenn man entsprechende Berater findet.

Nochmals Danke und Gruß wernerP.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

wernerP schrieb:

> Das Ergebnis siehe beiliegendes File.
1
return EATTACHMENTMISSING;

> Es hnadelt sich um ein avrdude:
> Version 5.4-arduino.

Also hornalt. ;-)  Dort musst du -c stk500v1 benutzen, das ist ja
deren gehackte Version.

Wenn du AVRDUDE 5.10 (oder 5.11.1, das wäre die aktuelle) benutzt,
dann stattdessen -c arduino.

> Das Interessante, sie verwenden mit -CG ein 408 kByte großes
> Konfigurationsfile avrdude.conf.

Was ist daran interessant?  Mittlerweile ist es bereits über 500 KiB
groß.

> An der riesigen Command-line wundert mich schon einiges:
> 1. -v -v -v -v    versteht das avrdude nicht beim ersten mal?

Mit jedem -v wird der `verbosity level' erhöht.  Mehr als 4 hat aber
meines Wissens keine weitere Wirkung, mit 4 jedoch bekommt man den
kompletten Dump der Kommunikation.

> 2.-patmega168 und -P\\.\COM7     ich finde in meiner Doku v5.11 nur -P
> <port>

-p ist der "part name", also der AVR-Typ.  -P nennt die Schnittstelle.

> Was in meinem Script fehlt, natürlich der Config-File -CG <...>

Die Option heißt übrigens -C <filename>.  Wenn du -CG schreibst, würde
"G" als Dateiname angenommen werden.

Die Option ist nur nötig, wenn sich die Konfigurationsdatei nicht da
befindet, wo sie beim Compilieren mittels ./configure festgelegt
worden war.  Nun gut, auf Windows wird sie fast nie an dieser Stelle
liegen ...

von Helfer (Gast)


Lesenswert?

Klasse, dass du jetzt ein Stück weiter gekommen bist.

Die mehrfachen -v in der Kommandozeile bewirken pro -v eine immer 
ausführlichere Debugausgabe. Ein -v schaltet die erste Debuginfo an 
(Version etc.); die weiteren dann bis zum Protokoll jedes einzelnen 
übertragen Bytes...

von wernerP (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich muste vorhin schnell was erledigen, da hab ich den Anhang in der 
Eile vergessen. Hier ist er.
Das mit dem "-v ... -v" ist nicht besonders anwenderfreundlich. Besser 
von meiner Seite wäre -v1, ... oder -v4.
Ich weiß im Moment noch nícht welche Version ich verwende, muß ich erst 
ausprobieren ob es auch mit 5.11 und vor allem mit der neuen 
Config-Datei funktioniert.
Das mit -p und -P hab ich leider übersehen. Aber normalerweise sind die 
Optionen in der Doku alphabethisch sortiert, aber das muß so ein 
...UX-Problem zu sein. Das Alphabet startet manchmal mit p, b, c, ... P 
usw. :-).
Was ist eigentlich mit der preferenzes.txt?
Ist die in die avrdude.conf integriert?

Gruß wernerP.

von werner P. (wernerp)


Lesenswert?

Hallo,
habs vergessen, mit -v -v -v -v bekommt man auch die Kommandozeile 
ausgegeben.
Ich weiß nicht wievele -v man dazu braucht, aber mit 4 geht es.

Was bedeutet nun -vv ? Es steht, glaube ich nicht in der Doku.

Gruß wernerP.

von Helfer (Gast)


Lesenswert?

-vv ist eine Zusammenfassung von -v -v

preferences.txt ist die Konfigurationsdatei der Arduino-IDE 
(Entwicklungsumgebung) und avrdude.conf ist die der 
ISP-Programmiersoftware AVRDUDE. Die haben nichts direkt miteinander zu 
tun.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

wernerP schrieb:

> Das mit dem "-v ... -v" ist nicht besonders anwenderfreundlich. Besser
> von meiner Seite wäre -v1, ... oder -v4.

Nö.  Meist braucht man ja nur ein einzelnes -v, und dann wäre der
Parameterzwang zu -v1 weniger anwenderfreundlich.  -vvvv braucht
man ja nur zum Debuggen.

> Das mit -p und -P hab ich leider übersehen. Aber normalerweise sind die
> Optionen in der Doku alphabethisch sortiert, aber das muß so ein
> ...UX-Problem zu sein.

Was hat das mit Unix zu tun?

Der Autor hat sich einfach entschieden, entgegen den Gepflogenheiten
die Option -p obendran zu setzen, wahrscheinlich, weil es (wenn man
sich einen Standard-Programmer im .avrduderc eingerichtet hat) der
einzige Pflichtparameter ist; entsprechend steht das ja auch in der
SYNOPSIS-Zeile.  Die gibt's aber vermutlich nur in der man page,
nicht in der weitestgehend parallel gepflegten texinfo-Doku.  Für
alle Fälle hier nochmal:
1
AVRDUDE(1)               BSD General Commands Manual               AVRDUDE(1)
2
3
NAME
4
     avrdude - driver program for ''simple'' Atmel AVR MCU programmer
5
6
SYNOPSIS
7
     avrdude -p partno [-b baudrate] [-B bitclock] [-c programmer-id]
8
             [-C config-file] [-D] [-e] [-E exitspec[,exitspec]] [-F]
9
             [-i delay] [-n] [-O] [-P port] [-q] [-s] [-t] [-u]
10
             [-U memtype:op:filename:filefmt] [-v] [-x extended_param] [-V]
11
             [-y] [-Y]
12
13
DESCRIPTION
14
     Avrdude is a program for downloading code and data to Atmel AVR micro-
15
     controllers.  Avrdude supports Atmel's STK500 programmer, Atmel's AVRISP
16
...

von werner P. (wernerp)


Lesenswert?

Hallo Helfer,
vielen Dank für Deine Antwort.
Mich irritiert da, dass es in Arduino beide Dateien gibt
preferences.txt    -->  arduino-0022\lib
avrdude.conf       -->  hardware\tools\avr\etc

Das "upload.verbose = true" hat in der preferences.txt funktioniert.
Es ist dann wohl eine reine Arduino-Datei, oder?

Gruß wernerP

von werner P. (wernerp)


Lesenswert?

Hallo Jörg,
bitte beachte den Smily, war nicht so gemeint.
Nur wenn man dummerweise das -P gefunden hat, dann vermutet man nicht 5 
Seiten vorher noch ein -p.

Ich berichtige: Besser von meiner Seite wäre -v, -v1 ... oder -v3.

Wenn ich die Ausgabe umlenken will muß es bei verbose-Grad 4 heißen:

-vvvv > "output.txt" 2>&1     Nein! Funktioniert nur mit -vv.

Übrigens an alle:

Mit der AVRdude Version 5.11 funktioniert das Flushen nur wenn man

-carduino          und nicht            stk500v1  !!!!!

angibt.
Mit der Originalversion avrdude 5.4 funktioniert es auch mit stk500v1.

Die .conf-Files müssen immer zur avrdude-Version passen.

Die Leitung DTR an der V.24/RS232 schalte ich im Sript auch nicht mehr 
ein.

Gruß wernerP.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

werner P. schrieb:

> Ich berichtige: Besser von meiner Seite wäre -v, -v1 ... oder -v3.

Geht nicht.  Eine Option nimmt entweder Parameter oder eben keine,
aber nicht mal so, mal so.  Anders wäre es nicht machbar, dass man
Optionen zusammenfassen kann: -tuF ist äquivalent zu -t -u -F (oder
eben, -vvvv ist äquivalent zu -v -v -v -v).

> Wenn ich die Ausgabe umlenken will muß es bei verbose-Grad 4 heißen:
>
> -vvvv > "output.txt" 2>&1     Nein! Funktioniert nur mit -vv.

Dann musst du dich bei deiner Shell beklagen.  Selbstverständlich
funktioniert das mit einer "richtigen" Shell, und ich bin mir
eigentlich auch reichlich sicher, dass ich das bereits im cmd.exe
getan habe.  Habe aber gerade kein Windows zur Hand zum Testen.
Es sollte der Shell auch schnurzpiepegal sein, wie das Kommando
aufgebaut ist, was ihre Ausgabeumlenkung betrifft, denn diese muss
sie zusammenbauen, bevor sie das Kommando überhaupt aufruft.

> Mit der Originalversion avrdude 5.4 funktioniert es auch mit stk500v1.

Nein.  Mit einem Original AVRDUDE 5.4 kannst du den Arduino
vergessen.  Nur mit der von den Arduino-Leuten gehackten Version
5.4 geht das mit -c stk500v1, weil sie zu faul waren, für ihren Hack
wenigstens einen neuen Programmer-Namen einzuführen.

Beschwer' dich bei den Arduino-Fritzen für diesen Mist!

> Die .conf-Files müssen immer zur avrdude-Version passen.

Die sind nur in eine Richtung kompatibel, da hin und wieder die
Syntax erweitert wird, um neue Features, neue Programmer usw. darin
unterbringen zu können.  Eine alte Configdatei mit einer neuen
Programmversion sollte gehen, allerdings verzichtest du dann
zwangsläufig auf einige Dinge, die mittlerweile hinzu gekommen sind.

von werner P. (wernerp)


Lesenswert?

Hallo Jörg,
Du hast recht, das ist eben die Qualität des Franzis-Verlags :-(((.
Optimierte Gewinne, nur wer verkauft hier überhaupt Hardware mit der man 
morgen noch was anfangen kann. Jeder versucht sich von seinen 
Mitberwerbern abzugrenzen und schon ist nichts mehr kompatibel. Oder die 
Software wird bir zur Unkenntlichkeit verbogen.

Die Config-Datei von der AVRdude 5.4 arduino lief nicht mit AVRdude 
5.11.
Ich meinete auch nicht die Originalversion, sondern die von arduino.

Warum soll -v, -v1 ... oder -v3 nicht gehen. Das liegt dann höchstens an 
dem Wildwuchs der Optionen. Eine Option 1, 2 oder 3 macht für mich 
keinen Sinn und sag nicht das könnte man programmtechnisch nicht 
beherschen. Gemischte kurze Optionen, wie -v und lange, wie -verbose 
geht ja auch.

Gruß wernerP.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

werner P. schrieb:
> Warum soll -v, -v1 ... oder -v3 nicht gehen.

Weil die Optionssyntax unter Unix nun einmal vorschreibt, dass eine
Option entweder immer oder nie ein Argument nimmt, und genau so ist
die Bibliotheksfunktion getopt(3) implementiert, die hier benutzt
wird.

Dies künstlich mit Pseudo-Optionen à la -1 ... -3 aufzublasen, die
dann nur im Zusammenhang mit der Option -v diese in ihrer Wirkung
verstärken, wäre noch weniger schlüssig.  Dann wäre -3v beispielsweise
dasselbe wie -v -3 oder -v3.  Nee, tut mir leid, deine Argumentation
überzeugt mich nicht.  Wer zum Debuggen zu faul ist, statt -v4 einmal
-vvvv zu schreiben, dem kann ich leider nicht helfen.

Lange Optionen haben damit übrigens nichts zu tun.  Davon abgesehen,
dass AVRDUDE diese nicht unterstützt, auch dort gilt die Grundregel,
dass die Option entweder immer oder nie mit Argumenten gerufen wird.
Also mal --verbose und mal --verbose=4 ist da genauso wenig.

(Ich weiß, es gibt zuweilen Tools, die davon abweichen, aber man muss
nun nicht grundlos dem schlechten Beispiel folgen.)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.