Repzak <repzak@GEDhotmail.com> wrote:
> Først, dette er uC relatreret og jeg regner med at bruge keil...
>
> Jeg legede lige med at gange 2 floats sammen, og det ser ud til at
> tage alt for lang tid...
>
> Er der nogle der ved om det er muligt kun at bruge 16bit float i
> keil, og evt hvordan ?
Keil C51 - jeg gætter på at du kører 8051 - understøtter kun 32-bit float.
> Kan man komme til at regne med 16 bit fixed point, for det vil vel gå
> stærkere..
Ja, det vil det normalt. Keil understøtter det ikke direkte, så du må selv
styre kommaet og bruge integers. Husk at når du ganger to 16-bit int's i
C51, bliver resultatet de nederste 16 bit. Det er normalt ikke dem du
ønsker ved fixed point, så du må caste operanderne til long (32 bit) før du
ganger. Dermed laver compileren en 32-bit multiplikation, hvilket også er
temmeligt langsomt på 8051. Ellers må du selv lave multiplikationsrutiner i
assembler som kun regner den del af resultatet ud, som du skal bruge.
> jeg skal gerne så langt ned i tid jeg kan nå at lave 2 gange og nogle
> adder på 20uS hvilket svarer til mindre end 330 cycles og en normal
> muliply tager vidst omkring 9 cycles...
Det kan du ikke med en standard 12 MHz 8051. En 8x8->16 unsigned mul tager
4 cycles à 12 clocks = 48 clocks, og dem skal du bruge mindst 3 af for at
lave en 16x16->16 mul. Derudover kommer en mængde mov og add, som nok tager
længere tid.
> er der nogle måder jeg kan gange decimal tal sammen på hurtigere..
> evt et lib eller helst integreret i keil
Find en hurtigere processor. Mange laver 8051-kompatible processorer med
hurtigere clock og færre clocks pr. cycle (Philips, Analog Devices, Silicon
Labs).
Eller vælg en ARM7 baseret processor, som f.eks. Philips LPC2xxx eller Atmel
AT91SAM7Sxx. Sådan en kan sagtens lave 32-bit floating point i software med
din krævede hastighed. Brug Keils nye ARM-compiler, eller GNU gcc
(
http://www.gnuarm.com ). Jeg bruger selv Philips LPC2114 sammen med gcc
og vil nødig gå tilbage til 8051.
Karl Olsen
http://karl.rudbaek-olsen.dk