Datum: 08.04.2008 11:12
Hi Leute,
ich bin's wieder mit meinem Vektorprozessor :-)
Ich habe ein Problem mit der Multiplikation. Ich bin jetzt dahinter
gekommen, was der Multiplizierer macht. Das ist ein 16-bit
Multiplizierer. Wenn ich 16x16-bit multipliziere, liefert er mir nur die
LBSs. Ich will aber die MSBs. Wenn ich das um 16-bit nach rechts
schiebe, bekomme ich Müll.
Hier der Code:
for (i=0;i<vecEl-1;i++{
resVec[i] = (aVec[i]*bVec[i]);
resVec[i] = resVec[i]>>16; //shift by 16, to keep the MSB-part
}
Ich habe das mit diesen Werten in Hex probiert:
Vec1= 0x837;Vec2=0x5b7f;
Das Ergebnis vom Multiplizierer ist: a049
Der erwartete Wert ist: 2efa049. Wie zu sehen ist, nur die unteren Bits
wurden geliefert.
Wenn ich das um 16 Stellen nach rechts schiebe, ist das Ergebnis:
ffffffff
Was ist daran falsch?
Ich danke euch für eure Hilfe!
Datum: 08.04.2008 13:08
resVec ist 16Bit breit? Ergebnis 32 Bit breit zwischenspeichern.
int32_t verdammt_breit ;
verdammt_breit = (aVec[i]*bVec[i]);
resVec[i] =verdammt_breit >>16; //shift by 16, to keep the
MSB-part
Cheers
Detlef
Datum: 08.04.2008 13:20
Hi, das kann aber nicht sein. vecRes ist kein skalarer Wert. vecRes ist 32 breit aber unterteilt in einen Vektor, in 16bit. Die obere Hälfte enthält das Ergebnis von vecA(1)*vecB(1) und die untere Hälfte vecA(2)*vecB(2). Ich verstehe das garnicht mehr. Ich bin fast dabei diesen Prozessor aufzugeben :-(
Datum: 08.04.2008 15:09
Gast wrote: > Hi, > > vecRes ist kein skalarer Wert. vecRes ist 32 > breit aber unterteilt in einen Vektor, in 16bit. Häh? Wie issn der definiert, mail mal den kompletten Code. Neulich hieß vecRes auch noch resVec !? > Ich verstehe das garnicht mehr. Ich bin fast dabei diesen Prozessor > aufzugeben :-( Der Prozessor ist völlig unschuldig, der tut, was Du ihm sagst. Cheers Detlef
Datum: 08.04.2008 15:21
Hi Detlev, der Prozessor ist in einer anderen Sprache geschrieben. Da wird andere Syntax verwendet. Ich habe den Fehler jetzt. Ich musste nur das Ergebnis in 32-bit casten (wie du das empfohlen hattest) und dann shiften. Jetzt ist alles korrekt. Ich danke dir herzlichst!
Datum: 14.04.2008 19:55
Sonst gaebe es fuer das naechste Mal noch'n Simulator....
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel