Gast
#817124
Hallo, ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen und den Mittelwert des Ganzen bilden. Gibt es da im Assembler Lösungsansätzte? Mittelwert = Wert von (1+10) / Anzahl
|
Anzeige
|
Mittelwertbildung aus 10 Werten im Ram Mega16
Gast
#817124
Hallo, ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen und den Mittelwert des Ganzen bilden. Gibt es da im Assembler Lösungsansätzte? Mittelwert = Wert von (1+10) / Anzahl Müssen es wirklich 10 Werte sein? Mit 8 oder 16 wäre es trivial... Können es auch 8 oder 16 Werte sein? Das wäre wohl einfacher. Was meinst du mit Lösungsansätze? Jeden Wert holen und zu einem Register hinzuaddieren. Am Ende dann durch 10 teilen. Das Teile wird nicht einfach, aber dazu googlen. Wenn du wie oben gesagt jedoch auf 8 oder 16 Werte kämst, würde sich ein 3 oder 4facher Shift Right anbieten. René wrote: > Hallo, > > ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen > und den Mittelwert des Ganzen bilden. > Gibt es da im Assembler Lösungsansätzte? Das würde ich straight forward machen. Je nachdem, wie gross die Zahlen sind, entsprechend viele Register für die Summe bereitstellen und darin die einzelnen Werte aufsummieren. Bei Byte-Werten, reicht es aus, wenn in 16 Bit summiert wird, also 2 Register. Ansonsten wirst du wohl mit 24 Bit Arithmetik arbeiten müssen. Ist aber zumindest im Bereich des Aufsummierens kein Problem. Aus dem Fundus an Routinen eine Divisionsroutine hervorgekramt (16/8 oder 32/8, 24/8 haben wohl die wenigsten vorrätig) und durch 10 dividieren. PS: Ich würde mir auch überlegen, ob es unbedingt 10 Werte sein müssen, oder ob nicht 8 oder 16 auch gehen würden. Denn dann wäre die Division einfacher :-)
Gast
#817147
Hallo, können aus 8 oder 16 sein 16 ist sogar noch besser. René wrote:
> können aus 8 oder 16 sein 16 ist sogar noch besser.
Also, wo genau liegt das Problem?
Gast
#817151
also alles aufaddieren maximal also 8 * 256 = 2048 da Reicht also eine 16 Bit addition und dann 3 mal lsr ror hintereinander. meint Ihr das so? Mfg René René wrote: > also alles aufaddieren > > maximal also 8 * 256 = 2048 da Reicht also eine 16 Bit addition und dann > 3 mal lsr ror hintereinander. Zum Beispiel. Bei 16 Werten dann einmal mehr schieben... Google --> IIR Filter René wrote: > Hallo, > > ich möchte gern aus 10 Werten die Im Ram des Controllers stehen auslesen > und den Mittelwert des Ganzen bilden. > Gibt es da im Assembler Lösungsansätzte? > > Mittelwert = Wert von (1+10) / Anzahl Du kannst durch bekannte Konstanten (=10) auch mit festen shifts+add dividieren. Siehe hier: http://www.cs.uiowa.edu/~jones/bcd/divide.html Seine Beispiele sind in C, lassen sich aber spielend in Assembler übertragen.
Gast
#817284
Mit noch weniger Aufwand, speziell wenn's schnell gehen muss : http://www.ibrtses.com/embedded/exponential.html Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|