Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Floating Point Unit

Başlatan yldzelektronik, 22 Haziran 2014, 21:25:53

yldzelektronik

Herkese selamlar.

Stm32f407 de yer fpu (floating point unit) nedir diye sormak istiyorum. Genel olarak kusuratli sayilarla calisabilmeye yardimci olur. Ancak ben daha pratik bilgiler ariyorum.

Tanimin otesinde nerelerde kullanabiliriz? Daha ziyade sinyal islemede fayda saglayacagini okudum. Fakat nasil yapiyor bunu?

Bi sayiyi fpu ile isle diye mi soyluyoruz cipi yada nasildir?

Telefondan yazdigimdan stnin orneklerine bakamiyorum.

Tesekkurler
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Mucit23

Hocam temel olarak nasıl çalıştığını bende bilmiyorum ama fractal çizme uygulamalarında farkını ortaya koyuyor.  Youtube'da video örnekleri vardı.

z

CM3 islemcimizin nasil ADD, SUB gibi integer sayilarla calisan komutlari varsa CM4 serisindeki FPU donaniminin da Float sayilarla calisan VADD, VSUB gibi komutlari var.

Program icinde FPU unitesini ilgilendiren tip komutlar gorulurse bunlar FPU tarafindan isleniyor.

Evet FPU, kayar noktali sayilar uzerinde donanimsal olarak islem yapiyor.  Ayni islemleri CM3 komut seti ile yapmaya kalksaydik ornegin VADD gibi bir komut icin bile upuzun fonksiyon yazmamiz gerekirdi. Dolayisi ile FPU unitesi hiz gerektiren uygulamalar icin gerekli. Eger hiz gerekmiyorsa zaten CM3 islemciyle de ayni isleri yapabiliyoruz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

engerex

Double precision MCU var mı?

Yuunus

#4
"Z" hocam tam anlayamadim: ornegin float bir degisken ile islem yapmaya basladigimda yani kodun derleme asamasinda otomatik olarak mi karar veriliyor? yada kod calisirken, ornegin kusuratli bir bolme islemine rastlandiginda devreye girip cikan bir mekanizma midir?

berat23

Float sayılarla işlem yaparken eğer işlemcide fpu varsa işlemlerin fpu da mı ya da yazılımla mı yapılacağını compile ayarlarından seçebiliyorsunuz. Fpu olsa dahi yazılımsal olarak işlem yapmak mümkün tabi mantıklı olmadığı aşikar.

Fp instruction lar sadece çarpma toplama değil kök alma, yazma, casting gibi işlemler de var. C28deki fpu 3, m4 teki fpu 14 cycle da single precision kök alabiliyor. Kökü bırakın sadece int-float dönüşümü bile 8 bitlik işlemcilerde inanılmaz uzun sürüyor, asm çıktılarından bunu kıyaslayabilirsiniz. O yüzden fpu olmayan işlemcilerde integer kullanmak bir gereklilik

LukeSkywalker

Derleyici asm kodlarini olustururken fpu komutlari uretiyorsa ( tabiki ondalikli islemler yapilirken uretmesi lazim) mcu da bu komutlar dogrudan fpu unitesi tarafindan islenir. Asm ile program yaziyorsaniz zaten kendiniz bu komutlari kullanacaksiniz. Eger C derleyici  kullaniyorsaniz, derleyici bu komutlari uretmeli.

z

Derleyici float sayilarlami yoksa integer sayilarlami islem yaptigini zaten yazdigin C satirlarindan anliyor.
(Bunun icin gerekli ip uclari degisken tiplerinde ve yapilan islemlerden belli. En kotu ihtimal type casting den belli)

Bu durumda derleyici ornegin;

iki integer sayi ile toplama yapacaksa ADD R1,R2,R3 komutunu kullanan kod uretiyor.
Yok float soayilarla toplama yapacsaksa bu kez VADD.F32 s2, s0, s1 seklinde komut kullanan kod uretiyor.

MCU,  ADD R1,R2,R3 komutunu gorunce kendisi isliyor.
VADD.F32 s2, s0, s1 komutunu gorunce bu kez kendisi isleme dahil olmuyor ve FPU unitesi bu komutu isliyor.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

peki yaptığımız fp işlemlerin FPU tarafından yapılmasını sağlamak için ne yapmalıyız?
(Use FPU Hard gibi bir seçim var o yetiyormu sadece)

berat23


muhittin_kaplan


berat23

Stm32f407 de mi denediniz

muhittin_kaplan

evet
t=0.1+0.2 gibi

(GCC + CoIde)

ama t=0.1f+0.2f le deneyeceğim

ilhan_mkp

#13
hocam gerbay hocamın fpu aktif etme ile ilgili mesajını buldum artık rahat uyuyabilirim  ;D
fpu aktif olmadığı için kullanmamış olmalı.


startup_stm32f4xx.s  dosyanızın içinde FPU yu initialize etmeniz ya da keil ın proje ayarlarından FPU yu disable etmeniz gerekiyor

en iyisi 2 satır kod yazıp FPU yu initialize etmek;

startup_stm32f4xx.s dosyanızda muhtemelen kırmızı kısımlar yok, ilave edin düzelir..

; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]


        IMPORT  SystemInit
        IMPORT  __main

                 ;FPU settings
                 LDR     R0, =0xE000ED88           ; Enable CP10,CP11
                 LDR     R1,[R0]
                 ORR     R1,R1,#(0xF << 20)
                 STR     R1,[R0]



                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

yldzelektronik

Birisi yalnizca kusuratli sayilar degil kok alma islemi yaptigindan da bahsetmis. Stnin AN4044 nolu app motunu okumaya calistim. Ancak ondan bahsettigini far etmedim. Yalnizca fp sayilarin formatlanmasindan soz ediyordu. Kok alma bilgisi hakikat mi? Baksa ne tur yetileri var?

Bir de fpu sanki keilde mcu ayarlarinin yapildigi yereden/ project optionstan acilip kapatiliyordu. Dogru mu hatirliyorum?

Son olarak bir ricam;

Yukaridaki app notda bir ornek uygulama var. Orada yapilan tam olarak nedir?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.