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
Hocam temel olarak nasıl çalıştığını bende bilmiyorum ama fractal çizme uygulamalarında farkını ortaya koyuyor. Youtube'da video örnekleri vardı.
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.
Double precision MCU var mı?
"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?
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
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.
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.
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)
Evet yetiyor
denedim de yetmiyor.
Stm32f407 de mi denediniz
evet
t=0.1+0.2 gibi
(GCC + CoIde)
ama t=0.1f+0.2f le deneyeceğim
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
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?
birisi olarak cevap vereyim;
az biraz asm bilginiz varsa buradan detaylı olarak instruction'ları inceleyebilir, işlemcinin yeteneklerine bakabilirsiniz.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BEHJADED.html (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BEHJADED.html)
AN4044 dökümanında 2.3 - 2.4 - 2.5 - 2.6 kısımlarda bu saydığım yetenekler hakkında kısa bir özet geçilmiş.
verilen örnek uygulamada ise fractal hesabı üzerinden benchmark yapılmış, uygulamayı çok anlamak gerekli değil. fractal verilmesinin sebebi hem çok matematiksel işlem gerektirmesi, hem de basitçe uygulanıp sonuç gözlenebilmesi. neticede aradaki performans farkını fps olarak gözle görebilirsiniz.
@muhittin_kaplan
yanlış anımsamıyorsam sadece projhe ayarlarında değişiklik yaparak keil ile kullanmıştım fpu'i. verdiğiniz örnekte eğer t float ise işlemin keilde float inst. ile yapılması gerekir(CoIde hakkında bir tecrübem yok).
ya da stellaris ile karıştırıyorum, bilemedim.
Alıntı yapılan: berat23 - 23 Haziran 2014, 10:52:27
birisi olarak cevap vereyim;
Bu ifadeyi kullanarak saygısızlık ettim sanırım.Kusuruma bakmayın lütfen. Gece yolculukta iken telefondan yazmıştım.Yorgunluktan görememişim.Teşekkürler.
Karekök alma işleminde FPU kullanmanın çok belirgin bir etkisi yok, ancak trigonemetrik işlemler de dahil kat ve kat performans artışı gözlenlemlenmekte. FPU olması ve olmaması durumunda aritmetik işlemlerdeki hesaplama zamanı aşağıdaki kıyaslanmıış...
(http://s26.postimg.cc/uk389cok9/stm32f4_fpu_no_fpu.png)
http://blog.stm32f4.eu/?p=222 (http://blog.stm32f4.eu/?p=222)
Peki bir mcunun dsp olması nedir?
Sayısal işaret işleme yeteneği sağlar fakat daha açık nasıl ifade edilir?Dsp olması ne fayda sağlar?
dsp yeneteği olması için simd işlem yapabilme yeteneğine sahip olması gerekir.
simdsiz de dsp yapılabilinir ama realtime dsp işlerine yetişmez. o zaman ona dsp denmez
Sayısal sinyal işleme için her zaman DSP gerekmez.
Sinyal işlemede kritik soru "hangi frekansdaki sinyaller işlenecek" sorusudur. Bir diğer soru da sistemin girdi sinyaline ne kadar gecikme ile cevap verileceği sorusudur.
"Benim düşüncem" DSP denince çok yüksek hızda işlem yapabilen MCU akla gelmeli.
Ancak tüm dünyada tek cycleda birden fazla işlem yapamayan MCUlara DSP denmemeli fikri empoze ediliyor.
En basitinden tek cycleda birden fazla komut işleyen komut setine dsp komut seti deniyor.
Peki stm32f407 için dsp deniliyor.Bu nedir?
Ekleme:Simd olması ne demek?
Çünkü CM4 işlemcilerde DSP komut seti var.
Bu set sayesinde biraz daha yüksek frekansda sinyalleri işleyebilirsin. Bu set olmasaydı işlenecek sinyal frekansı da düşük olurdu.
Haa bu arada DSP işlemciye kodu tekniğiyle yazmazsan anlamı yok. Gelişgüzel kodlama yaparsan DSP işlemciyi sıradan MCU gibi kullanmış olursun.
Bu işlemciye yazım kuralları sıradan işlmecilere yazımdan biraz farklı. Herşeyden önce ayrık zaman denklemlerini bilmek gerekiyor.
Alıntı yapılan: yldzelektronik - 23 Haziran 2014, 14:45:32
Peki stm32f407 için dsp deniliyor.Bu nedir?
sanırım palavra
digital signal processing yapabilir denilmek isteniyor
yoksa
dsp dsp digital signal processor "dijital sinyal işlemcisi"
Stm32f407 nin datasheetinde dsp 3 tane falan var.Bu çipin dsp liği ile ilgili bilgi yok mu?
Rehber vs dediğimiz dokumanlarda bu bilgiler olmaz.
DSP komut setine bakacaksın. Bunun için bakman gereken dokuman komut seti listesi.
Saturasyon destekli komut setine bir de MULA tipi komutlara bakacaksın.
http://infocenter.arm.com/help/topic/com.arm.doc.dui0553a/DUI0553A_cortex_m4_dgug.pdf (http://infocenter.arm.com/help/topic/com.arm.doc.dui0553a/DUI0553A_cortex_m4_dgug.pdf)
Alıntı yapılan: gerbay - 22 Haziran 2014, 22:14:55
Cortex-R4 ler de opsiyonel olarak var (Cortex-R4F). A serilerinde zaten var.
RealTime ile MCU arasındaki fark nedir? Hangisi nerede ne amaçla kullanılır?
Boyle bir ayrim yapamazsin.
Buradaki anlamiyla Realtime uygulamada islemcimiz giris sinyalini alir isler ve vakit kaybetmeden cikis verir. Yapilan ADC/ DAC vs donusumleri ile matematiksel islemler cikis sinyalimizin giris sinyalini bir miktar geriden takip etmesine neden olur.
Cikis ile giris arasindaki fazfarki idelade sifir olmasi gerekir. Fark olustukca realtime islemlerden uzaklasiriz.
Iste bu yuzden bu tip cok hizli islerde DSP ler on plana cikar.
Hatta bazen oyle olur ki veri alinip isleninceye kadar ikinci veri gelir ve veriler takip edilemez olur. Bu durumda veriler hic islem yapilmadan depolanir daha sonra realtime'in ikinci anlami olan anlamda bu veriler islenir. Bu tip yapi kontrol amacli islerde hic kullanilmaz.
Realtime kabul edilebilme süresi nedir? Var mı böyle bir standart.
Bilgisayarlarımız realtime çalışıyor diyoruz ama biliyoruzki aslında bazen birkaç ns,us,ms sonra yanıt veriyor. 1 saniyeyi realtime kabul edebilir miyim?
Bu realtime konusunda neden bahsedildiginde hem fikir olmak sart.
Digital sinyal isleme / kontrol islerinde cikis ile giris arasinda olusan faz farki sistem kararliligi acisindan onemlidir. Gecikme demek faz farki demektir.
Sonucta cikti sinyalimiz planta uygulanir ve plant cikisi tekrar islemicimizin girisine uygulanir.
Iste buradaki faz farki kritik hale gelebilir. (Bode analizinden hatirlayin.)
Haa bu durum, gene o sevimsiz C-ASM arasindaki ince cizgiyi de belirleyebilir.
---------
Mesela 1Khz giris sinyali uzerinde ugrasirken 10 us gecikme ile cikis veriyorsak
Cikis ile giris arasinda 3.6 derece faz farki vardir ve kabul edilebilr.
Fakat giris sinyalimiz 50Khz olursa bu durumda 10us gecikme tami tamina 180 derece faz farki demektir ki sistem muhtemelen osilasyona gidecektir.
kontrol için faz farkını anlama yolu nyquist kararlılık ölçütü ile bulunan faz payı dır. eğer sistem gecikmesi faz payından küçükse kararlı biçimde kontrol edilebilir, yani o aralıktaki gecikmelerle real time kontrol mümkün. benzer durumlar filtre tasarımında da var.
dsp nin diğer alanları mesela sayısal haberleşmede ise iki paket arası sürede decode-encode artık ne yapıyorsan o işlemin bitmesi demek. görüntü işlerken keza iki frame süresi arasında frame'i işleyip diğer frame'i beklemek gerekir. aslında kısaca bakacak olursak olması gereken zamanda olması demek real time demek. olması gereken zaman tanımı yapılan işe göre değişir.