Cortex M3 Assembly sorulariniz

Başlatan bunalmis, 06 Ocak 2011, 12:42:26

iyildirim

Amacım sidik yarıştırmak değil ama,
Sıradan PIC değil tabii de, 32bit işlemlerde  PIC 32, DSP tarzı işlemlerde ve hatta genelde, aynı saat frekansında, CM3 'ü döver gibi geliyor bana.

PIC32 gerçekte DSP değil. Ancak 16bit işlemlerde bile (ki bazı 32 bit işlemleri 16 bit olanlardan daha hızlı yapıyor. ) saat frekansı farkının çok ötesinde performanslı. Pipeline denen şeyin sonucu sanırım.
Performanslı derken de hazır DSP  lib'lerin sonucuna göre konuşuyorum..

Bunalmis'in hız, hız dediği konuda iyi kodlanmış ASM gerçekten öne geçiyor. Ancak ASM'de iyi kodlama, ASM bilgisinin yanısıra işlemciyi de çok iyi tanımayı vs. gerektirdiği için benim tercihim C ile hazır lib'leri kullanmak yönünde. Ve olabildiğince donanıma yüklenmek.


Bir iki sene önce mikroişlemcilere bulaşmadan önce çeşitli markaların 16bit dsp ve 32bit işlemcilerinin datasheetlerini zaman ayırıp bayağı bir okumuştum. Sonunda da gönlümde yatandan ziyade bulabildiğim işlemcilerle çalışmaya başladım. Aradığını bulabilmek de tecrübe gerektiriyor.

dsPIC lerdeki tek clockda işlem yapıp sonucunu RAM yazma olayı, ATMEL'lerin RAM de işlem yapabilme özelliğini düşününce sıradan bir şeymiş gibi görünüyor.
İşlemcinin kaç MIPS olduğundan daha önemli olan instruction'ların neyi desteklediği ne kadar efektif olduğu. Örnekte olduğu gibi basit bir toplama işleminin registerde yada RAM de yapılabilmesi işlemcinin kaç MIPS olduğundan daha önemli görünüyor.
Genelde ATMEL'lerin daha hızlı kabul edilmesinin ve öyle olmasının nedeni de bu sanırım.

32Bitlik ATMEL'lerin sadece 32UC3C serileri FPU destekliyor. Birde bulunabilirliği dertli.
Ancak genelde gördüğüm, marka bağımsız konuşuyorum desteklendiği söylenenlerin ne kadar desteği var, şartı şurtu varmı işin içine iyice girince ortaya çıkıyor. Oda ciddi zaman işi.

AP7000 duyurulduğunda sınıfında ATMEL'in en üst seviye işlemcisi idi. Duyurulduktan sonra yaklaşık 1-2 sene sonra obsolete oldu. 

Üzerinde Flash olup extra ROM-RAM derdi olmayan, FPU desteği olan, BGA yada bilmem kaç yüz bacak olmayan, ulaşılabilir makul işlemciyi henüz bende bulamadım. 

rree

Herkes söylüyor Cortex M3 hızlı yönleri olduğunu.Öğrenmeye çalışıyoruz. Bilen birisi varsa bu basit bir işlemde
Cortex hangi komutlar ile pic den daha az saykıl harcayaıp hızlı yapabilir. Adım adım öğrenmeye çalışıyoruz.
   a= x+y , c=a+z

   R0  <------ X
   R1  <------ Y
   R2  <------Z
   R3 = R0+R1
   R4 =R3+R2
   R4  ------>C
                           6 saykıl
MovF,0   X
AddWF   Y
Addwf   Z
MovWf  c
                      4 Saykıl
      Her şeyi peşinen kabul eden bir yapıya sahib değilim. Elle tutulur izlenebilir örnekler lazım.
150 Mips işleme sahip kabul bu avantaj. 32 bit olmasıda avantaj.  Başka avantajlarıda vardır.
Arkadaşın söylediği doğru ise ram bellekten doğrudan hesap yapamıyorsa bu bir zayıflık.


z

#17
Bunun yanıtı ARM ın daha eski olması olabilirmi?

Bir CPU tasarımı tahminimce çok uzun bir süreçtir. Hazır popüler bir core haklı yada haksız çok satıyorsa firmaların parayı basıp core almaları piyasada bizde varız imajı açısından  mantıklı olabilir. Kaldıki firmalar bir yandan da kendi çiplerini (ARM olmayan) üretip satıyorlar.

ARM Cortex konulu TI seminerlerinin birisinde 32 bit dsp ile ARM CM3 arasında kaldım hangisini seçmeliyim dediğimde, ses tonunu iyice düşürüp fısıltıyla gerçekten hız istiyorsanız dsp, yok amacınız USB, GLCD, Flash, vslerle büyük yazılımlar yapmaksa ARM demişlerdi.

İlk olarak 32 bit dsp aldım. Aradığım esnekliği bulamadığımdan altı ay sonra bir de aynı firmanın CM3 kitini aldım. Onda da 32 bit komutlarda hüsrana uğradım.

Çünkü 32 bit işlemciden beklentim, eğer 16 bit işlemci  tek satırda ACC=ACC+0x1234 işlemini yapıyorsa, 32 bit işlemci de ACC=ACC+0x12345678 işlemini yapmalıydı.
Her iki 32 bitlik işlemcinin de bunu yapamadığını görünce program yazımında kolaylık olur ve USB donanımı var diye ARM ile devam ettim.

Şimdi acaba hatamı yaptım diye de düşünüyorum. Bu sorunun cevabını şu anda kendi kendime verecek durumda değilim.  Fakat içimdeki ses Piccola, CM3'u dover dıyor.
(TI yetkililerinin fısıltısına kulak asmalıydım ama USB beni kandırdı)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

iyildirim

gerbay,
Lisanslama, pazarlama stratejisi vs. olsa gerek.

Dediğim gibi o yada bu iyidir diye bir şey yok. Hangi açıdan baktığınıza ve ihtiyaçlarınıza göre iyinin ne olduğu değişir.  Kesin iyi diye bir şey yok.

Microchip hayranı falan değilim.
Büyük, uzun süreli proje için kullandığım işlemci ailesinin genişliği-çeşitliliği ne dikkat eder ve tercihim benim de ARM olurdu.

Yukarıda yazdığıma ek olarak, aynı clock ile ATMEL 32Bit serileri de özellikle C serisi CM3 ten daha yüksek performans sağlar.
   
Yukarıda yazılanlar ARM geneli için değil CM3 için.  Yoksa CA8, RF8 vs. leri gözönüne alacaksak sinek sikletle ağır siklet karşılaşmasına benzer. 

iyildirim

Bunalmis hocam,
Aradığınız mutluluğu C-RF8 ler de bulabilirsiniz diye düşünüyorum. dahili Flash- ram, FPU desteği, uygun kılıf.. 

z

#20
Gerbay yaptığın çalışmada

ilk satırı

LDR      r0,[r1,#8]  ; x

olarak vermişsin. İşlemci ben X ı okuyorum diye işe başlamış.
Halbuki burada R1 in değer aldığı satırı da saymak lazım.

Gerçi 1 satır az 1 satır fazla onca asm koddan sonra önemli değil.

ARM çekirdeğini tasarlayan adamlar bu yapıyı, haklı bir gerekçe ile seçmişlerdir. Kim bilir kaç toplantı yapılmıştır.

Bahsettiğiniz çipler eminimki fiyatları açısından da çok ileridedir.  Projemi mevcut çiplerimden birisi ile yapamazsam projemin gözümdeki değeri kaybolur.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Veli B.

Belki elinde olmayan arkadaşlar vardır.

The Definitive Guide to the ARM Cortex-M3@Joseph YIU@380Page
http://www.fileserve.com/file/keyuBWa

z

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

z

#23
Cortex M3 memory üzerinde doğrudan işlem yapamıyor bu büyük bir eksi fakat, artıları fazla.

Örneğin flagların değerlerinin çok önemli bir algoritmada arada bir yerde basit bir toplama vs yapacaksınız, fakat bu işlemin flaglarınızı bozacağını da biliyorsunuz halbuki bu toplamanın flaglarınızı bozmamasını istiyorsunuz.

Sıradan işlemcilerde flaglar topluluğunu barındıran registeri okuyup saklayacak, ardından toplama vs yapacak sonra da sakladığınız değeri flaglara geri yükleteceksiniz.

Arm burda  çok güzel özellikler sunuyor.

Toplama yap ama flaglara dokunma diyebiliyorsunuz. AND işlemi yap ama flaglardan uzak dur.

----------------------

Diyelimki C varsa toplama yapma gibi şartlı bir komut işleteceksiniz.

Sıradan işlemcilerde  branch if cary tarzında bir zıplama kodu ile C set ise toplama kodunun üstünden atlamalısınız.

Arm burada da güzel bir davranış sergiliyor.

Eger Cary clear ise topla diye bir komutumuz var.

Eğer sonuç sıfırsa  (Zero flag set ise) ramdan değer yükle gibi durumlarda da CM3 komutları çok yetenekli.

R0 = [R1 + R2 *16]    R1 adresine R2 nin 16 katını ekle ve sonuç değerdeki adresden veriyi tek çırpıda oku.

R0 = [R1]   R1 adresinde saklanan veriyi R0 içine oku ve ardından R1 i X kadar artır. Gene tek çırpıda işlenen komut.

Buna benzer daha nice komutlar var. Bu komutlar, memory üzerinde doğrudan işlem yapamama ayıbını örtecektir.


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

CoşkuN

ARM komut setinin "şartlı işletim" komutları gerçekten güçlü. Şurada http://en.wikipedia.org/wiki/ARM_architecture#Conditional_execution örnek var:
a += (j << 2);

ADD     Ra, Ra, Rj, LSL #2




z

#25
Alıntı yapılan: bunalmis - 28 Nisan 2011, 23:25:50
Hocam ARM cortex M3 işlemciyi sırf DSP deki page adreslemeden kurtulurum, ayrıca USB donanımı kullanmama gerek kalmaz, ram ve rom yayla gibi geniş diye seçtim.
Gerçekten de öyle oldu. Fakat hız konusunda daha şimdiden korkmaya başladım.

Bitmiş vaziyetteki 40 Mips (40Mhz) 16 Bit TI DSP de asm ile kodladığım projeyi  biraz daha geliştirip 50MHZ  Arm cortex M3'e C+Asm olarak aktarmaya çalışıyorum. Sözkonusu çip aslında 80Mhz ama bir Bug'ı yüzünden şimdilik 80Mhz de çalıştırmıyorum.

Kodlamayı aynı kişi yapacağı için normal şartlarda bu savaş, 32 Bit 80Mhz çipin 16 bit 40Mhz çiple savaşı olacak.

CM3 bu işi başarırsa zaten bir daha DSP'ye dönmeyeceğim.

Sanki yukarıdaki yazımla alay edercesine  aşağıdaki ürünü çıkartıyorlar.

http://focus.ti.com/mcu/docs/mcuproductcontentnp.tsp?sectionId=95&familyId=2049&tabId=2743&DCMP=concerto&HQS=Other+OT+concerto

Adamın aklını çelmek için herşeyi yaparlar. Zaten adamların yaratıcılıkları, çipe verdikleri isimden belli oluyor.

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

CoşkuN

Peki TI'ın geliştirme ortamı ne durumda? Ücretsiz olarak sağlıyor mu hepsini? Bu mikrodenetleyicilere ait geliştirme kitlerinin fiyatları çok uygun görünüyor, eğer ortamı da sağlıyorsa çok iyi.
http://focus.ti.com/docs/toolsw/folders/print/tmdxdockh52c1.html

fatihinanc

#27
Alıntı YapKit is complete with Code Composer StudioTM IDE v4 and USB cable.

CCSv4 ün bu seriyi desteklediğini söylüyor TI forumları. Bir de simulator den bahsediyorlar..
Muhtemelen destekleser fakat kod boyutu kısıtlamalı olur diye düşünüyorum hocam.
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

z

#28
Malesef TI ARM kitleri ile gelen IDE ler ya 1 aylik ya da Kod boyu sinirlamalali.

Gerci tum firmalarin kitlerinde ayni durum gecerli degilmi?



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

camby

C kodu içerisine asm kodu nasıl yerleştiriyoruz , sanki örnekler görmüştüm ama şimdi bulamadım.

birkaç cycle 'lık gecikme oluşturmam lazım. Birkaç nop gerekli