Hallo zusammen, ich habe jetzt schon fleißig im Forum und bei Google gesucht, aber leider nicht herausbekommen, ob oder wie man den Hardware-Multiplizierer des AVR im GCC nutzen kann?! Wäre super, wenn ihr mir helfen könntet! Gruß, Mathias
Indem man im Quellcode zwei Operanden mit * verknüpft und beim Kompilieren den richtigen Prozessortyp angibt. Der Compiler macht das automatisch richtig, im Zweifelsfall den erzeugte Assemblercode zu Rate ziehen.
Noch mal Zorry, habe wohl etwas zu schnell auf Multiplexer getriggert. Tja, wer richtig lesen kann ist klar im Vorteil. Bernd M.
Ok, danke, also doch so einfach ;-) Eigentlich hätte ich auch selbst auf die Idee mit dem Disassembler kommen können?! Ich habe eigentlich nur gefragt, weil der IAR-Compiler (Demo) für den MSP430 dessen Hardwaremultiplizierer nicht korrekt verwendet. Da scheint auf den GCC also schon mehr Verlass zu sein... Gruß, Mathias
@ Mathias (Gast): Beim MSP430 ist der Multiplizierer AFAIK ein Peripheriegerät, beim AVR gehört der aber zur ALU :)
Joerg X. wrote: > @ Mathias (Gast): > Beim MSP430 ist der Multiplizierer AFAIK ein Peripheriegerät, beim AVR > gehört der aber zur ALU :) Das spielt keine Rolle. Wenn der Compiler an den betreffenden Prozessortyp angepaßt ist, erzeugt er für a * b automatisch den Maschinencode, der eine Multiplikation bewirkt. Wenn der Prozessor keinen Multiplizierer hat, wird stattdessen eine Bibliotheksroutine aufgerufen, die den Hardwaremultiplizierer nachbildet.
@ Uhu Uhuhu (uhu) Ich meinte damit, dass die "mul"-befehle beim AVR einfacher im Compiler zu implementieren sind, als die entsprechenden load/store Befehle beim MSP430.
> Ich meinte damit, dass die "mul"-befehle beim AVR einfacher im > Compiler zu implementieren sind, als die entsprechenden load/store > Befehle beim MSP430. So viel einfacher ist das nicht immer. Auch bei eingebautem mul-Befehl kann eine C-Multiplikation aus mehreren Befehlen zusammengesetzt sein, je nach Größe der Operanden. Während eine char-Multiplikation noch mit einem einzelnen mul-Befehl auskommt, sind es bei einer int-Multiplikation schon 3 mul- und 2 add-Befehle und bei einer long-Multiplikation sogar 10 mul-, 8 add- und 6 adc-Befehle. Für letztere wird auf Grund des umfangreicheren Programmcodes eine Bibliotheksroutine aufgerufen. Aber wie Uhu Uhuhu schon erwähnte: Diese Befehlssequenzen denkt sich der Compiler nicht aus, sondern sind vom Compiler-Entwickler (ggf. parametrierbar) vorgegeben.
Wen Du mit AVR-Studio arbeitest, solltest Du auf jeden falls die "libm" hinzufügen, die ist per default nicht beigefüg. Das ist eine für den AVR optimierte Math-Lib anbstelle der generischen GNU Lib. [Project] => [Configuration Options] => [Libraries] => [libm.a] => [add Object]
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.