Forum: Compiler & IDEs flash-Fehler mit ATtiny2313, compile ok


von Bernd-Dieter B. (bedi)


Lesenswert?

Mein mini-C-Programm lässt sich trotz fehlerfreier Compilierung nicht 
flashen, wenn ich Parameter-Übergabe an eine Funktion und break in 
dieser Funktion habe.
Kennt jemand die Ursache?
Wie kann ich dieses Problem vermeiden?
Mein C-Programm:
1
#define F_CPU 8000000  // Frequenz, mit der der uC betrieben wird: 8,0 MHz
2
#include <avr/io.h>    // Hardware-Informationen zum Controller
3
4
int funktion(unsigned int zahl)
5
{
6
  int n, ergebnis;
7
  float zahl_dez;
8
  
9
//  zahl = 123;                     // Zeile 1
10
  zahl_dez = (float) zahl / 10;   // Zeile 2
11
//  zahl_dez = 12.3;                // Zeile 3
12
13
  for (n=2;n>0;n++)               // Zeile 11
14
  {                               // Zeile 12
15
    if(zahl_dez < 10)             // Zeile 13
16
    {                             // Zeile 14
17
      ergebnis = n;               // Zeile 15
18
      break;                      // Zeile 16
19
    }                             // Zeile 17
20
    zahl_dez = zahl_dez / 10;     // Zeile 18
21
  }                               // Zeile 19
22
  return(n);
23
}
24
25
int main(void)
26
{
27
  int x;
28
  while(1)
29
  {
30
    x = 123;
31
  } // Ende while(1)
32
  return(0);
33
} // Ende main()
Ohne Zeile 3 und ohne Zeile 1 kommt der folgende Fehler beim Flashen 
(compile ist aber ok):
avrdude: ERROR: address 0x0806 out of range at line 129 of main.hex
Make: *** [flash] Error 1
  Wenn man das "break;" in Zeile 16 jedoch auskommentiert, tritt der 
Fehler nicht auf.
  Das "break;" wird aber gebraucht, damit die for-Schleife keine 
endlos-Schleife ist.
     Übergeben eines Zeigers auf die Variable zahl (also *zahl als 
Parameter der Funktion) hilft nicht.

 Mit Zeile 1 und ohne Zeile 3 kommt o.g. Fehler "... out of range ..." 
nicht.
Ohne Zeile 1 und  mit Zeile 3 kommt o.g. Fehler "... out of range ..." 
nicht.
 Mit Zeile 1 und  mit Zeile 3 kommt o.g. Fehler "... out of range ..." 
nicht.

Mit Zeile 2 und ohne die Zeilen 1 und 3 und ohne die Zeilen 11 bis 19 
kommt o.g. Fehler "... out of range ..." nicht.

Vermutung: Der Fehler hat irgendwie damit zu tun, wo im Flash-Speicher 
die Variable zahl abgelegt wird.

Falls ich etwas falsch oder ungeschickt ausdrücke, bitte ich um 
Entschuldigung und einen Hinweis. Ich habe auch nach langem Suchen im 
www nichts vergleichbares gefunden, deshalb frage ich hier.
Grüße an alle uC-C-Programmier-Fans!

: Bearbeitet durch User
von Ingo (Gast)


Lesenswert?

Ohne jetzt weiter zu suchen. Ein Float auf nem Tiny???? Passt das 
wirklich in den Flash rein???!!!

von Peter M. (Gast)


Lesenswert?

Hast Du beim compilieren auch den ATtiny2313 angegeben?
Es sieht so aus, als ob Du den falschen Prozessortyp angegeben hast.
Kontrolliere das noch einmal.
0x0806 liegt weit ausserhalb vom Flashbereich des 2313.
An Deinem Testprogramm liegt das nicht.

von m.n. (Gast)


Lesenswert?

Ingo schrieb:
> Ein Float auf nem Tiny???? Passt das
> wirklich in den Flash rein???!!!

Ohne Probleme, wenn Deine Tastatur nicht kaputt ist.

Peter M. schrieb:
> An Deinem Testprogramm liegt das nicht.

Es fehlt sicherlich die 'libm.a' beim Projekt, die man unter 
'Configuration Options'(beim AVR-Studio) einbinden kann.

von neuer PIC Freund (Gast)


Lesenswert?

Wie bekommt man überhaupt so viele bytes hin? Mit libm ergibt sich bei 
mir:
1
>avr-gcc --version
2
avr-gcc (GCC) 4.8.2
3
4
>avr-gcc -mmcu=attiny2313 -o main.elf -O0 main.c 
5
 
6
>avr-size main.elf 
7
   text    data     bss     dec     hex filename
8
    820       0       0     820     334 main.elf

von Bernd-Dieter B. (bedi)


Lesenswert?

> Peter M. schrieb:
>> An Deinem Testprogramm liegt das nicht.
>
> Es fehlt sicherlich die 'libm.a' beim Projekt, die man unter
> 'Configuration Options'(beim AVR-Studio) einbinden kann.

Erstmal herzlichen Dank an alle, die sich mein (wie ich finde) seltsames 
Problem beim Flashen angeschaut und versucht haben, zu helfen.

an Ingo:
Der Typ "float" bei einer Variablen ist sicher kein Problem, weil auch 
in der Programm-Variante ohne Fehler diese Variable enthalten ist.

an Peter M.:
Ich habe beim Compilieren den attiny2313 angegeben. Wäre es nicht so, 
gäbe es ja auch keine fehlerfrei geflashte Variante des Programms.

an m.n. und neuer PIC Freund:
Vielen Dank für den Tip mit "libm.a", den ich leider nicht ausprobieren 
konnte, obwohl ich AVR Studio 6 zum Compilieren benutze. Wie genau 
bindet man die libm.a ein? Geht das nur beim Anlegen eines Projektes 
oder auch noch nachträglich in ein bestehendes Projekt? Ich habe 
"Configuration Options" nicht gefunden, nur "Options", aber dort keinen 
Punkt "Configuration".

Beim Compilieren (mit Debug) erhalte ich:
Invoking: AVR/GNU C Compiler : 3.4.2
text     data      bss      dec      hex  filename
  62        0        0       62       3e  fehler-tiny2313-03.elf
Program Memory Usage   :  62 bytes   3,0 % Full
Data Memory Usage     :  0 bytes   0,0 % Full

Kann mein Makefile Schuld sein?
1
DEVICE     = attiny2313
2
CLOCK      = 8000000
3
PROGRAMMER = -c arduino -P COM3 -b 19200 
4
OBJECTS    = fehler-tiny2313-03.o
5
FUSES      = -U lfuse:w:0x6a:m -U hfuse:w:0xff:m
6
AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
7
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)
8
all:  main.hex
9
.c.o:
10
  $(COMPILE) -c $< -o $@
11
.S.o:
12
  $(COMPILE) -x assembler-with-cpp -c $< -o $@
13
.c.s:
14
  $(COMPILE) -S $< -o $@
15
flash:  all
16
  $(AVRDUDE) -U flash:w:main.hex:i
17
fuse:  
18
  $(AVRDUDE) $(FUSES)
19
install: 
20
  flash fuse
21
load:  all
22
  bootloadHID main.hex
23
clean:  
24
  rm -f main.hex main.elf $(OBJECTS)
25
main.elf: $(OBJECTS)
26
  $(COMPILE) -o main.elf $(OBJECTS)
27
main.hex: main.elf
28
  rm -f main.hex
29
  avr-objcopy -j .text -j .data -O ihex main.elf main.hex
30
disasm:  main.elf
31
  avr-objdump -d main.elf
32
cpp:  $(COMPILE) -E main.c

: Bearbeitet durch User
von Linksammler (Gast)


Lesenswert?

Bernd-Dieter Bernt schrieb:
> Program Memory Usage   :  62 bytes   3,0 % Full

Nur bei der "funktionierenden" Version, oder auch bei denen, die sich 
nicht flashen lassen?


Und, nebenbei, unrelated:

Bernd-Dieter Bernt schrieb:
> return(n);

sollte man sich abgewöhnen.
"return" ist ein operator, keine Funktion.
Überleg z.B. mal, was
1
return(n) + 1;
macht.
Da sind die Klammern nur irreführend.

von m.n. (Gast)


Lesenswert?

Bernd-Dieter Bernt schrieb:
> Wie genau
> bindet man die libm.a ein?

Unter 'toolchain/libraries' libm eingeben, vermute ich.
Für Studio 6 fehlt mir der Sinn; ich benutze Studio 4.

Linksammler schrieb:
>> return(n);
>
> sollte man sich abgewöhnen.

Ich bin auch klammersüchtig und halte den Entzug nie durch. Oft setze 
ich auch in if-Abfragen ganz viele Klammern, obwohl die Ausdrücke auch 
keine Funktion sind (aber haben) ;-)

von Linksammler (Gast)


Lesenswert?

m.n. schrieb:
> Oft setze
> ich auch in if-Abfragen ganz viele Klammern,

Da schaden sie ja nicht, bis auf Sonderfälle, wo man ggfs. sinnige 
Kompilerwarnings unterdrückt.

z.B:
> if (a=1) {
vs.
> if ((a=1)) {
machen dasselbe.

Wenn man eigentlich
> if (a==1) {
gemeint hat, ist die zweite Form sch****.




aber
> return(n) + 1;
ist dasselbe wie
> return (n+1);
oder wie
> return n + 1;
aber nie
> (return n) + 1;


d.H. der Kompiler ignoriert sozusagen die Klammer, und baut etwas ganz 
anderes daraus, als der optische Eindruck suggeriert.

deshalb: bei return lieber weglassen.

Zweiter, vmtl. gewichtigerer Grund: Man outet sich im Forum als 
C-Noobie, der das Sprachkonstrukt "return" nicht verstanden hat.

von Bernd-Dieter B. (bedi)


Lesenswert?

> Program Memory Usage   :  62 bytes   3,0 % Full
kommt bei allen Versionen beim Compilieren in AVR Studio 6, egal, ob mit 
oder ohne Fehler beim Flashen-Versuch.
Beim Flashen wird die Byte-Anzahl nur angezeigt, wenn das Flashen 
geklappt hat. Dann: "avrdude: 1548 bytes of flash verified"

Ich bin mir nicht sicher, weil ich derartiges nie im Programm 
geschrieben habe, aber ich vermute, dass "return(n) + 1;" "n+1" zurück 
gibt.

'toolchain/libraries' finde ich in AVR Studio 6 nicht.

Ich habe jetzt mein Makefile um "-lm" erweitert:
COMPILE = avr-gcc -Wall -Os -lm -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)
Das hat auch nicht geholfen.

Aber ich möchte gern zurückkommen auf das eigentliche Problem:
Wie ist dieser Fehler beim Flashen überhaupt möglich?

von Karl H. (kbuchegg)


Lesenswert?

Linksammler schrieb:

> Zweiter, vmtl. gewichtigerer Grund: Man outet sich im Forum als
> C-Noobie, der das Sprachkonstrukt "return" nicht verstanden hat.


man schreibt ja auch nicht
1
  i = (j);

Die Syntax für return ist in EBNF ganz einfach
1
  "return" [ expression ] .

kein Grund für ( ) Klammern.

Interessanterweise ist ja auch
1
  return n;
schneller und leichter zu tippen als
1
  return(n);


(Und ja, ich weiss: K&R themself benutzen diese Form. Ist trotzdem kein 
Argument. So sieht das return wie ein Funktionsaufruf aus, was es ja 
nicht ist.)

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Bernd-Dieter Bernt schrieb:

> Kann mein Makefile Schuld sein?

Hat schon wer das -lm im makefile entdeckt?
Ich konnte es nicht finden.
1
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) -lm

von Bernd-Dieter B. (bedi)


Lesenswert?

Das "-lm" hatte ich nur einmal kurz ins Makefile hinzugefügt, 
ausprobiert, kein Erfolg, wieder rausgenommen, hier im Forum davon 
berichtet.

Inzwischen weiß ich, dass eine Mathe-Bibliothek mit "-lm" eingebunden 
werden soll. Aber ich weiß nicht, wie das den Fehler (Adresse außerhalb 
des Flash-Speichers) beheben sollte.

Ich würde ja gerne im AVR Studio debuggen, also das Programm laufen 
lassen und ihm "dabei Schritt für Schritt zusehen", weiß aber leider 
nicht, wie man AVR Studio dazu bringt.

von m.n. (Gast)


Lesenswert?

Linksammler schrieb:
> Zweiter, vmtl. gewichtigerer Grund: Man outet sich im Forum als
> C-Noobie, der das Sprachkonstrukt "return" nicht verstanden hat.

Gern geschehen!

Karl Heinz schrieb:
> Und ja, ich weiss: K&R themself benutzen diese Form.

Danke! Jetzt weiß ich endlich wieder, warum ich es so mache ;-)

von m.n. (Gast)


Lesenswert?

Obiges Programm habe ich mit Studio 4 übersetzt und zwar ohne 
Optimierung -O0, damit funktion() überhaupt beachtet wird.

1866 Byte ohne und 820 Byte mit 'libm.a'. Beide Versionen passen in 
einen Tiny2313. Mit Optimierung -Os werden 82 Byte erzeugt, was noch 
viel ist ;-)

Mit make mußte ich auch nicht hantieren und weiß auch nicht, warum Du 
dort herumspielst.

von Bernd-Dieter B. (bedi)


Lesenswert?

Da das C-Programm auch ohne die Zeilen 1 und 3 ok ist (es wird beim 
Compilieren auch als ok angezeigt), vermute ich, dass irgendetwas beim 
Flashen, also im Makefile, zu dem Fehler führt. Deshalb habe ich jetzt 
begonnen, das Makefile teilweise zu ändern. Da ich Anfänger beim 
Mikroprozessor-Flashen bin, orientiere ich mich an existierenden 
Makefiles. Ich wollte auch das von Studio 6 erstellte Makefile benutzen, 
leider kommt dabei immer die Meldung "Make: No rule to make target 
'flash'".

Es würde mir sehr helfen, wenn jemand mein Progrämmchen (ohne die Zeilen 
1 und 3) mit einem Makefile übersetzen und fehlerfrei auf einen tiny2313 
flashen würde und hier sein Makefile notieren würde, damit ich mein 
Makefile mit einem korrekten Makefile vergleichen kann. Ich denke, 
anders wird der Fehler, den ich mache, nicht zu finden sein.

von Karl H. (kbuchegg)


Lesenswert?

Bernd-Dieter Bernt schrieb:
> Da das C-Programm auch ohne die Zeilen 1 und 3 ok ist (es wird beim
> Compilieren auch als ok angezeigt), vermute ich, dass irgendetwas beim
> Flashen, also im Makefile, zu dem Fehler führt.

Dein AVRDude informiert dich darüber, dass das HEX-File zu gross für den 
Prozessor ist.

Die Fehlermeldung
1
avrdude: ERROR: address 0x0806 out of range at line 129 of main.hex
bezieht sich auf die Adresse 0x806, dezimal 2054

Da ein Tiny2313 über 2K Flash verfügt, reicht der im Flash adressierbare 
Bereich von 0 bis zur Adresse 2047. 2054 (oder eben HEX 0x0806) ist 
damit definitiv ausserhalb des auf einem Tiny2313 zur verfügung 
stehenden Flash- Bereiches.

Die Frage ist jetzt: Warum ist dein übersetztes C-Programm so dermassen 
gross?
Und so wie das scheint, kann das hier niemand wirklich nachvollziehen.

> Makefiles. Ich wollte auch das von Studio 6 erstellte Makefile benutzen,

Wenn du sowieso das Studio 6 benutzt, wozu brauchst du dann noch ein 
eigenes Makefile?
Lass das Studio 6 den Build fertig machen, setz dein Brennprogramm auf 
das Hex-File an und gut ists.

Um den Schritt des Brennens eines HEX-Files per AVRDude durchzuführen, 
braucht man auch kein Makefile. Ein stink normaler Batch Job (ein BAT 
File), in dem das avrdude Kommando drinn ist, damit man sich nicht 
dauernd die Parameter merken muss) und das man doppelklickt wenn man 
brennen will, tut es da völlig.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Bernd-Dieter Bernt schrieb:

> Inzischen weiß ich, dass eine Mathe-Bibliothek mit "-lm" eingebunden
> werden soll. Aber ich weiß nicht, wie das den Fehler (Adresse außerhalb
> des Flash-Speichers) beheben sollte.

Wird die Mathe-Bibliothekj eingebunden, wird das Programm normalerweise 
kleiner, weil die Routinen aus der Lib kleiner sind, als die die der 
Compiler normalerweise benutzt.

von Bernd K. (prof7bit)


Lesenswert?

Bernd-Dieter Bernt schrieb:
> avrdude: ERROR: address 0x0806 out of range at line 129 of main.hex

129 Zeilen langes Hex-File für dieses winzige Programm?

Bitte poste doch einfach mal das besagte hex-file, dann können wir es 
disassemblieren und sehen was da alles reingepackt wurde.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Bernd-Dieter Bernt schrieb:
> Vielen Dank für den Tip mit "libm.a", den ich leider nicht
> ausprobieren konnte, obwohl ich AVR Studio 6 zum Compilieren benutze.
> Wie genau bindet man die libm.a ein?

Für avr-gcc ab 4.7.2 tut man NICHTS!

Siehe http://gcc.gnu.org/PR54461

Der Compiler(treiber) weiß, wann er welche Standardbibliothek wo wie 
linken muss, also libgcc.a, libc.a und libm.a und ab avr-gcc 5 auch 
libdev.a.

Und zwar passend für's jeweils angegebene Device automatisch eine der 16 
unterschiedlichen Ausprägungen der lib*.a.

Da von Hand irgendwelche Pfade oder Optionen reinzufutscheln fürhrt 
bestenfalls dazu, daß die Linkreihenfolge nicht stimmt, die falsche 
Multilib-Variante verwendet wird oder eine komplett falsche libm wie 
z.B. die für den Host.

Falls irgendwelche überschlauen GUIs oder Makefiles meinen, da Hand 
anlegen zu müssen: Raus damit!

avr-gcc 4.7.2+ ist dazu mit --with-avrlibc zu configuren, was jeder, der 
sich halbwegs mit avr-gcc auskennt, auch macht.  Ab avr-gcc 4.8 is diese 
configue-Option per default gesetzt, d.h. man muß explizit mit 
--wih-avrlibc=no oder --target=avr-*-rtems configuren, um den Support 
der AVR-LibC gemäß PR54461 zu deaktivieren.

Siehe dazu die Einträge zu "AVR" in den GCC Release Notes:

http://gcc.gnu.org/gcc-4.7/changes.html
http://gcc.gnu.org/gcc-4.8/changes.html

sowie die entsprechende Doku in "Installing GCC: Configuration"

http://gcc.gnu.org/install/configure.html#TOC3

Wie gelinkt wird, kann man z.B. anzeigen lassen mit
1
$ echo | avr-gcc -x c - -###

Ein avr-gcc 4.7.2 spuckt damit aus:
1
...
2
Target: avr
3
Configured with: ... --target=avr --with-avrlibc=yes
4
Thread model: single
5
gcc version 4.7.2 (GCC)
6
...
7
... collect2 ... --start-group -lgcc -lm -lc --end-group

von Bernd-Dieter B. (bedi)


Lesenswert?

Karl Heinz schrieb:
> Bernd-Dieter Bernt schrieb:
> Dein AVRDude informiert dich darüber, dass das HEX-File zu gross für den
> Prozessor ist.
>
> Die Fehlermeldung
>
1
> avrdude: ERROR: address 0x0806 out of range at line 129 of main.hex
2
>
> bezieht sich auf die Adresse 0x806, dezimal 2054
>
> Da ein Tiny2313 über 2K Flash verfügt, reicht der im Flash adressierbare
> Bereich von 0 bis zur Adresse 2047. 2054 (oder eben HEX 0x0806) ist
> damit definitiv ausserhalb des auf einem Tiny2313 zur verfügung
> stehenden Flash- Bereiches.
>
> Die Frage ist jetzt: Warum ist dein übersetztes C-Programm so dermassen
> gross?
> Und so wie das scheint, kann das hier niemand wirklich nachvollziehen.

Hallo Karl Heinz, erstmal vielen Dank für Deine ausführliche Antwort. 
Sie hat mich dazu angeregt, mein Progrämmchen auch mal auf einen tiny13 
zu flashen, bzw. das zu versuchen. Der Fehler kam wieder, nur lautete 
diesmal die Meldung: "address 0x0410 out of range at line 65 of 
main.hex" und "write to file main.hex failed".
Dann habe ich den Code von "int funktion(unsigned int zahl)" zweimal 
kopiert und die beiden Kopien umbenannt in funktion1(...) und 
funktion2(...) und in main() eingefügt: "x = funktion(123);" und "x = 
funktion1(123);" und "x = funktion2(123);". Es kam exakt die gleiche 
Fehlermeldung, nämlich "address 0x0410 out of range at line 65 of 
main.hex".
Wie ist das möglich? Jetzt hätte doch der Programmcode nicht nur bis 
0x0410, sondern viel weiter reichen müssen?!

Die anderen Anregungen (auch dafür herzlichen Dank) werde ich so bald 
wie möglich aufgreifen und versuchen umzusetzen.

von Karl H. (kbuchegg)


Lesenswert?

Bernd-Dieter Bernt schrieb:

> Hallo Karl Heinz, erstmal vielen Dank für Deine ausführliche Antwort.

Aber offenbar hast du sie nich verstanden.

> Sie hat mich dazu angeregt, mein Progrämmchen auch mal auf einen tiny13
> zu flashen, bzw. das zu versuchen.

Genau. Wenn 20 Liter Wasser nicht in einen 10 Liter Eimer passen, 
probiert man, ob sie wohl in einen 5 Liter Eimer passen würden.

> Wie ist das möglich? Jetzt hätte doch der Programmcode nicht nur bis
> 0x0410, sondern viel weiter reichen müssen?!

Der Programmcode ist so gross wie er ist.
Aber die unterschiedlichen Tiny haben unterschiedlich viel Speicher! 
Nämlich zu wenig. Der Tiny13 hat weniger Flash als der Tiny2313. Ergo 
geht dem auch schon früher der Speicher aus, bzw. der Programmer kann 
viel weniger in den Flash schreiben, ehe der Platz ausgeht.

Die Adresse, die du vom AvrDude kriegst, ist die des ersten Bytes, das 
nicht mehr in den Flash passt!

: Bearbeitet durch User
von Bernd-Dieter B. (bedi)


Angehängte Dateien:

Lesenswert?

Bernd K. schrieb:
> Bernd-Dieter Bernt schrieb:
>> avrdude: ERROR: address 0x0806 out of range at line 129 of main.hex
>
> 129 Zeilen langes Hex-File für dieses winzige Programm?
>
> Bitte poste doch einfach mal das besagte hex-file, dann können wir es
> disassemblieren und sehen was da alles reingepackt wurde.

Das hex-file habe ich angehängt.
Wo kann ich einen guten Disassembler runterladen?

von Bernd-Dieter B. (bedi)


Lesenswert?

Karl Heinz schrieb:
> Der Programmcode ist so gross wie er ist.
> Aber die unterschiedlichen Tiny haben unterschiedlich viel Speicher!
> Nämlich zu wenig. Der Tiny13 hat weniger Flash als der Tiny2313. Ergo
> geht dem auch schon früher der Speicher aus, bzw. der Programmer kann
> viel weniger in den Flash schreiben, ehe der Platz ausgeht.
>
> Die Adresse, die du vom AvrDude kriegst, ist die des ersten Bytes, das
> nicht mehr in den Flash passt!

Mein Gedanke war, dass evtl. irgendetwas mit meinem tiny2313 nicht 
stimmt. Schließlich ist mein Progrämmchen so klein, dass es problemlos 
auch auf einen tiny13 passen müsste. Und die angemeckerte Speicherstelle 
0x0806 im Flash-Speicher steht nicht direkt hinter dem Flash-Ende 
0x0801, weshalb ich 0x0806 für das Ende meines Programms im hex-File 
hielt. Sorry, war falsch gedacht. So ganz verstehe ich zwar nicht, warum 
das erste Byte, das nicht mehr in den Flash passt, ganze 7 Bytes hinter 
dem Flash-Ende (und nicht direkt hinter dem Flash-Ende) steht, aber das 
ist sicherlich im Hinblick auf mein Problem unwichtig.

Wichtig dürfte sein, was in meinem hex-File außer meinen wenigen aus dem 
Programm-Code entstandenen Bytes steht und wie das dahin gelangt ist. 
Deshalb bin ich gespannt darauf, was Bernd K. beim Disassemblieren 
herausfinden wird.

Mein Beitrag vom 27.03.2015, 13:07 enthält dieses hex-File gleich 3 mal 
als Anhang, weil die Anhänge in der Vorschau nicht angezeigt wurden und 
nach Anklicken des Buttons "Vorschau" neben dem Button "Durchsuchen..." 
die zuvor ausgesuchte Datei (mein hex-File) verschwunden war und 
stattdessen dort stand "Keine Datei ausgewählt.". Also habe ich die 
Datei nochmal ausgewählt und "Vorschau" gedrückt, weil ich dachte, etwas 
falsch gemacht zu haben. Nach dem dritten Versuch habe ich den Beitrag 
dann abgeschickt, mit oder ohne Anhang, mal sehen. Nun weiß ich, wie es 
geht.

von Bernd K. (prof7bit)


Lesenswert?

Bernd-Dieter Bernt schrieb:

> Das hex-file habe ich angehängt.
> Wo kann ich einen guten Disassembler runterladen?

Brauchst Du nicht denn Du hast ihn schon, es geht mit avr-objdump:
1
--(bernd@Saturn)-(/home/bernd/Downloads)--
2
--($)-- avr-objdump -D -m avr5 main.hex
3
4
main.hex:     Dateiformat ihex
5
6
7
Disassembly of section .sec1:
8
9
00000000 <.sec1>:
10
   0:   12 c0           rjmp    .+36            ;  0x26
11
   2:   22 c0           rjmp    .+68            ;  0x48
12
   4:   21 c0           rjmp    .+66            ;  0x48
13
   6:   20 c0           rjmp    .+64            ;  0x48
14
   8:   1f c0           rjmp    .+62            ;  0x48
15
   a:   1e c0           rjmp    .+60            ;  0x48
16
   c:   1d c0           rjmp    .+58            ;  0x48
17
   e:   1c c0           rjmp    .+56            ;  0x48
18
  10:   1b c0           rjmp    .+54            ;  0x48
19
  12:   1a c0           rjmp    .+52            ;  0x48
20
  14:   19 c0           rjmp    .+50            ;  0x48
21
  16:   18 c0           rjmp    .+48            ;  0x48
22
  18:   17 c0           rjmp    .+46            ;  0x48
23
  1a:   16 c0           rjmp    .+44            ;  0x48
24
  1c:   15 c0           rjmp    .+42            ;  0x48
25
  1e:   14 c0           rjmp    .+40            ;  0x48
26
  20:   13 c0           rjmp    .+38            ;  0x48
27
  22:   12 c0           rjmp    .+36            ;  0x48
28
  24:   11 c0           rjmp    .+34            ;  0x48
29
  26:   11 24           eor     r1, r1
30
  28:   1f be           out     0x3f, r1        ; 63
31
  2a:   cf ed           ldi     r28, 0xDF       ; 223
32
  2c:   cd bf           out     0x3d, r28       ; 61
33
  2e:   10 e0           ldi     r17, 0x00       ; 0
34
  30:   a0 e6           ldi     r26, 0x60       ; 96
35
  32:   b0 e0           ldi     r27, 0x00       ; 0
36
  34:   e4 e0           ldi     r30, 0x04       ; 4
37
  36:   f6 e0           ldi     r31, 0x06       ; 6
38
  38:   02 c0           rjmp    .+4             ;  0x3e
39
  3a:   05 90           lpm     r0, Z+
40
  3c:   0d 92           st      X+, r0
41
  3e:   a8 36           cpi     r26, 0x68       ; 104
42
  40:   b1 07           cpc     r27, r17
43
  42:   d9 f7           brne    .-10            ;  0x3a
44
  44:   2d d0           rcall   .+90            ;  0xa0
45
  46:   dc c2           rjmp    .+1464          ;  0x600
46
  48:   db cf           rjmp    .-74            ;  0x0
47
  4a:   ef 92           push    r14
48
  4c:   ff 92           push    r15
49
  4e:   0f 93           push    r16
50
  50:   1f 93           push    r17
51
  52:   cf 93           push    r28
52
  54:   df 93           push    r29
53
  56:   c2 e0           ldi     r28, 0x02       ; 2
54
  58:   d0 e0           ldi     r29, 0x00       ; 0
55
  5a:   0f 2e           mov     r0, r31
56
  5c:   fd ec           ldi     r31, 0xCD       ; 205
57
  5e:   ef 2e           mov     r14, r31
58
  60:   fc ec           ldi     r31, 0xCC       ; 204
59
  62:   ff 2e           mov     r15, r31
60
  64:   f4 e4           ldi     r31, 0x44       ; 68
61
  66:   0f 2f           mov     r16, r31
62
  68:   f1 e4           ldi     r31, 0x41       ; 65
63
  6a:   1f 2f           mov     r17, r31
64
  6c:   f0 2d           mov     r31, r0
65
  6e:   c8 01           movw    r24, r16
66
  70:   b7 01           movw    r22, r14
67
  72:   20 e0           ldi     r18, 0x00       ; 0
68
  74:   30 e0           ldi     r19, 0x00       ; 0
69
  76:   40 e2           ldi     r20, 0x20       ; 32
70
  78:   51 e4           ldi     r21, 0x41       ; 65
71
  7a:   13 d0           rcall   .+38            ;  0xa2
72
  7c:   7b 01           movw    r14, r22
73
  7e:   8c 01           movw    r16, r24
74
  80:   21 96           adiw    r28, 0x01       ; 1
75
  82:   20 e0           ldi     r18, 0x00       ; 0
76
  84:   30 e0           ldi     r19, 0x00       ; 0
77
  86:   40 e2           ldi     r20, 0x20       ; 32
78
  88:   51 e4           ldi     r21, 0x41       ; 65
79
  8a:   b2 d0           rcall   .+356           ;  0x1f0
80
  8c:   88 23           and     r24, r24
81
  8e:   7c f7           brge    .-34            ;  0x6e
82
  90:   ce 01           movw    r24, r28
83
  92:   df 91           pop     r29
84
  94:   cf 91           pop     r28
85
  96:   1f 91           pop     r17
86
  98:   0f 91           pop     r16
87
  9a:   ff 90           pop     r15
88
  9c:   ef 90           pop     r14
89
  9e:   08 95           ret
90
  a0:   ff cf           rjmp    .-2             ;  0xa0
91
  a2:   a8 e1           ldi     r26, 0x18       ; 24
92
  a4:   b0 e0           ldi     r27, 0x00       ; 0
93
  a6:   e6 e5           ldi     r30, 0x56       ; 86
94
  a8:   f0 e0           ldi     r31, 0x00       ; 0
95
  aa:   7b c2           rjmp    .+1270          ;  0x5a2
96
  ac:   69 83           std     Y+1, r22        ; 0x01
97
  ae:   7a 83           std     Y+2, r23        ; 0x02
98
  b0:   8b 83           std     Y+3, r24        ; 0x03
99
  b2:   9c 83           std     Y+4, r25        ; 0x04
100
  b4:   2d 83           std     Y+5, r18        ; 0x05
101
  b6:   3e 83           std     Y+6, r19        ; 0x06
102
  b8:   4f 83           std     Y+7, r20        ; 0x07
103
  ba:   58 87           std     Y+8, r21        ; 0x08
104
  bc:   b9 e0           ldi     r27, 0x09       ; 9
105
  be:   eb 2e           mov     r14, r27
106
  c0:   f1 2c           mov     r15, r1
107
  c2:   ec 0e           add     r14, r28
108
  c4:   fd 1e           adc     r15, r29
109
  c6:   ce 01           movw    r24, r28
110
  c8:   01 96           adiw    r24, 0x01       ; 1
111
  ca:   b7 01           movw    r22, r14
112
  cc:   91 d1           rcall   .+802           ;  0x3f0
113
  ce:   8e 01           movw    r16, r28
114
  d0:   0f 5e           subi    r16, 0xEF       ; 239
115
  d2:   1f 4f           sbci    r17, 0xFF       ; 255
116
  d4:   ce 01           movw    r24, r28
117
  d6:   05 96           adiw    r24, 0x05       ; 5
118
  d8:   b8 01           movw    r22, r16
119
  da:   8a d1           rcall   .+788           ;  0x3f0
120
  dc:   29 85           ldd     r18, Y+9        ; 0x09
121
  de:   22 30           cpi     r18, 0x02       ; 2
122
  e0:   08 f4           brcc    .+2             ;  0xe4
123
  e2:   7e c0           rjmp    .+252           ;  0x1e0
124
  e4:   39 89           ldd     r19, Y+17       ; 0x11
125
  e6:   32 30           cpi     r19, 0x02       ; 2
126
  e8:   10 f4           brcc    .+4             ;  0xee
127
  ea:   b8 01           movw    r22, r16
128
  ec:   7c c0           rjmp    .+248           ;  0x1e6
129
  ee:   8a 85           ldd     r24, Y+10       ; 0x0a
130
  f0:   9a 89           ldd     r25, Y+18       ; 0x12
131
  f2:   89 27           eor     r24, r25
132
  f4:   8a 87           std     Y+10, r24       ; 0x0a
133
  f6:   24 30           cpi     r18, 0x04       ; 4
134
  f8:   11 f0           breq    .+4             ;  0xfe
135
  fa:   22 30           cpi     r18, 0x02       ; 2
136
  fc:   31 f4           brne    .+12            ;  0x10a
137
  fe:   23 17           cp      r18, r19
138
 100:   09 f0           breq    .+2             ;  0x104
139
 102:   6e c0           rjmp    .+220           ;  0x1e0
140
 104:   60 e6           ldi     r22, 0x60       ; 96
141
 106:   70 e0           ldi     r23, 0x00       ; 0
142
 108:   6e c0           rjmp    .+220           ;  0x1e6
143
 10a:   34 30           cpi     r19, 0x04       ; 4
144
 10c:   39 f4           brne    .+14            ;  0x11c
145
 10e:   1d 86           std     Y+13, r1        ; 0x0d
146
 110:   1e 86           std     Y+14, r1        ; 0x0e
147
 112:   1f 86           std     Y+15, r1        ; 0x0f
148
 114:   18 8a           std     Y+16, r1        ; 0x10
149
 116:   1c 86           std     Y+12, r1        ; 0x0c
150
 118:   1b 86           std     Y+11, r1        ; 0x0b
151
 11a:   04 c0           rjmp    .+8             ;  0x124
152
 11c:   32 30           cpi     r19, 0x02       ; 2
153
 11e:   21 f4           brne    .+8             ;  0x128
154
 120:   84 e0           ldi     r24, 0x04       ; 4
155
 122:   89 87           std     Y+9, r24        ; 0x09
156
 124:   b7 01           movw    r22, r14
157
 126:   5f c0           rjmp    .+190           ;  0x1e6
158
 128:   2b 85           ldd     r18, Y+11       ; 0x0b
159
 12a:   3c 85           ldd     r19, Y+12       ; 0x0c
160
 12c:   8b 89           ldd     r24, Y+19       ; 0x13
161
 12e:   9c 89           ldd     r25, Y+20       ; 0x14
162
 130:   28 1b           sub     r18, r24
163
 132:   39 0b           sbc     r19, r25
164
 134:   3c 87           std     Y+12, r19       ; 0x0c
165
 136:   2b 87           std     Y+11, r18       ; 0x0b
166
 138:   ed 84           ldd     r14, Y+13       ; 0x0d
167
 13a:   fe 84           ldd     r15, Y+14       ; 0x0e
168
 13c:   0f 85           ldd     r16, Y+15       ; 0x0f
169
 13e:   18 89           ldd     r17, Y+16       ; 0x10
170
 140:   ad 88           ldd     r10, Y+21       ; 0x15
171
 142:   be 88           ldd     r11, Y+22       ; 0x16
172
 144:   cf 88           ldd     r12, Y+23       ; 0x17
173
 146:   d8 8c           ldd     r13, Y+24       ; 0x18
174
 148:   ea 14           cp      r14, r10
175
 14a:   fb 04           cpc     r15, r11
176
 14c:   0c 05           cpc     r16, r12
177
 14e:   1d 05           cpc     r17, r13
178
 150:   40 f4           brcc    .+16            ;  0x162
179
 152:   ee 0c           add     r14, r14
180
 154:   ff 1c           adc     r15, r15
181
 156:   00 1f           adc     r16, r16
182
 158:   11 1f           adc     r17, r17
183
 15a:   21 50           subi    r18, 0x01       ; 1
184
 15c:   30 40           sbci    r19, 0x00       ; 0
185
 15e:   3c 87           std     Y+12, r19       ; 0x0c
186
 160:   2b 87           std     Y+11, r18       ; 0x0b
187
 162:   20 e0           ldi     r18, 0x00       ; 0
188
 164:   30 e0           ldi     r19, 0x00       ; 0
189
 166:   40 e0           ldi     r20, 0x00       ; 0
190
 168:   50 e0           ldi     r21, 0x00       ; 0
191
 16a:   80 e0           ldi     r24, 0x00       ; 0
192
 16c:   90 e0           ldi     r25, 0x00       ; 0
193
 16e:   a0 e0           ldi     r26, 0x00       ; 0
194
 170:   b0 e4           ldi     r27, 0x40       ; 64
195
 172:   60 e0           ldi     r22, 0x00       ; 0
196
 174:   70 e0           ldi     r23, 0x00       ; 0
197
 176:   ea 14           cp      r14, r10
198
 178:   fb 04           cpc     r15, r11
199
 17a:   0c 05           cpc     r16, r12
200
 17c:   1d 05           cpc     r17, r13
201
 17e:   40 f0           brcs    .+16            ;  0x190
202
 180:   28 2b           or      r18, r24
203
 182:   39 2b           or      r19, r25
204
 184:   4a 2b           or      r20, r26
205
 186:   5b 2b           or      r21, r27
206
 188:   ea 18           sub     r14, r10
207
 18a:   fb 08           sbc     r15, r11
208
 18c:   0c 09           sbc     r16, r12
209
 18e:   1d 09           sbc     r17, r13
210
 190:   b6 95           lsr     r27
211
 192:   a7 95           ror     r26
212
 194:   97 95           ror     r25
213
 196:   87 95           ror     r24
214
 198:   ee 0c           add     r14, r14
215
 19a:   ff 1c           adc     r15, r15
216
 19c:   00 1f           adc     r16, r16
217
 19e:   11 1f           adc     r17, r17
218
 1a0:   6f 5f           subi    r22, 0xFF       ; 255
219
 1a2:   7f 4f           sbci    r23, 0xFF       ; 255
220
 1a4:   6f 31           cpi     r22, 0x1F       ; 31
221
 1a6:   71 05           cpc     r23, r1
222
 1a8:   31 f7           brne    .-52            ;  0x176
223
 1aa:   da 01           movw    r26, r20
224
 1ac:   c9 01           movw    r24, r18
225
 1ae:   8f 77           andi    r24, 0x7F       ; 127
226
 1b0:   90 70           andi    r25, 0x00       ; 0
227
 1b2:   a0 70           andi    r26, 0x00       ; 0
228
 1b4:   b0 70           andi    r27, 0x00       ; 0
229
 1b6:   80 34           cpi     r24, 0x40       ; 64
230
 1b8:   91 05           cpc     r25, r1
231
 1ba:   a1 05           cpc     r26, r1
232
 1bc:   b1 05           cpc     r27, r1
233
 1be:   61 f4           brne    .+24            ;  0x1d8
234
 1c0:   27 fd           sbrc    r18, 7
235
 1c2:   0a c0           rjmp    .+20            ;  0x1d8
236
 1c4:   e1 14           cp      r14, r1
237
 1c6:   f1 04           cpc     r15, r1
238
 1c8:   01 05           cpc     r16, r1
239
 1ca:   11 05           cpc     r17, r1
240
 1cc:   29 f0           breq    .+10            ;  0x1d8
241
 1ce:   20 5c           subi    r18, 0xC0       ; 192
242
 1d0:   3f 4f           sbci    r19, 0xFF       ; 255
243
 1d2:   4f 4f           sbci    r20, 0xFF       ; 255
244
 1d4:   5f 4f           sbci    r21, 0xFF       ; 255
245
 1d6:   20 78           andi    r18, 0x80       ; 128
246
 1d8:   2d 87           std     Y+13, r18       ; 0x0d
247
 1da:   3e 87           std     Y+14, r19       ; 0x0e
248
 1dc:   4f 87           std     Y+15, r20       ; 0x0f
249
 1de:   58 8b           std     Y+16, r21       ; 0x10
250
 1e0:   be 01           movw    r22, r28
251
 1e2:   67 5f           subi    r22, 0xF7       ; 247
252
 1e4:   7f 4f           sbci    r23, 0xFF       ; 255
253
 1e6:   cb 01           movw    r24, r22
254
 1e8:   2e d0           rcall   .+92            ;  0x246
255
 1ea:   68 96           adiw    r28, 0x18       ; 24
256
 1ec:   ea e0           ldi     r30, 0x0A       ; 10
257
 1ee:   f5 c1           rjmp    .+1002          ;  0x5da
258
 1f0:   a8 e1           ldi     r26, 0x18       ; 24
259
 1f2:   b0 e0           ldi     r27, 0x00       ; 0
260
 1f4:   ed ef           ldi     r30, 0xFD       ; 253
261
 1f6:   f0 e0           ldi     r31, 0x00       ; 0
262
 1f8:   d8 c1           rjmp    .+944           ;  0x5aa
263
 1fa:   69 83           std     Y+1, r22        ; 0x01
264
 1fc:   7a 83           std     Y+2, r23        ; 0x02
265
 1fe:   8b 83           std     Y+3, r24        ; 0x03
266
 200:   9c 83           std     Y+4, r25        ; 0x04
267
 202:   2d 83           std     Y+5, r18        ; 0x05
268
 204:   3e 83           std     Y+6, r19        ; 0x06
269
 206:   4f 83           std     Y+7, r20        ; 0x07
270
 208:   58 87           std     Y+8, r21        ; 0x08
271
 20a:   89 e0           ldi     r24, 0x09       ; 9
272
 20c:   e8 2e           mov     r14, r24
273
 20e:   f1 2c           mov     r15, r1
274
 210:   ec 0e           add     r14, r28
275
 212:   fd 1e           adc     r15, r29
276
 214:   ce 01           movw    r24, r28
277
 216:   01 96           adiw    r24, 0x01       ; 1
278
 218:   b7 01           movw    r22, r14
279
 21a:   ea d0           rcall   .+468           ;  0x3f0
280
 21c:   8e 01           movw    r16, r28
281
 21e:   0f 5e           subi    r16, 0xEF       ; 239
282
 220:   1f 4f           sbci    r17, 0xFF       ; 255
283
 222:   ce 01           movw    r24, r28
284
 224:   05 96           adiw    r24, 0x05       ; 5
285
 226:   b8 01           movw    r22, r16
286
 228:   e3 d0           rcall   .+454           ;  0x3f0
287
 22a:   89 85           ldd     r24, Y+9        ; 0x09
288
 22c:   82 30           cpi     r24, 0x02       ; 2
289
 22e:   38 f0           brcs    .+14            ;  0x23e
290
 230:   89 89           ldd     r24, Y+17       ; 0x11
291
 232:   82 30           cpi     r24, 0x02       ; 2
292
 234:   20 f0           brcs    .+8             ;  0x23e
293
 236:   c7 01           movw    r24, r14
294
 238:   b8 01           movw    r22, r16
295
 23a:   52 d1           rcall   .+676           ;  0x4e0
296
 23c:   01 c0           rjmp    .+2             ;  0x240
297
 23e:   81 e0           ldi     r24, 0x01       ; 1
298
 240:   68 96           adiw    r28, 0x18       ; 24
299
 242:   e6 e0           ldi     r30, 0x06       ; 6
300
 244:   ce c1           rjmp    .+924           ;  0x5e2
301
 246:   df 92           push    r13
302
 248:   ef 92           push    r14
303
 24a:   ff 92           push    r15
304
 24c:   0f 93           push    r16
305
 24e:   1f 93           push    r17
306
 250:   fc 01           movw    r30, r24
307
 252:   e4 80           ldd     r14, Z+4        ; 0x04
308
 254:   f5 80           ldd     r15, Z+5        ; 0x05
309
 256:   06 81           ldd     r16, Z+6        ; 0x06
310
 258:   17 81           ldd     r17, Z+7        ; 0x07
311
 25a:   d1 80           ldd     r13, Z+1        ; 0x01
312
 25c:   80 81           ld      r24, Z
313
 25e:   82 30           cpi     r24, 0x02       ; 2
314
 260:   48 f4           brcc    .+18            ;  0x274
315
 262:   80 e0           ldi     r24, 0x00       ; 0
316
 264:   90 e0           ldi     r25, 0x00       ; 0
317
 266:   a0 e1           ldi     r26, 0x10       ; 16
318
 268:   b0 e0           ldi     r27, 0x00       ; 0
319
 26a:   e8 2a           or      r14, r24
320
 26c:   f9 2a           or      r15, r25
321
 26e:   0a 2b           or      r16, r26
322
 270:   1b 2b           or      r17, r27
323
 272:   a5 c0           rjmp    .+330           ;  0x3be
324
 274:   84 30           cpi     r24, 0x04       ; 4
325
 276:   09 f4           brne    .+2             ;  0x27a
326
 278:   9f c0           rjmp    .+318           ;  0x3b8
327
 27a:   82 30           cpi     r24, 0x02       ; 2
328
 27c:   21 f4           brne    .+8             ;  0x286
329
 27e:   ee 24           eor     r14, r14
330
 280:   ff 24           eor     r15, r15
331
 282:   87 01           movw    r16, r14
332
 284:   05 c0           rjmp    .+10            ;  0x290
333
 286:   e1 14           cp      r14, r1
334
 288:   f1 04           cpc     r15, r1
335
 28a:   01 05           cpc     r16, r1
336
 28c:   11 05           cpc     r17, r1
337
 28e:   19 f4           brne    .+6             ;  0x296
338
 290:   e0 e0           ldi     r30, 0x00       ; 0
339
 292:   f0 e0           ldi     r31, 0x00       ; 0
340
 294:   96 c0           rjmp    .+300           ;  0x3c2
341
 296:   62 81           ldd     r22, Z+2        ; 0x02
342
 298:   73 81           ldd     r23, Z+3        ; 0x03
343
 29a:   9f ef           ldi     r25, 0xFF       ; 255
344
 29c:   62 38           cpi     r22, 0x82       ; 130
345
 29e:   79 07           cpc     r23, r25
346
 2a0:   0c f0           brlt    .+2             ;  0x2a4
347
 2a2:   5b c0           rjmp    .+182           ;  0x35a
348
 2a4:   22 e8           ldi     r18, 0x82       ; 130
349
 2a6:   3f ef           ldi     r19, 0xFF       ; 255
350
 2a8:   26 1b           sub     r18, r22
351
 2aa:   37 0b           sbc     r19, r23
352
 2ac:   2a 31           cpi     r18, 0x1A       ; 26
353
 2ae:   31 05           cpc     r19, r1
354
 2b0:   2c f0           brlt    .+10            ;  0x2bc
355
 2b2:   20 e0           ldi     r18, 0x00       ; 0
356
 2b4:   30 e0           ldi     r19, 0x00       ; 0
357
 2b6:   40 e0           ldi     r20, 0x00       ; 0
358
 2b8:   50 e0           ldi     r21, 0x00       ; 0
359
 2ba:   2a c0           rjmp    .+84            ;  0x310
360
 2bc:   b8 01           movw    r22, r16
361
 2be:   a7 01           movw    r20, r14
362
 2c0:   02 2e           mov     r0, r18
363
 2c2:   04 c0           rjmp    .+8             ;  0x2cc
364
 2c4:   76 95           lsr     r23
365
 2c6:   67 95           ror     r22
366
 2c8:   57 95           ror     r21
367
 2ca:   47 95           ror     r20
368
 2cc:   0a 94           dec     r0
369
 2ce:   d2 f7           brpl    .-12            ;  0x2c4
370
 2d0:   81 e0           ldi     r24, 0x01       ; 1
371
 2d2:   90 e0           ldi     r25, 0x00       ; 0
372
 2d4:   a0 e0           ldi     r26, 0x00       ; 0
373
 2d6:   b0 e0           ldi     r27, 0x00       ; 0
374
 2d8:   04 c0           rjmp    .+8             ;  0x2e2
375
 2da:   88 0f           add     r24, r24
376
 2dc:   99 1f           adc     r25, r25
377
 2de:   aa 1f           adc     r26, r26
378
 2e0:   bb 1f           adc     r27, r27
379
 2e2:   2a 95           dec     r18
380
 2e4:   d2 f7           brpl    .-12            ;  0x2da
381
 2e6:   01 97           sbiw    r24, 0x01       ; 1
382
 2e8:   a1 09           sbc     r26, r1
383
 2ea:   b1 09           sbc     r27, r1
384
 2ec:   8e 21           and     r24, r14
385
 2ee:   9f 21           and     r25, r15
386
 2f0:   a0 23           and     r26, r16
387
 2f2:   b1 23           and     r27, r17
388
 2f4:   00 97           sbiw    r24, 0x00       ; 0
389
 2f6:   a1 05           cpc     r26, r1
390
 2f8:   b1 05           cpc     r27, r1
391
 2fa:   21 f0           breq    .+8             ;  0x304
392
 2fc:   81 e0           ldi     r24, 0x01       ; 1
393
 2fe:   90 e0           ldi     r25, 0x00       ; 0
394
 300:   a0 e0           ldi     r26, 0x00       ; 0
395
 302:   b0 e0           ldi     r27, 0x00       ; 0
396
 304:   9a 01           movw    r18, r20
397
 306:   ab 01           movw    r20, r22
398
 308:   28 2b           or      r18, r24
399
 30a:   39 2b           or      r19, r25
400
 30c:   4a 2b           or      r20, r26
401
 30e:   5b 2b           or      r21, r27
402
 310:   da 01           movw    r26, r20
403
 312:   c9 01           movw    r24, r18
404
 314:   8f 77           andi    r24, 0x7F       ; 127
405
 316:   90 70           andi    r25, 0x00       ; 0
406
 318:   a0 70           andi    r26, 0x00       ; 0
407
 31a:   b0 70           andi    r27, 0x00       ; 0
408
 31c:   80 34           cpi     r24, 0x40       ; 64
409
 31e:   91 05           cpc     r25, r1
410
 320:   a1 05           cpc     r26, r1
411
 322:   b1 05           cpc     r27, r1
412
 324:   39 f4           brne    .+14            ;  0x334
413
 326:   27 ff           sbrs    r18, 7
414
 328:   09 c0           rjmp    .+18            ;  0x33c
415
 32a:   20 5c           subi    r18, 0xC0       ; 192
416
 32c:   3f 4f           sbci    r19, 0xFF       ; 255
417
 32e:   4f 4f           sbci    r20, 0xFF       ; 255
418
 330:   5f 4f           sbci    r21, 0xFF       ; 255
419
 332:   04 c0           rjmp    .+8             ;  0x33c
420
 334:   21 5c           subi    r18, 0xC1       ; 193
421
 336:   3f 4f           sbci    r19, 0xFF       ; 255
422
 338:   4f 4f           sbci    r20, 0xFF       ; 255
423
 33a:   5f 4f           sbci    r21, 0xFF       ; 255
424
 33c:   e0 e0           ldi     r30, 0x00       ; 0
425
 33e:   f0 e0           ldi     r31, 0x00       ; 0
426
 340:   20 30           cpi     r18, 0x00       ; 0
427
 342:   a0 e0           ldi     r26, 0x00       ; 0
428
 344:   3a 07           cpc     r19, r26
429
 346:   a0 e0           ldi     r26, 0x00       ; 0
430
 348:   4a 07           cpc     r20, r26
431
 34a:   a0 e4           ldi     r26, 0x40       ; 64
432
 34c:   5a 07           cpc     r21, r26
433
 34e:   10 f0           brcs    .+4             ;  0x354
434
 350:   e1 e0           ldi     r30, 0x01       ; 1
435
 352:   f0 e0           ldi     r31, 0x00       ; 0
436
 354:   79 01           movw    r14, r18
437
 356:   8a 01           movw    r16, r20
438
 358:   27 c0           rjmp    .+78            ;  0x3a8
439
 35a:   60 38           cpi     r22, 0x80       ; 128
440
 35c:   71 05           cpc     r23, r1
441
 35e:   64 f5           brge    .+88            ;  0x3b8
442
 360:   fb 01           movw    r30, r22
443
 362:   e1 58           subi    r30, 0x81       ; 129
444
 364:   ff 4f           sbci    r31, 0xFF       ; 255
445
 366:   d8 01           movw    r26, r16
446
 368:   c7 01           movw    r24, r14
447
 36a:   8f 77           andi    r24, 0x7F       ; 127
448
 36c:   90 70           andi    r25, 0x00       ; 0
449
 36e:   a0 70           andi    r26, 0x00       ; 0
450
 370:   b0 70           andi    r27, 0x00       ; 0
451
 372:   80 34           cpi     r24, 0x40       ; 64
452
 374:   91 05           cpc     r25, r1
453
 376:   a1 05           cpc     r26, r1
454
 378:   b1 05           cpc     r27, r1
455
 37a:   39 f4           brne    .+14            ;  0x38a
456
 37c:   e7 fe           sbrs    r14, 7
457
 37e:   0d c0           rjmp    .+26            ;  0x39a
458
 380:   80 e4           ldi     r24, 0x40       ; 64
459
 382:   90 e0           ldi     r25, 0x00       ; 0
460
 384:   a0 e0           ldi     r26, 0x00       ; 0
461
 386:   b0 e0           ldi     r27, 0x00       ; 0
462
 388:   04 c0           rjmp    .+8             ;  0x392
463
 38a:   8f e3           ldi     r24, 0x3F       ; 63
464
 38c:   90 e0           ldi     r25, 0x00       ; 0
465
 38e:   a0 e0           ldi     r26, 0x00       ; 0
466
 390:   b0 e0           ldi     r27, 0x00       ; 0
467
 392:   e8 0e           add     r14, r24
468
 394:   f9 1e           adc     r15, r25
469
 396:   0a 1f           adc     r16, r26
470
 398:   1b 1f           adc     r17, r27
471
 39a:   17 ff           sbrs    r17, 7
472
 39c:   05 c0           rjmp    .+10            ;  0x3a8
473
 39e:   16 95           lsr     r17
474
 3a0:   07 95           ror     r16
475
 3a2:   f7 94           ror     r15
476
 3a4:   e7 94           ror     r14
477
 3a6:   31 96           adiw    r30, 0x01       ; 1
478
 3a8:   87 e0           ldi     r24, 0x07       ; 7
479
 3aa:   16 95           lsr     r17
480
 3ac:   07 95           ror     r16
481
 3ae:   f7 94           ror     r15
482
 3b0:   e7 94           ror     r14
483
 3b2:   8a 95           dec     r24
484
 3b4:   d1 f7           brne    .-12            ;  0x3aa
485
 3b6:   05 c0           rjmp    .+10            ;  0x3c2
486
 3b8:   ee 24           eor     r14, r14
487
 3ba:   ff 24           eor     r15, r15
488
 3bc:   87 01           movw    r16, r14
489
 3be:   ef ef           ldi     r30, 0xFF       ; 255
490
 3c0:   f0 e0           ldi     r31, 0x00       ; 0
491
 3c2:   6e 2f           mov     r22, r30
492
 3c4:   67 95           ror     r22
493
 3c6:   66 27           eor     r22, r22
494
 3c8:   67 95           ror     r22
495
 3ca:   90 2f           mov     r25, r16
496
 3cc:   9f 77           andi    r25, 0x7F       ; 127
497
 3ce:   d7 94           ror     r13
498
 3d0:   dd 24           eor     r13, r13
499
 3d2:   d7 94           ror     r13
500
 3d4:   8e 2f           mov     r24, r30
501
 3d6:   86 95           lsr     r24
502
 3d8:   49 2f           mov     r20, r25
503
 3da:   46 2b           or      r20, r22
504
 3dc:   58 2f           mov     r21, r24
505
 3de:   5d 29           or      r21, r13
506
 3e0:   b7 01           movw    r22, r14
507
 3e2:   ca 01           movw    r24, r20
508
 3e4:   1f 91           pop     r17
509
 3e6:   0f 91           pop     r16
510
 3e8:   ff 90           pop     r15
511
 3ea:   ef 90           pop     r14
512
 3ec:   df 90           pop     r13
513
 3ee:   08 95           ret
514
 3f0:   fc 01           movw    r30, r24
515
 3f2:   db 01           movw    r26, r22
516
 3f4:   40 81           ld      r20, Z
517
 3f6:   51 81           ldd     r21, Z+1        ; 0x01
518
 3f8:   22 81           ldd     r18, Z+2        ; 0x02
519
 3fa:   62 2f           mov     r22, r18
520
 3fc:   6f 77           andi    r22, 0x7F       ; 127
521
 3fe:   70 e0           ldi     r23, 0x00       ; 0
522
 400:   22 1f           adc     r18, r18
523
 402:   22 27           eor     r18, r18
524
 404:   22 1f           adc     r18, r18
525
 406:   93 81           ldd     r25, Z+3        ; 0x03
526
 408:   89 2f           mov     r24, r25
527
 40a:   88 0f           add     r24, r24
528
 40c:   82 2b           or      r24, r18
529
 40e:   28 2f           mov     r18, r24
530
 410:   30 e0           ldi     r19, 0x00       ; 0
531
 412:   99 1f           adc     r25, r25
532
 414:   99 27           eor     r25, r25
533
 416:   99 1f           adc     r25, r25
534
 418:   11 96           adiw    r26, 0x01       ; 1
535
 41a:   9c 93           st      X, r25
536
 41c:   11 97           sbiw    r26, 0x01       ; 1
537
 41e:   21 15           cp      r18, r1
538
 420:   31 05           cpc     r19, r1
539
 422:   a9 f5           brne    .+106           ;  0x48e
540
 424:   41 15           cp      r20, r1
541
 426:   51 05           cpc     r21, r1
542
 428:   61 05           cpc     r22, r1
543
 42a:   71 05           cpc     r23, r1
544
 42c:   11 f4           brne    .+4             ;  0x432
545
 42e:   82 e0           ldi     r24, 0x02       ; 2
546
 430:   37 c0           rjmp    .+110           ;  0x4a0
547
 432:   82 e8           ldi     r24, 0x82       ; 130
548
 434:   9f ef           ldi     r25, 0xFF       ; 255
549
 436:   13 96           adiw    r26, 0x03       ; 3
550
 438:   9c 93           st      X, r25
551
 43a:   8e 93           st      -X, r24
552
 43c:   12 97           sbiw    r26, 0x02       ; 2
553
 43e:   9a 01           movw    r18, r20
554
 440:   ab 01           movw    r20, r22
555
 442:   67 e0           ldi     r22, 0x07       ; 7
556
 444:   22 0f           add     r18, r18
557
 446:   33 1f           adc     r19, r19
558
 448:   44 1f           adc     r20, r20
559
 44a:   55 1f           adc     r21, r21
560
 44c:   6a 95           dec     r22
561
 44e:   d1 f7           brne    .-12            ;  0x444
562
 450:   83 e0           ldi     r24, 0x03       ; 3
563
 452:   8c 93           st      X, r24
564
 454:   0d c0           rjmp    .+26            ;  0x470
565
 456:   22 0f           add     r18, r18
566
 458:   33 1f           adc     r19, r19
567
 45a:   44 1f           adc     r20, r20
568
 45c:   55 1f           adc     r21, r21
569
 45e:   12 96           adiw    r26, 0x02       ; 2
570
 460:   8d 91           ld      r24, X+
571
 462:   9c 91           ld      r25, X
572
 464:   13 97           sbiw    r26, 0x03       ; 3
573
 466:   01 97           sbiw    r24, 0x01       ; 1
574
 468:   13 96           adiw    r26, 0x03       ; 3
575
 46a:   9c 93           st      X, r25
576
 46c:   8e 93           st      -X, r24
577
 46e:   12 97           sbiw    r26, 0x02       ; 2
578
 470:   20 30           cpi     r18, 0x00       ; 0
579
 472:   80 e0           ldi     r24, 0x00       ; 0
580
 474:   38 07           cpc     r19, r24
581
 476:   80 e0           ldi     r24, 0x00       ; 0
582
 478:   48 07           cpc     r20, r24
583
 47a:   80 e4           ldi     r24, 0x40       ; 64
584
 47c:   58 07           cpc     r21, r24
585
 47e:   58 f3           brcs    .-42            ;  0x456
586
 480:   14 96           adiw    r26, 0x04       ; 4
587
 482:   2d 93           st      X+, r18
588
 484:   3d 93           st      X+, r19
589
 486:   4d 93           st      X+, r20
590
 488:   5c 93           st      X, r21
591
 48a:   17 97           sbiw    r26, 0x07       ; 7
592
 48c:   08 95           ret
593
 48e:   2f 3f           cpi     r18, 0xFF       ; 255
594
 490:   31 05           cpc     r19, r1
595
 492:   79 f4           brne    .+30            ;  0x4b2
596
 494:   41 15           cp      r20, r1
597
 496:   51 05           cpc     r21, r1
598
 498:   61 05           cpc     r22, r1
599
 49a:   71 05           cpc     r23, r1
600
 49c:   19 f4           brne    .+6             ;  0x4a4
601
 49e:   84 e0           ldi     r24, 0x04       ; 4
602
 4a0:   8c 93           st      X, r24
603
 4a2:   08 95           ret
604
 4a4:   64 ff           sbrs    r22, 4
605
 4a6:   03 c0           rjmp    .+6             ;  0x4ae
606
 4a8:   81 e0           ldi     r24, 0x01       ; 1
607
 4aa:   8c 93           st      X, r24
608
 4ac:   12 c0           rjmp    .+36            ;  0x4d2
609
 4ae:   1c 92           st      X, r1
610
 4b0:   10 c0           rjmp    .+32            ;  0x4d2
611
 4b2:   2f 57           subi    r18, 0x7F       ; 127
612
 4b4:   30 40           sbci    r19, 0x00       ; 0
613
 4b6:   13 96           adiw    r26, 0x03       ; 3
614
 4b8:   3c 93           st      X, r19
615
 4ba:   2e 93           st      -X, r18
616
 4bc:   12 97           sbiw    r26, 0x02       ; 2
617
 4be:   83 e0           ldi     r24, 0x03       ; 3
618
 4c0:   8c 93           st      X, r24
619
 4c2:   87 e0           ldi     r24, 0x07       ; 7
620
 4c4:   44 0f           add     r20, r20
621
 4c6:   55 1f           adc     r21, r21
622
 4c8:   66 1f           adc     r22, r22
623
 4ca:   77 1f           adc     r23, r23
624
 4cc:   8a 95           dec     r24
625
 4ce:   d1 f7           brne    .-12            ;  0x4c4
626
 4d0:   70 64           ori     r23, 0x40       ; 64
627
 4d2:   14 96           adiw    r26, 0x04       ; 4
628
 4d4:   4d 93           st      X+, r20
629
 4d6:   5d 93           st      X+, r21
630
 4d8:   6d 93           st      X+, r22
631
 4da:   7c 93           st      X, r23
632
 4dc:   17 97           sbiw    r26, 0x07       ; 7
633
 4de:   08 95           ret
634
 4e0:   1f 93           push    r17
635
 4e2:   dc 01           movw    r26, r24
636
 4e4:   fb 01           movw    r30, r22
637
 4e6:   9c 91           ld      r25, X
638
 4e8:   92 30           cpi     r25, 0x02       ; 2
639
 4ea:   08 f4           brcc    .+2             ;  0x4ee
640
 4ec:   47 c0           rjmp    .+142           ;  0x57c
641
 4ee:   80 81           ld      r24, Z
642
 4f0:   82 30           cpi     r24, 0x02       ; 2
643
 4f2:   08 f4           brcc    .+2             ;  0x4f6
644
 4f4:   43 c0           rjmp    .+134           ;  0x57c
645
 4f6:   94 30           cpi     r25, 0x04       ; 4
646
 4f8:   51 f4           brne    .+20            ;  0x50e
647
 4fa:   11 96           adiw    r26, 0x01       ; 1
648
 4fc:   1c 91           ld      r17, X
649
 4fe:   84 30           cpi     r24, 0x04       ; 4
650
 500:   99 f5           brne    .+102           ;  0x568
651
 502:   81 81           ldd     r24, Z+1        ; 0x01
652
 504:   68 2f           mov     r22, r24
653
 506:   70 e0           ldi     r23, 0x00       ; 0
654
 508:   61 1b           sub     r22, r17
655
 50a:   71 09           sbc     r23, r1
656
 50c:   3f c0           rjmp    .+126           ;  0x58c
657
 50e:   84 30           cpi     r24, 0x04       ; 4
658
 510:   21 f0           breq    .+8             ;  0x51a
659
 512:   92 30           cpi     r25, 0x02       ; 2
660
 514:   31 f4           brne    .+12            ;  0x522
661
 516:   82 30           cpi     r24, 0x02       ; 2
662
 518:   b9 f1           breq    .+110           ;  0x588
663
 51a:   81 81           ldd     r24, Z+1        ; 0x01
664
 51c:   88 23           and     r24, r24
665
 51e:   89 f1           breq    .+98            ;  0x582
666
 520:   2d c0           rjmp    .+90            ;  0x57c
667
 522:   11 96           adiw    r26, 0x01       ; 1
668
 524:   1c 91           ld      r17, X
669
 526:   11 97           sbiw    r26, 0x01       ; 1
670
 528:   82 30           cpi     r24, 0x02       ; 2
671
 52a:   f1 f0           breq    .+60            ;  0x568
672
 52c:   81 81           ldd     r24, Z+1        ; 0x01
673
 52e:   18 17           cp      r17, r24
674
 530:   d9 f4           brne    .+54            ;  0x568
675
 532:   12 96           adiw    r26, 0x02       ; 2
676
 534:   2d 91           ld      r18, X+
677
 536:   3c 91           ld      r19, X
678
 538:   13 97           sbiw    r26, 0x03       ; 3
679
 53a:   82 81           ldd     r24, Z+2        ; 0x02
680
 53c:   93 81           ldd     r25, Z+3        ; 0x03
681
 53e:   82 17           cp      r24, r18
682
 540:   93 07           cpc     r25, r19
683
 542:   94 f0           brlt    .+36            ;  0x568
684
 544:   28 17           cp      r18, r24
685
 546:   39 07           cpc     r19, r25
686
 548:   bc f0           brlt    .+46            ;  0x578
687
 54a:   14 96           adiw    r26, 0x04       ; 4
688
 54c:   8d 91           ld      r24, X+
689
 54e:   9d 91           ld      r25, X+
690
 550:   0d 90           ld      r0, X+
691
 552:   bc 91           ld      r27, X
692
 554:   a0 2d           mov     r26, r0
693
 556:   24 81           ldd     r18, Z+4        ; 0x04
694
 558:   35 81           ldd     r19, Z+5        ; 0x05
695
 55a:   46 81           ldd     r20, Z+6        ; 0x06
696
 55c:   57 81           ldd     r21, Z+7        ; 0x07
697
 55e:   28 17           cp      r18, r24
698
 560:   39 07           cpc     r19, r25
699
 562:   4a 07           cpc     r20, r26
700
 564:   5b 07           cpc     r21, r27
701
 566:   18 f4           brcc    .+6             ;  0x56e
702
 568:   11 23           and     r17, r17
703
 56a:   41 f0           breq    .+16            ;  0x57c
704
 56c:   0a c0           rjmp    .+20            ;  0x582
705
 56e:   82 17           cp      r24, r18
706
 570:   93 07           cpc     r25, r19
707
 572:   a4 07           cpc     r26, r20
708
 574:   b5 07           cpc     r27, r21
709
 576:   40 f4           brcc    .+16            ;  0x588
710
 578:   11 23           and     r17, r17
711
 57a:   19 f0           breq    .+6             ;  0x582
712
 57c:   61 e0           ldi     r22, 0x01       ; 1
713
 57e:   70 e0           ldi     r23, 0x00       ; 0
714
 580:   05 c0           rjmp    .+10            ;  0x58c
715
 582:   6f ef           ldi     r22, 0xFF       ; 255
716
 584:   7f ef           ldi     r23, 0xFF       ; 255
717
 586:   02 c0           rjmp    .+4             ;  0x58c
718
 588:   60 e0           ldi     r22, 0x00       ; 0
719
 58a:   70 e0           ldi     r23, 0x00       ; 0
720
 58c:   cb 01           movw    r24, r22
721
 58e:   1f 91           pop     r17
722
 590:   08 95           ret
723
 592:   2f 92           push    r2
724
 594:   3f 92           push    r3
725
 596:   4f 92           push    r4
726
 598:   5f 92           push    r5
727
 59a:   6f 92           push    r6
728
 59c:   7f 92           push    r7
729
 59e:   8f 92           push    r8
730
 5a0:   9f 92           push    r9
731
 5a2:   af 92           push    r10
732
 5a4:   bf 92           push    r11
733
 5a6:   cf 92           push    r12
734
 5a8:   df 92           push    r13
735
 5aa:   ef 92           push    r14
736
 5ac:   ff 92           push    r15
737
 5ae:   0f 93           push    r16
738
 5b0:   1f 93           push    r17
739
 5b2:   cf 93           push    r28
740
 5b4:   df 93           push    r29
741
 5b6:   cd b7           in      r28, 0x3d       ; 61
742
 5b8:   de b7           in      r29, 0x3e       ; 62
743
 5ba:   ca 1b           sub     r28, r26
744
 5bc:   db 0b           sbc     r29, r27
745
 5be:   0f b6           in      r0, 0x3f        ; 63
746
 5c0:   f8 94           cli
747
 5c2:   de bf           out     0x3e, r29       ; 62
748
 5c4:   0f be           out     0x3f, r0        ; 63
749
 5c6:   cd bf           out     0x3d, r28       ; 61
750
 5c8:   09 94           ijmp
751
 5ca:   2a 88           ldd     r2, Y+18        ; 0x12
752
 5cc:   39 88           ldd     r3, Y+17        ; 0x11
753
 5ce:   48 88           ldd     r4, Y+16        ; 0x10
754
 5d0:   5f 84           ldd     r5, Y+15        ; 0x0f
755
 5d2:   6e 84           ldd     r6, Y+14        ; 0x0e
756
 5d4:   7d 84           ldd     r7, Y+13        ; 0x0d
757
 5d6:   8c 84           ldd     r8, Y+12        ; 0x0c
758
 5d8:   9b 84           ldd     r9, Y+11        ; 0x0b
759
 5da:   aa 84           ldd     r10, Y+10       ; 0x0a
760
 5dc:   b9 84           ldd     r11, Y+9        ; 0x09
761
 5de:   c8 84           ldd     r12, Y+8        ; 0x08
762
 5e0:   df 80           ldd     r13, Y+7        ; 0x07
763
 5e2:   ee 80           ldd     r14, Y+6        ; 0x06
764
 5e4:   fd 80           ldd     r15, Y+5        ; 0x05
765
 5e6:   0c 81           ldd     r16, Y+4        ; 0x04
766
 5e8:   1b 81           ldd     r17, Y+3        ; 0x03
767
 5ea:   aa 81           ldd     r26, Y+2        ; 0x02
768
 5ec:   b9 81           ldd     r27, Y+1        ; 0x01
769
 5ee:   ce 0f           add     r28, r30
770
 5f0:   d1 1d           adc     r29, r1
771
 5f2:   0f b6           in      r0, 0x3f        ; 63
772
 5f4:   f8 94           cli
773
 5f6:   de bf           out     0x3e, r29       ; 62
774
 5f8:   0f be           out     0x3f, r0        ; 63
775
 5fa:   cd bf           out     0x3d, r28       ; 61
776
 5fc:   ed 01           movw    r28, r26
777
 5fe:   08 95           ret
778
 600:   f8 94           cli
779
 602:   ff cf           rjmp    .-2             ;  0x602

Vielleicht sollten wir das auch mal mit dem .elf file machen, da werden 
zusätzlich noch die Namen der Funktionen mit drinstehen. Ruf doch zum 
Spaß mal make disasm auf (in dem oben geposteten Makefile ist das drin)

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Da kommen dann noch 104 Bytes an Flash-Daten (zum init von .data) hinzu.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

...wimre hat der ATtiny2313 128 Bytes RAM.  Da von diesen offenbar 
mindestens 104 statisch belegt werden, bleiben noch ganze 24 Bytes RAM 
über.  Die tolle ISR braucht z.B. schon 20 Bytes Stack, d.h. es bleiben 
maximal 4 Bytes Luft an freiem RAM!

Das führt zwar nicht zu Problemen mit dem Loader, aber der Autor ist 
sich nicht ganz über die verwendete Hardware klar.

von Bernd K. (prof7bit)


Lesenswert?

Johann L. schrieb:
> Da kommen dann noch 104 Bytes an Flash-Daten (zum init von .data) hinzu.

Nein, nur 8. R26 startet bei 96 und endet bei 104. Im Hex-File sind 
keine 104 zusätzlichen Bytes mehr, nur noch ne kleine Handvoll.

Was mich mehr irritiert ist die Diskrepanz zwischen der Behauptung das 
Kompilat wäre nur 92 Bytes groß und dem geposteten Hex-File mit mehr als 
1,5 KB.

Dieses Hex-File stammt definitiv nicht aus dem Compilerdurchlauf aus 
Posting #6 der mit 92 Bytes endet.

Vielleicht bekommen wir ja auch noch mal das Disassemblat des 
zugehörigen .elf zu Gesicht, da stehen wahrscheinlich ein paar 
hilfreiche Labels drin so daß man sieht was was ist.

Alternativ könnte ja mal der große AVR-Assembler Guru des Forums hier 
auftauchen und uns das bis ins Detail erläutern was der Code da 
eigentlich tut (oder besser vielleicht lieber doch nicht).

Ich vermute es kommt von der float-Berechnung und allem was dadurch mit 
reingezogen wird und mangels Optimierung und mangels gc-sections auch 
nicht mehr rausgeworfen wird.

von Bernd-Dieter B. (bedi)


Angehängte Dateien:

Lesenswert?

Weil ich die verschiedenen Hinweise und Ideen mit einigen Änderungen und 
Erweiterungen aufzugreifen versucht hatte, habe ich jetzt nochmal das 
zum Fehler führende C-Programm im AVR-Studio mit "build" verarbeitet und 
etliche dabei erhaltene Dateien angehängt. Ich hoffe, dass z.B. aus dem 
*.elf jemand einen Hinweis ableiten kann, warum mein Programm sich nicht 
flashen lässt.
Dies ist die Version 5 (fehler-tiny2313-05.c) meines Programms.

Außerdem habe ich das von Studio 6 erzeugte Makefile gestartet, aber nur 
die Meldung "Make: No rule to make target 'flash'" erhalten.

Schließlich habe ich noch ein eigenhändig erstelltes Makefile gestartet 
und die Meldung erhalten: "avrdude: ERROR: address 0x0806 out of range 
at line 129 of main.hex"   avrdude: write to file 'main.hex' failed". 
Dieses Makefile habe ich unter dem Namen "Makefile_Eigenbau" angehängt. 
Beim Starten hieß es selbstverständlich "Makefile".

Hilft es, wenn ich eine Version 6 starte, die keinen Fehler beim 
Flash-Versuch bringt, und zum Vergleich einige (welche?) Dateien poste?

Mit dem disassemblierten Code kann ich leider wenig anfangen, weil ich 
nur winzige Assembler-Kenntnisse habe. Ich hatte gehofft, dass die 
Disassemblierung einen C-Code hervorbringt.

von Bernd K. (prof7bit)


Lesenswert?

Bernd-Dieter Bernt schrieb:

> fehler-tiny2313-05.hex (189 Bytes)

Das ist nicht das Kompilat von vorgestern. Dieses ist winzig klein und 
wird ohne Fehler auf den Tiny passen.

von Bernd K. (prof7bit)


Angehängte Dateien:

Lesenswert?

1
avr-objdump -d -j .text -j .data -m avr5 main.elf > main.txt

Ergebnis siehe Anhang.

Wie vermutet ist es die Verwendung von float. Die zusätzlichen 256 Bytes 
im Datensegment in __clz_tab rühren ebenfalls daher und werden verwendet 
bei der Umrechnung von int nach float (siehe auch google: __clz_tab zu 
dem Thema).

Generell ist es eine gute Idee auf so kleinen 8-Bit Controllern von 
jeglicher Verwendung von Fließkomma-Berechnungen abzusehen, es gibt 
meist immer eine clevere Möglichkeit das mit Integer-Berechnungen 
hinzubekommen und wenn Du es schaffst Dich auf Faktoren 2, 4, 8, etc... 
bei Multiplikationen und Divisionen zu beschränken (aus welchen der 
Compiler simple bit-shifts machen wird) wird es nochmal effizienter und 
oftmals willst Du Dich sogar bei der Verwendung von Integern auch lieber 
auf 8 bit beschränken wollen und nicht so oft gleich mit int um Dich 
werfen.

Ein Blick ins .lss File oder in die Ausgabe von
1
avr-objdump -d -j .text -j .data -m avr5 main.elf

ist bei relativ kleinen Programmen für so kleine Controller noch meist 
recht übersichtlich, man sieht mit etwas Übung schnell wo unnötig oder 
unerwartet viel Platz verschwendet wird (und dementsprechend oft auch 
Laufzeit bei engen Interrupt-Routinen auf ohnehin nicht besonders 
schnellen Controllern)

Ein häufiger Blick in den Assembler-Output sollte zur Routine werden, so 
lange bis Du ein Gefühl dafür bekommst was der Compiler da so 
fabriziert.

Bei größeren Controllern und dementsprechend evtl später umfangreicheren 
Programmen kann das jedoch schnell viel unübersichtlicher werden, da 
kann einem angesichts von zig kB Flash auch mal was reinrutschen was man 
nicht sofort sieht und anfangs vielleicht auch nicht weiter stört aber 
evtl. dennoch vermieden werden sollte, also solltest Du ein Gefühl dafür 
entwickeln wie das auszusehen hat solange Deine Programme noch klein und 
übersichtlich sind. Das ist alles kein Hexenwerk, das kommt mit der 
Zeit.

von neuer PIC Freund (Gast)


Lesenswert?

Hupps, ich sehe gerade: 3.4.2.

Dein Compiler ist von September 2004. Probier doch lieber mal was 
aktuelles. Ich könnte mir vorstellen, dass damals float auf den tinys 
eher suboptimal implementiert wurde.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Bernd K. schrieb:
> Die zusätzlichen 256 Bytes im Datensegment in __clz_tab rühren

Das Problem hatte ich bereits vor 4 Jahren behoben:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29524#c24


Bernd-Dieter Bernt schrieb:
1
for (n=2;n>0;n++)               /* Zeile 11 */
Eine umständlich formulierte Endlosschleife:  Wenn du zu einer positiven 
Zahl 1 hinzuzählst — egal wie oft — wird das Ergebnis natürlich immer 
positiv sein.


neuer PIC Freund schrieb im Beitrag #4071791:
> Hupps, ich sehe gerade: 3.4.2.

Das ist nicht die Version des Compilers; es ist die Version die Atmel 
dran geklebt hat.

von Bernd-Dieter B. (bedi)


Lesenswert?

Bernd K. schrieb:
> Wie vermutet ist es die Verwendung von float.
Diese Diagnose hat mich erstmal geschockt und frustriert, weil ich von 
Programmierung in C auf dem PC Probleme dieser Art überhaupt nicht 
kenne. Ich wollte eigentlich nur kleine Programme in meiner 
Lieblingssprache C auf verschiedenen Mikroprozessoren laufen lassen. Nun 
muss ich mich also mit Problemen wegen geringem Speicherplatz und 
ausufernden gcc-internen Routinen rumschlagen. Aber es wird wohl nicht 
zu vermeiden sein.

Ich habe jetzt dazu nur noch die Fragen: Warum tritt das überlange 
hex-file nicht auf, wenn ich nicht die an funktion() übergebene Zahl (y 
= funktion(unsigned int 123), sondern eine erst innerhalb der Funktion 
zugewiesene Zahl (zahl = 123; in Zeile 1) in float umwandle?
Warum tritt das überlange hex-file nicht auf, wenn ich nach der 
Umwandlung in float "zahl_dez = 12.3;" einfüge?
Und warum tritt das überlange hex-file auch nicht auf, wenn ich Zeile 16 
weglasse?

Noch etwas anderes:
>Ich vermute es kommt von der float-Berechnung und allem was dadurch mit
>reingezogen wird und mangels Optimierung und mangels gc-sections auch
>nicht mehr rausgeworfen wird.
Ich dachte, die Optimierung mittels "-Os" im Makefile veranlasst zu 
haben.
Wie sollte ich die Optimierung anfordern?

Meine Version 5:
1
int funktion(unsigned int zahl)
2
{
3
  int n, ergebnis;
4
  float zahl_dez;
5
6
/*  zahl = 123;                     // Zeile 1 */
7
  zahl_dez = (float) zahl / 10;   /* Zeile 2 */
8
/*  zahl_dez = 12.3;                // Zeile 3 */
9
10
  for (n=2;n>0;n++)               /* Zeile 11 */
11
  {                               /* Zeile 12 */
12
    if(zahl_dez < 10)             /* Zeile 13 */
13
    {                             /* Zeile 14 */
14
      ergebnis = n;               /* Zeile 15 */
15
      break;                      /* Zeile 16 */
16
    }                             /* Zeile 17 */
17
    zahl_dez = zahl_dez / 10;     /* Zeile 18 */
18
  }                               /* Zeile 19 */
19
  return n;
20
}
21
22
int main(void)
23
{
24
  int x;
25
  while(1)
26
  {
27
    x = 123;
28
  } /* Ende while(1) */
29
  return 0;
30
} /* Ende main() */

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Bernd-Dieter Bernt schrieb:
> Bernd K. schrieb:
>> Wie vermutet ist es die Verwendung von float.
> Diese Diagnose hat mich erstmal geschockt und frustriert, weil ich von
> Programmierung in C auf dem PC Probleme dieser Art überhaupt nicht
> kenne.

"Bisher hatte ich auf meinem Flugzeugträger nie Platzprobleme.  Ich bin 
geschockt und frustriert, wie wenig Platz in meinem neuen Kajak ist!"

Aber selbst mit deiner Nußschale kann man float sinnvoll einsetzen.  Ein 
Beispiel, was geht ist z.B. im Wiki: 
4000 Stellen von Pi mit ATtiny2313

Unabdingbar ist jedoch, daß du ein Verständnis dafür entwickelst, wie 
limitiert die eingesetzte Hardware ist, insbesondere im Vergleich mit 
einem PC — selbst mit einem 80286.


> Nun muss ich mich also mit Problemen wegen geringem Speicherplatz
> und ausufernden gcc-internen Routinen rumschlagen.

Die float Routinen stehen in Assembler und sind von erfahrenen 
Entwicklern geschrieben; in diesem Falle von Autoren der avr-libc.  Wenn 
der µC keine float-Hardware hat, dann muss man das alles eben 
ausprogrammieren.  Ein GCC kann auch keine FPU herbeizaubern...

> Und warum tritt das überlange hex-file auch nicht auf, wenn ich
> Zeile 16 weglasse?

vermutlich irgendwelche Optimerungen.  Constant folding, dead code 
elimination, etc.  Um eine genaue Antwort zu geben, könnte man die 
GCC-Dumps lesen.  Wenn es dir den Aufwand wert ist: Die Dumps bekommst 
du mit -fdump-rtl-all-details -fdump-tree-all-details

> Ich dachte, die Optimierung mittels "-Os" im Makefile veranlasst
> zu haben.

Optimierungen ändern nicht den Code in Bibliotheken.


> Meine Version 5:
> int funktion(unsigned int zahl)

Diese Funktion wird nicht referenziert.  Bei entsprechender Optimierung 
wird der komplette Code entsorgt — egal was da alles geschrieben steht.

>
1
int main(void)
2
> {
3
>   int x;
4
>   while(1)
5
>   {
6
>     x = 123;
7
>   } /* Ende while(1) */
8
>   return 0;
9
> } /* Ende main() */

Das ist gleichbedeutend mit:
1
int main (void)
2
{
3
    while (1);
4
}

von Vlad T. (vlad_tepesch)


Lesenswert?

Bernd-Dieter Bernt schrieb:
> Diese Diagnose hat mich erstmal geschockt und frustriert, weil ich von
> Programmierung in C auf dem PC Probleme dieser Art überhaupt nicht
> kenne. Ich wollte eigentlich nur kleine Programme in meiner
> Lieblingssprache C auf verschiedenen Mikroprozessoren laufen lassen. Nun
> muss ich mich also mit Problemen wegen geringem Speicherplatz und
> ausufernden gcc-internen Routinen rumschlagen. Aber es wird wohl nicht
> zu vermeiden sein.

wie wärs, wenn du einfach einen aktuellen Compiler benutzt?

Johann L. schrieb:
> Bernd K. schrieb:
>> Die zusätzlichen 256 Bytes im Datensegment in __clz_tab rühren
>
> Das Problem hatte ich bereits vor 4 Jahren behoben:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29524#c24

Das lässt doch hoffen, dass es dannach sehr viel besser aussieht.

Desweiteren:
ist diese Funktion wirklich nötig?
Vom groben draufschauen, würde ich sagen, da wird nur die Anzahl der 
Stellen ermittelt. Also quasi der Logarithmus zur basis 10. da kann man 
zum einen die standardbibliothek fragen (log(zahl)) oder zum anderen 
komplett auf Floats verzichten, da dein input argument ja eh ein integer 
ist.

von Bernd-Dieter B. (bedi)


Lesenswert?

Vlad Tepesch schrieb:
> wie wärs, wenn du einfach einen aktuellen Compiler benutzt?
Ich benutze AVR Studio 6.1 und dessen Compiler. Ich denke, das ist 
aktuell genug. Vergl. "neuer PIC Freund schrieb im Beitrag #4071791:
> Hupps, ich sehe gerade: 3.4.2.
Das ist nicht die Version des Compilers; es ist die Version die Atmel
dran geklebt hat.".

> Desweiteren:
> ist diese Funktion wirklich nötig?
> Vom groben draufschauen, würde ich sagen, da wird nur die Anzahl der
> Stellen ermittelt. Also quasi der Logarithmus zur basis 10. da kann man
> zum einen die standardbibliothek fragen (log(zahl)) oder zum anderen
> komplett auf Floats verzichten, da dein input argument ja eh ein integer
> ist.
Der Zehnerlogarithmus einer Integer-Zahl ist (bis auf log von 
Zehnerpotenzen) eine Dezimalzahl, kein Integer. Mit dem 
Zehnerlogarithmus würde ich also wieder eine Fließkommazahl benutzen.

Ich habe jetzt die Stellen-Anzahl mittels eines else-if-Konstrukts ohne 
floats ermittelt: if(zahl==0)...else if(zahl>=1 && zahl<=9)... etc. Auf 
diese Weise kann ich aber nur die Stellen-Anzahl von Zahlen bis 65.535 
(mit uint16_t zahl) oder bis 4.294.967.295 (mit uint32_t zahl) 
ermitteln. Mein ursprünglich angedachter Algorithmus war für im Prinzip 
beliebig viele Stellen geeignet. Allerdings habe ich inzwischen bemerkt, 
dass auch dieser Algorithmus auf einem Mikrocontroller den o.g. 
Beschränkungen unterliegt und somit auch nur für max. zahl=4.294.967.295 
die Stellen-Anzahl ermitteln kann.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ich habe jetzt die Hinweise und Ratschläge von Bernd K. und Johann L. 
befolgt und auf floats verzichtet (s.o.) und meinen Code möglichst kurz 
gehalten. Dadurch ist mein main.hex nur noch 628 Bytes groß, obwohl das 
C-Coding ca. 100 Zeilen lang ist, und ich kann jetzt mit der 
eigentlichen Programm-Entwicklung fortfahren.

Darum schlage ich vor (wenn ich das darf), die Diskussion an dieser 
Stelle zu beenden mit dem Ergebnis:
Man sollte float-Zahlen auf Mikrocontrollern möglichst vermeiden, stets 
mit möglichst kleinen Integertypen arbeiten und die GCC-internen 
Optimierungen in Anspruch nehmen.

Außerdem schlage ich vor, im AVR-GCC-Tutorial ein Kapitel "Tipps für 
Anfänger" oder "häufige Fehlerquellen" hinzuzufügen, mit Ratschlägen der 
o.g. Art.

Ich bedanke mich ganz herzlich bei Ingo, Peter M., m.n., neuer PIC 
Freund, Linksammler, Karl Heinz, Bernd K., Johann L. und Vlad Tepech für 
ihre Beiträge und ihre Geduld mit mir AVR-Anfänger.

von Joachim B. (jar)


Lesenswert?

Bernd-Dieter Bernt schrieb:
> Man sollte float-Zahlen auf Mikrocontrollern möglichst vermeiden, stets
> mit möglichst kleinen Integertypen arbeiten und die GCC-internen
> Optimierungen in Anspruch nehmen.

ein wahres Wort, gerade an AVR habe ich bei AD Wandlungen lieber auf 
INTs gesetzt und in der Umrechnung das Komma als Text eingefügt.

von m.n. (Gast)


Lesenswert?

Bernd-Dieter Bernt schrieb:
> Man sollte float-Zahlen auf Mikrocontrollern möglichst vermeiden,

Da muß ich widersprechen: das ist die falsche Folgerung aus mangelnder 
Programmiererfahrung! Leider wird das immer wiederholt und durch die 
Weiten des Netzes als Gerücht verbreitet :-(

Joachim B. schrieb:
> ein wahres Wort, gerade an AVR habe ich bei AD Wandlungen lieber auf
> INTs gesetzt und in der Umrechnung das Komma als Text eingefügt.

Schon vor 15 Jahren habe ich auf dem AT90S2313 'float' verwendet mit 
besten Ergebnissen. 'Ints' hätten die Berechnungen nicht so kompakt 
geschafft!

von Oliver S. (oliverso)


Lesenswert?

Bernd-Dieter Bernt schrieb:
> Außerdem schlage ich vor, im AVR-GCC-Tutorial ein Kapitel "Tipps für
> Anfänger" oder "häufige Fehlerquellen" hinzuzufügen, mit Ratschlägen der
> o.g. Art.

Der einzige sinnvolle Rat lautet:

Nimm einen Tiny mit wenig Speicher nur dann, wenn es absolut unbedingt 
erforderlich ist und wenn du genau weisst, was du da tust. Als Anfänger 
bitte nicht.

Oliver

von Joachim B. (jar)


Lesenswert?

m.n. schrieb:
> Da muß ich widersprechen: das ist die falsche Folgerung aus mangelnder
> Programmiererfahrung! Leider wird das immer wiederholt und durch die
> Weiten des Netzes als Gerücht verbreitet :-(

widersprechen ist leicht, dann erzähl doch mal wie man den Flash und Ram 
Verbrauch mit Einbindung der float LIB trotzdem kleinhalten kann?

Ich lerne wirklich gerne dazu, auch ein Grund warum ich hier bin.

von Karl H. (kbuchegg)


Lesenswert?

Bernd-Dieter Bernt schrieb:

> Der Zehnerlogarithmus einer Integer-Zahl ist (bis auf log von
> Zehnerpotenzen) eine Dezimalzahl, kein Integer.


Richtig.
Du verwendest aber nur den ganzzahligen Anteil davon

Deine Funktion lässt sich daher bei gleichem Endergebnis so schreiben.
1
uint8_t funktion( uint16_t zahl)
2
{
3
  uint8_t ergebnis = 1;
4
5
  while( zahl > 10 ) {
6
    ergebnis++;
7
    zahl /= 10;
8
  }
9
10
  return ergebnis;
11
}

> ermitteln. Mein ursprünglich angedachter Algorithmus war für im Prinzip
> beliebig viele Stellen geeignet.

Mit Sicherheit nicht. Denn da gibt es noch so eine Kleinigkeit wie 
'Datentypen', die dir einen Strich durch die Rechnung machen. In einen 
uint16_t (vulgo unsigned int) passen nun mal keine größeren Zahlen als 
solche, die 5 Stellen haben. Wenn das Argument an die Funktion ein 
uint16_t ist, dann kann das Ergebnis daher nicht größer als 5 sein. Das 
kannst du drehen und wenden wie du willst.

> oder bis 4.294.967.295 (mit uint32_t zahl) ermitteln.

Und?
Gleiches Schema. Solange dich nur der ganzzahlige Anteil interessiert, 
schreibst du dir eine entsprechende Funktion für einen uint32_t die nach 
dem gleichen Schema funktioniert. Kein Mensch braucht dazu float. Das 
Ergebnis kann auch hier nicht größer als 10 sein, d.h. fuer 'ergebnis' 
reicht auf jeden Fall ein uint8_t aus (was dem Tiny schon mal bei den 
Inkrement hilft). An den Divisionen durch 10 ändert das nichts. wird 
eben ein 32 Bit Wert durch 32 Bit - 10 dividiert.

Fazit:
Auch wenn die Theorie sagt, dass der 10-er Logarithmus genau das Ergbnis 
enthält, das man haben will, sollte man doch mal darüber nachdenken, ob 
man im konkreten Fall den 'vollen' Weg gehen muss, oder ob die 
Aufgabenstellung es ermöglicht eine Abkürzung zu gehen.
Gegen Brain 2.0 ist auch der cleverste Compiler nur ein müder Abklatsch.

Berücksichtigt man noch, dass Multiplikationen für einen µC meist 
weniger Aufwand sind als Divisionen, dann landet man ganz zwangsläufig 
bei
1
uint8_t funktion( uint16_t zahl)
2
{
3
  uint8_t ergebnis = 0;
4
  uint16_t mask = 1;
5
6
  while( mask <= zahl ) {
7
    ergebnis++;
8
    mask *= 10;
9
  }
10
11
  return ergebnis;
12
}
und auch hier wieder: niemand braucht hier Floating Point.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Joachim B. schrieb:
> widersprechen ist leicht, dann erzähl doch mal wie man den Flash und Ram
> Verbrauch mit Einbindung der float LIB trotzdem kleinhalten kann?

Zahlen hatte ich weiter oben genannt: 
Beitrag "Re: flash-Fehler mit ATtiny2313, compile ok"
Die Grundrechenarten in 'float' brauchen < 1K. Wenn man die von 'float' 
gebotenen sechs Stellen nebst hoher Dynamik braucht, ist das eine sehr 
kompakte Lösung. Rechnereien mit 'long' oder 'long long' brauchen 
letztlich genausoviel Programmspeicher und sind zudem unübersichtlich.

Hier geht es um den ATtiny2313. Falls es knapp wird, gibt es auch den 
4313 als Ersatz mit mehr Speicher. Selbst bei den tiny Tinys hat man die 
Wahl von z.B. 25/45/85 mit acht Beinchen oder Tiny44/84 mit 14 Pins.

Dein ADC-Beispiel mit 10-Bit Auflösung schafft ein 'int' locker. Das ist 
keine Aufgabe für 'float'. Aber sobald an anderer Stelle die libm 
eingebunden wird, kann man auch im restlichen Programm 'float' rechnen 
lassen.
Dennoch habe ich Beispiele für einen ATtiny25 mit ADC-Nutzung, wo ich 
unverdrossen 'float' rechnen lasse, das Programm dadurch übersichtlich 
bleibt und dennoch Platz in dem (kleinen) 2K Flash bleibt: 
http://www.mino-elektronik.de/Generator/takte_impulse.htm#bsp5
und der nachfolgende U2F-Wandler.
Ob der ADC jetzt 10, 16 oder 24 Bit liefert, die Berechnung bleibt 
transparent und genau.

Vorbeugend: das nächste Gerücht besagt, daß 'float' Berechnungen langsam 
wären. Das trifft ebenfalls nicht zu und wurde hier an vielen Stellen 
ausgiebig besprochen (beschimpft) ;-)

von Joachim B. (jar)


Lesenswert?

m.n. schrieb:
> Dein ADC-Beispiel mit 10-Bit Auflösung schafft ein 'int' locker. Das ist
> keine Aufgabe für 'float'.

danke das du mir da zustimmst! Dann habe ich ja nix falsch gemacht.

m.n. schrieb:
> Aber sobald an anderer Stelle die libm
> eingebunden wird,

habe ich aus genannten Gründen vermieden, warum auch? ich bekomme mit 
INT und LONG hinreichende Genauigkeit, ob das nun mV oder dezi_mass ist 
liegt ja nur in meiner Interpretation und Komma kann ich im Ausgabe 
"String" einfügen.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Joachim B. schrieb:
> habe ich aus genannten Gründen vermieden,

Ist ja völlig in Ordnung!
Vor langer, langer Zeit habe ich auch Alles mit 16 oder 32 Bit Werten 
hin und zurückgerechnet: Meter-Inch, kG, N, lbs, psi, Bratkartoffelquark 
hoch 3, usw. Irgendwann gab es brauchbare Float-Bibliothen (Keil 8051) 
und ab dann wurde das Leben erheblich leichter.

Ob ein ADC jetzt 2,345 mV/Schritt, 3,79 µV/Schritt oder sonstetwas 
ausgibt: die Skalierung ist ein Kinderspiel. Wenn ich heutzutage noch 
sehe, daß manch einer Referenzspannung und Teiler am ADC so wählt, daß 
es genau 5 mV/Schritt werden, muß ich lächeln. Unnötiger Aufwand an 
völlig falscher Stelle.

von Vlad T. (vlad_tepesch)


Lesenswert?

m.n. schrieb:
> Ob ein ADC jetzt 2,345 mV/Schritt, 3,79 µV/Schritt oder sonstetwas
> ausgibt: die Skalierung ist ein Kinderspiel. Wenn ich heutzutage noch
> sehe, daß manch einer Referenzspannung und Teiler am ADC so wählt, daß
> es genau 5 mV/Schritt werden, muß ich lächeln. Unnötiger Aufwand an
> völlig falscher Stelle.

floating point math ist aber Faktor 100 - 1000 langsamer.
Manch einen mag das für seine Anwendung stören.
Solange man die hohe Dynamik nicht benötigt, würde ich sie auf so 
kleinen µCs auch nicht benutzen.

Auf nem größeren ARM, der VFP oder sogar vielleicht sogar NEON hat - who 
cares.

ABer jeder der ernsthafte Berechnungen mit floats macht, sollte sich 
vorher das mal zu gemüte führen:
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

Damit er weiß, was tatsächlich passiert, worauf er achten muss und wann 
er lieber doch was anderes benutzen sollte. Vor allem wenn nur Single 
Precision Floating Point verfügbar ist.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> floating point math ist aber Faktor 100 - 1000 langsamer.

So einen Schwachsinn gab es hier ja schon lange nicht mehr!

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.