Forum: Mikrocontroller und Digitale Elektronik avrdude: make program bricht ab


von Johannes B. (jubuntu79)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
bin neu hier und Anfänger in der Mikrocontroller-Programmierung.
Mithilfe eines Atmega32 steuere ich eine 7-Segment-Anzeige an.
Als Betriebssystem setze ich Xubuntu 15.10 ein. Ich arbeite mit avrdude 
auf dem Terminal.
Mit dem angehängten Dateien:
makefile
main.c
gelang es mir mittels
1
make all
2
make program
das Programm auf den Mikrocontroller zu spielen, unter der 
Voraussetzung, dass Codezeile 5 DDRD  = 0x00; auskommentiert ist (siehe 
unten).
Wenn ich das Programm erweiterte, trat dann oft ein Fehler auf:
1
(...)
2
Writing | #########################avrdude: butterfly_recv(): programmer is not responding
3
makefile:325: recipe for target 'program' failed
4
make: *** [program] Error 1
Komplette Ausgabe siehe angehängte Datei "ausgabe"
Zunächst suchte ich nach Programmierfehlern, aber nun stellte sich 
heraus, dass ab einer bestimmten Größe der .hex-Datei das Laden nicht 
mehr funktioniert.
a) Wenn ich Zeile 5 auskommentiere, funktioniert die Übertragung 
fehlerfrei und eine "1" wird in der 7-Segment-Anzeige angezeigt.
b) Wenn ich Zeile 5 einkommentiere, bricht die Übertragung mit oben 
genanntem Fehler ab.
c) Wenn ich Zeile 5 einkommentiert lasse und Zeile 3 und 4 
auskommentiere, lässt sich das Programm ebenfalls übertragen.
Als Programmer verwende ich den mySmartUSB light.
Herzlichen Dank im voraus für jegliche Unterstützung bei der Suche eines 
Fehlers, der für mich unerklärlich scheint.

main.c
1
#include <avr/io.h>
2
3
void main (void)
4
{
5
/* Zeile 1 */   DDRB  = 1 << DDB4;
6
/* Zeile 2 */   PORTB = 1 << PB4;  // Zeile 1
7
/* Zeile 3 */   DDRC  = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << DDB4) | (1 << DDB5) | (1 << DDB6);
8
/* Zeile 4 */   PORTC = (1 << PC0) | (1 << PC1) | (1 << PC2) | (1 << PC3) | (1 << PC6);
9
/* Zeile 5 */   // DDRD  = 0x00;
10
}

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Die Fehlermeldung "programmer is not responding" hat überhaupt nichts 
mit dem Programm-Quelltext zu tun.

Ich denke, dein programmer ist defekt, oder die Verbindung zum µC, oder 
die Stromversorgung oder ein Schaltungsfehler.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Das Problem hängt vermutlich damit zusammen, dass der aufgerufene 
avrdude auf libusb 0.1 basiert, heutzutage aber libusb 1.0 üblich ist. 
Durch den erforderlichen Wrapper der APIs tritt der folgende Fehler 
zutage, den ich schon vor einigen Jahren ausgiebig analysiert hatte:

http://blog.gmane.org/gmane.comp.hardware.avr.avrdude.devel/month=20100601
Beitrag "Probleme mit usbprog"

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


Lesenswert?

Andreas S. schrieb:
> Durch den erforderlichen Wrapper der APIs tritt der folgende Fehler
> zutage, den ich schon vor einigen Jahren ausgiebig analysiert hatte:

Dort schreibst du aber, dass es durch eine hinreichend neue Version
von Linux-Kernel und libusb beseitigt sei.  Das war vor mehr als
5 Jahren, und mittlerweile dürften die entsprechenden Versionen doch
allemal durchweg vorhanden sein, oder?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Das war vor mehr als
> 5 Jahren, und mittlerweile dürften die entsprechenden Versionen doch
> allemal durchweg vorhanden sein, oder?

Da Johannes nicht haarklein die genauen Versionsstände aller relevanter 
Komponenten aufgeführt hat, gehe ich davon aus, dass sich z.B. ein 
uralter Avrdude auf seinen Computer verirrt hat.

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


Lesenswert?

Andreas S. schrieb:
> ein uralter Avrdude auf

Sollte aber eigentlich egal sein, solange Kernel + libusb hinreichend
neu sind, denn die libusb wird dynamisch gelinkt.

Aber es ist natürlich korrekt, dass da nirgends ein Hinweis zu
finden ist, welche Versionen von Linux-Kernel, libusb und AVRDUDE
da benutzt worden sind.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Stefan U. schrieb:
> Die Fehlermeldung "programmer is not responding" hat überhaupt nichts
> mit dem Programm-Quelltext zu tun.

Natürlich hat die Fehlermeldung nicht unmittelbar etwas mit dem 
Quelltext zu tun, möglicherweise aber mit dem Kompilat dieser 
Quelltexte, so wie von mir ausführlich beschrieben. Auch damals gab es 
schon unbelehrbare Forenteilnehmer, die die unhaltbare Auffassung 
vertraten, dass eine datenabhängige Fehlfunktion der USB-Übertragung 
unmöglich wäre.

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


Lesenswert?

Andreas S. schrieb:
> Auch damals gab es schon unbelehrbare Forenteilnehmer, die die
> unhaltbare Auffassung vertraten, dass eine datenabhängige Fehlfunktion
> der USB-Übertragung unmöglich wäre.

Ist sie ja an sich auch :), aber ein Bug in einer Bibliotheksebene
kann (wie du ja gezeigt hast) dann schon dazu führen, dass da
irgendeine Abhängigkeit von den Daten entsteht.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Ist sie ja an sich auch :), aber ein Bug in einer Bibliotheksebene
> kann (wie du ja gezeigt hast) dann schon dazu führen, dass da
> irgendeine Abhängigkeit von den Daten entsteht.

Ähnliche datenmusterabhängige Probleme entstehen aber z.B. auch bei 
manchen Übertragungsprotokollen, bei denen eine Taktrekonstruktion aus 
den Daten erfolgt. Gerade bei letzteren erlebt man es ja recht häufig, 
dass bei bestimmten optischen Dämpfungsverhältnissen einige Tastendrücke 
noch erkannt werden, andere aber nicht mehr.

Man findet auch im Mikrocontroller-Forum recht häufig Diskussionen über 
den Entwurf von Übertragungsprotokollen. Einige Anfänger wählen dann 
mehr oder minder willkürlich beliebige Werte für die Kennzeichnung von 
Paketanfang, -ende oder Escapezeichen. Sobald man sich jedoch überlegt, 
wie solche Sonderdaten auf den darunter befindlichen Schichten 
dargestellt werden, erkennt man sehr schnell, warum bestimmte 
Datenmuster sinnvoll sind und andere nicht. Leider ruft man damit aber 
wieder einige "Reinrauminformatiker" auf den Plan, die die "reine Lehre" 
vertreten und behaupten, dass Protokolle schlecht konstruiert seien, 
wenn eine Protokollschicht die Besonderheiten darüber oder darunter 
befindlicher Schichten berücksichtigen.

: Bearbeitet durch User
von Johannes B. (jubuntu79)


Lesenswert?

Hallo zusammen,
herzlichen Dank für die vielen Antworten. Die fehlenden Infos liefere 
ich gerne nach. Falls noch etwas fehlt, bitte schreiben.
Hab zu später Stunde noch keine Lösung gefunden, aber ich halte es auch 
für wahrscheinlich, dass es an der libusb liegt. Danke, @Andreas 
Schweigstill

Kernel:
uname -r
1
4.2.0-30-generic

Version avrdude:
avrdude -v
1
avrdude: Version 6.1, compiled on Sep  8 2015 at 09:40:37
2
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
3
         Copyright (c) 2007-2014 Joerg Wunsch
4
5
         System wide configuration file is "/etc/avrdude.conf"
6
         User configuration file is "/home/johannes/.avrduderc"
7
         User configuration file does not exist or is not a regular file, skipping
8
9
10
avrdude: no programmer has been specified on the command line or the config file
11
         Specify a programmer using the -c option and try again

avrdude ist erstaunlicherweise von libusb-0.1-4:amd64 abhängig:
apt-cache depends avrdude
1
avrdude
2
  Depends: libc6
3
  Depends: libelf1
4
  Depends: libftdi1
5
  Depends: libreadline6
6
  Depends: libusb-0.1-4
7
  Suggests: avrdude-doc
8
  Conflicts: avrdude:i386

dpkg -l | grep -E "avrdude | libusb"
1
              
2
ii  avrdude                                     6.1-4build1                              amd64        software for programming Atmel AVR microcontrollers
3
ii  libgusb2:amd64                              0.2.6-1                                  amd64        GLib wrapper around libusb1
4
ii  libusb-0.1-4:amd64                          2:0.1.12-27                              amd64        userspace USB programming library
5
ii  libusb-1.0-0:amd64                          2:1.0.19-1                               amd64        userspace USB programming library
6
ii  libusbmuxd2:amd64                           1.0.9-1build1                            amd64        USB multiplexor daemon for iPhone and iPod Touch devices - library

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


Lesenswert?

Das sollte alles aktuell genug sein, als dass das von Andreas
beschriebene Problem mit den zero-length packets nicht mehr
zutrifft.

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.