Hy, das ist mein erstest Post hier, und hoffe das ich hier richtig bin :-) habe mir das myAVR MK2, einsteigerpacket geholt, bis auf ein paar kleine druckfehler, finde ich das ganze Testboard und Lehrbuch ganz gut. jetzt hänge ich aber an einer stelle, an der eine warteschleife (in Assembler) programmiert wird. mir ist nicht klar wie die auf den Faktor 3 (im bild rot eingekreist) kommen, müssten sich die zyklen der befehle "dec" und "brne" nicht da zu addieren und nicht multiplizieren? Oder habe ich da ein generellen denkfehler? :-(
Theo K. schrieb: > mir ist nicht klar wie die auf den Faktor 3 (im bild rot eingekreist) > kommen, müssten sich die zyklen der befehle "dec" und "brne" nicht da zu > addieren und nicht multiplizieren? Es ist eine Schleife, die mehrfach durchlaufen wird.
Wenn du für die Herstellung eines Werkstücks 3 Stunden brauchst, dann brauchst du für 1400 Werkstücke 1400 * 3 Stunden. Wobei du nicht ganz unrecht hast. Die Berechnung stimmt so nicht ganz, weil die 1400 ja durch 2 ineinander geschachtelte Schleifen entstehen und dahe rnicht jeder Durchlauf exakt 3 Zyklen braucht. Der Fehler ist aber wohl für den vorgesehenen Zweck dieser Verzögerung nicht relevant.
erstmal danke für die schnellen antworten :-) auf die genauigkeit kommt es hier wirklich nicht an, zweck der Übung ist nur einen summer mit 440Hz zu betreiben :-) das mit den Werkstücken ist ne klasse erklärung. :-) also braucht ein durchlauf der warteschleife ca."3" Zyklen und da der einmal 140x und dann, das ganze 10x durchlaufen wird, kommen 1400 zustande? DANKE
Theo K. schrieb: > erstmal danke für die schnellen antworten :-) > > auf die genauigkeit kommt es hier wirklich nicht an, zweck der Übung ist > nur einen summer mit 440Hz zu betreiben :-) > > das mit den Werkstücken ist ne klasse erklärung. :-) > > also braucht ein durchlauf der warteschleife ca."3" Zyklen und da der > einmal 140x und dann, das ganze 10x durchlaufen wird, kommen 1400 > zustande? der dec braucht 1 der brne braucht 2 wenn er springt (und das tut er die meiste Zeit, die 10 mal, in denen der erste brne nicht nach loop2 springt wären also 10 Zyklen weniger. Dafür kommen dann wieder 10 Stück dec r16 dazu, die wieder 10 Zyklen dazu einbringen plus 10 brne nach loop1, die nicht in die Berechnung eingehen. Davon wird 9 mal gesprungen, macht 18 Zyklen und 1 mal nicht, macht in Summe 19 Zyklen. D.h. die 4200 Zyklen sind in dieser Hinsicht eigentlich um 19 Zyklen zu wenig. Kommt nach der Anteil für die LDI dazu, sowie die Push und die Pop. Und wenn man ganz genau ist, müsste man den Call und den ret auch noch einrechnen.
Karl Heinz Buchegger schrieb: > Theo K. schrieb: >> erstmal danke für die schnellen antworten :-) >> >> auf die genauigkeit kommt es hier wirklich nicht an, zweck der Übung ist >> nur einen summer mit 440Hz zu betreiben :-) >> >> das mit den Werkstücken ist ne klasse erklärung. :-) Noch besser wäre: Das Verpacken eines Apfels in eine Apfelkiste dauert 3 Sekunden. Eine Kiste fasst 140 Äpfel. Das Wegstellen der Kiste kostet 5 Sekunden. Wenn 10 Kisten randvoll gepackt werden müssen, wie lange dauert das?
>Hi >Davon wird 9 mal gesprungen, macht 18 Zyklen >und 1 mal nicht, macht in Summe 19 Zyklen. D.h. die 4200 Zyklen sind in >dieser Hinsicht eigentlich um 19 Zyklen zu wenig.
1 | Ldi r16,10 ; 1Takt |
2 | aaa: ... |
3 | ... |
4 | dec r16 ; 10 Takte |
5 | brne aaa ; 9x2Takte + 1x1Takt |
macht für die äußere Schleife genau 30 Takte. MfG Spess
4250 sekunden, das ist ne gute erklärung, die werde ich mir erstaml auf der seite im Buch notieren :-) jetzt kann ich mir auch vorstellen warum "faktor 3" im kommentar drinsteht. werde mich jetzt mal an die anderen übungsaufgaben machen, hoffentlich mus ich da nicht wieder so dumme fragen stellen. echt coole Community :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.