ARM7 mimarisi, özellikleri ve ARM/Thumb programlama

Başlatan Petek, 13 Ocak 2006, 13:23:06

Petek

Arkadaşlar bu başlık altında sıfırdan başlayarak bu işlemcilere giriş yapalım ne dersiniz?

Elimde Philips LPC işlemcilerine göre hazırlanmış giriş niteliğinde bir pdf e-kitap var. Fakat copy/paste ve print özelliği kapatılmış. Bunun ilk 50 sayfasını ekrandan okudum. Güzel hazırlanmış.  Bu kitaptan faydalanarak şu işlemciler için basit birkaç program yazabilecek düzeye gelelim.

http://www.hemenpaylas.com/download/78401/lpc-ARM-book_srn.pdf.html

copy/paste ve print kısıtlamasını kaldırmak için bu linkteki programı yükleyin.

Philips işlemciler (LPC21XX) üzerine tartışalım istiyorum. Sebebi, Proteus ISIS 6.8 ve 6.9 versiyonlarda bu işlemcilerin simulasyon modelleri var. Yani işlemci almadan, oturup devre kurmakla uğraşmadan ARM korunu öğrenebileceğiz ve en azından Philips işlemcilerini tanıyacağız.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

mcan

bence çok iyi olur,bende uğraşmak itiyorum bi planlama yapalım mı?çünki nereden başlayacağımı bilmiyorum derleici olarak ne kullanalım bana C derleyicisi gerekiyor zaten onuda tam olarak biliyorum

Petek

Hemen derleyici olayına girmeden şu pdf dosyasını bi okuyum anlayalım derim. Bu dosyada mimariyi tanıtıyor ve programlama için nelere dikkat edilmesi gerektiğinden bahsediyor. Nasıl başlangıç dosyası oluşturulur, bunda nelere dikkat edilir (nterrupt vektörleri, stack pointerlar -her bir mod için-, her bir modun status registerleri vs.), 32 bit ve 16 bit karışık nasıl programlama yapılır, Ram den program koşma, hızlı memory erişimi (muhteşem bir mantık bayıldım)... hangi derleyici daha iyidir, standart benchmark testlerine göre derleyici seçimi, ... Acele etmeyelim, yavaş yavaş ilerlemekte fayda var. Üstelik şu an Proteus ISIS te ARM7 için iki demo koymuşlar (birisi satranç, diğeri ucLinux). ISIS ı kıramazlarsa mecburen satranç için seçilmiş LPC2124 üzerinde (aynı satranç devresinde) kendi yazacağımız programı koşabileceğiz.

Keil'in kendi simulatörü var ama kullanabilmek için hani IMKB de broker falan olmak gerekiyor sanki.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

mcan

petek hocam  bende  6.7sp3   yüklü fakat arm7 yada lpc2124 yok,sende ne yüklü bende onu yükleyeyim karışıklık olmasın...

ben şu pdf yi okumaya bir başlayayım ozaman

Petek

Alıntı yapılan: "encryptedcode"petek hocam  bende  6.7sp3   yüklü fakat arm7 yada lpc2124 yok,sende ne yüklü bende onu yükleyeyim karışıklık olmasın...

ben şu pdf yi okumaya bir başlayayım ozaman
Bende de 6.73 var. bir de ayrıca 6.81 kurdum. 6.9 u bulursan onu yükle. Şimdilik diğer programlarında karışıklık olmasın diye bir ayar yapman lazım.

673 te system->set path e gir. lib, models, ... için + butonu ile 673 ünkileri ekle. (yada 681 hangisininki yoksa). 673 ünkiler üstte olsun (seç ve sağdaki yukarı oka bas). Böylece 673ü normal kullanmaya devam edeceksin. 6.9 u ise ARM simulasyonu için kullanacaksın.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

aYe

Merhaba,
Alıntı yapılan: "encryptedcode"bence çok iyi olur,bende uğraşmak itiyorum bi planlama yapalım mı?çünki nereden başlayacağımı bilmiyorum derleici olarak ne kullanalım bana C derleyicisi gerekiyor zaten onuda tam olarak biliyorum
Derleyici olarak IAR düşünürsen https://www.picproje.org/index.php/topic,7739&postdays=0&postorder=asc&start=15 sayfada IAR kirmayla ilgili bir yazim ve gereken dosya var. Gerci orası renesasla ilgiliydi ama ARM derleyicisini de ayni şekilde kirabiliyorsun. İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Petek

OG Hocam,  link çalışıyor. Bir problem görünmüyor.

Compiler benchmark sonuçları (IAR a göre)
Özet olarak:
Average result
The following table shows the average, normalized results:
        EWARM 4.30A  ADS 1.2   GNU ARM 4.0   CAARM 2.40A
ARM        100%        110%       158%          174%
Thumb      100%        117%       162%          150%


Bu sonuçlar genel. Bunlara bakarak değil, özel amaçlarınıza en uygun test sonucunu hangisi vermiş ise onu tercih etmenizde fayda var. Ama optimum faydayı hangisi sağlar diyorsanız o zaman bu sonuçlara ve fiyatlara bakacaksınız. Ticari bir işletme isem ve çok kritik bir uygulama için yazılım geliştirMEyeceksem benim için en uygunu GNU ARM olurdu (çünkü ücretsiz). Ama şu an için hepsi bize  bedava olduğundan  :P bu sonuçlara göre IAR en uygunu (hele çok platform deteği dikkate alındığında tartışmasız)....

Öğrenme aşamasında elimizde olan dökümandaki bilgiler ve örnekler  Philips işlemci ile Keil Arm ve GnuARM (ISIS GnuChess örneği gnuarm ile derlenmiş) a göre hazırlanmış.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

mcan

ben gnu arm ile  de çalışmayı tercih edicem , hatta gerekli şeyleri indirmeye başladım ayrıca elimde hazırlayabilirsem arm7 platformu oluşacak, Iar için forum doldurmakmı gerekiyor illa petek hocam sende varsa vede sorun olmazsa senin için upload edermisin rapidshare ye...

düşüncem muhteşem bi girişim olacak

hocam keil nedir onunda derleyicisi varmış ne düşünüyorsunuz
birde uvision3 diye birşey var,arm7

aYe

IAR'ın derleyicisi 50-60mb kadardır, petek'i upload için bu kadar yormaktansa download için formu doldurup üç beş sallama bilgi yazarak indirmelisin. Zaten ilk yükleme için bir takim serial ve key'ler sana maillenicek o yüzden forma dogru mail'ini yazman lazim. Benim iar konusundaki ısrarım ise adamların bu işteki tecrübesinin çok fazla olması, her asembler derleyici aynı kodu üretir ama bu C derleyiciler için geçerli değil. Aslında C derleyiciler zengin bir macro kütüphanesidir ve senin yazdiğin kod ile macrolari kullanarak önce asembler sonra da hex kod üretirler. Bu durumda her C derleyici üreticisi için kendi macrolarını yazıyor diyebiliriz ve bu macrolarda bir çok hatalar olabilir. IAR'ın bunca yılık geçmişini ve profesyonel kullanıcı sayısını düşününce olası hataların bir çoğunun düzeltildiğini tahmin edersiniz. ör: CCS denen bir C derleyiciyi denemek için pc'me yüklemem ve silmem arasında geçen süre 30dk'dir. Detaylarına girmeyecegim çok komik bir kod hatası vermişti. Oyun oynuycaksanız sorun yok kullanın ama ürettiginiz 10000 civarında cihazı piyasadan toplamanız gerektiginde banker kastelli moduna girmek istemiyosanız bu detaylara ciddi önem vermelisiniz. Iar keil gibi firmaların derleyicisinde kodu yazdınız ve bişeyler ters gidiyor, hata %99.9 sizdedir. CCS yada herhangi son bir kaç yıl içinde türemiş derleyiciler içinse hata herşeyde olabilir. Ve eğer hata derleyicide ise ve tecrübeniz çok fazla değilse o hatayı bulmanız imkansız bile olabilir. ör: Cypress PSoC'lar için imagecraft dışında bir derleyici alternatifi yok, derleyicinin yaptığı cok ciddi bir hatayı bulana kadar 1 aya yakın uğraştım ve bu çok ciddi bir süre. Bu konularda tecrübesi olmayan biri olsaydım; inatla 1 ay kurcalamayacak ve yapamıyorum diyip kaldirip aticaktim belkide. C derleyici seçimi yaparken basitliğine değil güvenilirlik ve ansi uyumluluğunu ön planda tutmanızı tavsiye ederim. İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

mcan

tamam 50-60 civarı olduğunu bilmiyordum,kendim indireceğim,

ben zaten c derleyicisinnden şu an için iyimi kötümü diye anlamam yanlızca araştırma yaparak bir şeyler şöyleyebilirim zaten pdf yi okuyorum şu an...

araştırma yaparken gözüme takılan bir yazı
Thumb
A traditional drawback of RISCs is their relatively poor code density (as compared to CISCs), due to their fixed-length instruction sets. This increases the size of a program's working-set, and leads to poorer cache utilization, more memory traffic, and higher power consumption. Such problems become particularly important in embedded applications. While an efficient solution to the power consumption problem would be multi-pronged (efficient use of parallelism, innovative electronics, etc.), ARM incorporated the "Thumb" architecture into certain processors to improve code density. 

Thumb is a 16-bit compressed version of the normal 32-bit ARM instruction set. It includes a subset of the most commonly used 32-bit ARM instructions. While Thumb instructions have 16-bit wide opcodes, they operate on the same 32-bit register set as ARM code, and have most other benefits of the 32-bit core (32-bit address space, 32-bit barrel shifter, 32-bit ALU, etc.) Thumb-enabled processors) have decompression hardware in the instruction pipeline. The decompressor translates Thumb instructions into equivalent ARM instructions. Thumb code density approaches, and even exceeds, that of many CISC processors. It is much better than ARM in certain contexts, for example (the numbers are approximate): 

Thumb code takes 35% lesser space than ARM code 
Thumb code uses 40% more instructions than ARM code 
Thumb code is 40% slower than ARM code, if using 32-bit memory 
Thumb code is up to 60% faster than ARM code, if using 16-bit memory 
Thumb code results in 30% less external memory power consumption than ARM code

Petek

@tatlisukurnazi,

Hocam elinize sağlık güzel yazmışsınız. 30 günlük deneme sürümü 82 MBmış. İşyerimden indireceğim.

Derleyicilerin arkasındaki firmalar önemli. Onu güzel belirtmişsiniz. Aynı virüs temizleme programlarının performansı gibi, bir yıl biri önde gider sonraki yıl diğeri. Destek hizmeti ne kadar güçlü ise o ürün öne geçer. Keil ve IAR bu bakımdan iyi. Gnu Arm arkasında ticari bir firma yok sanırım. Ama Benchmark testlerindeki performansı da yabana atılır gibi  değil. Muhtemelen arkasında üniversiteler falan vardır diye tahmin ediyorum.

CCS yi geliştiren firmaya Cem Yılmaz'ı ziyeret için göndermek lazım. Belki bir daha kafalarından element uydurmazlar. Tamam kabul etmek lazım ki pek çok konuda kullanıcının hata yapmasını önleyecek tedbirler almışlar, işlemcilerin çok özel özelliklerini ihmal etmemişler (675 in osccal  ataması gibi, 628in cmcon=7 otomatik yapılması gibi, 877 port A başlangıçta dijital IO olarak ayarlanması gibi...). Yani CCS biraz dikkatsiz kullanıcılar için düşünülmüş gibi. Böyle olunca C de yozlaşma başlamış. Sıkıştığında ise derleyicim bunu yapamıyor demiş (struct yapısında 4, 7, 5 bitlik değişken tanımlayamıyorsun-ver3.22-, 2 klık pagei kesen tek parça  programı almıyor ve #separate tanımla diyor-alt program bir defa çağırılmış ise inline koda dönüştürüyor ya, onu separate yap diyor,...)....

Bilsem aslında baştan CC5X veya Hitec ile başlardım Pic C işine. Neyse CCS de pek çok açıdan işimizi gördü ama geliştirmedi bizi....
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

Petek

@encryptedcode

hocam, Arm ve Thumb programlama arasında istediğin yerde dönüşüm yapabiliyorsun. Sanıyorum derleyiciler bunu kendileri en optimum olacak şekilde derliyorlar.

O test sonuçları ya sade Arm yada sade Thumb kodlama için olsa gerek. Neyse bu aşamada bunları düşünmek ne kadar faydalı bilemiyorum.

PDF dökümanda dikkat ettiysen komutların başında 4 bit şartlı işleme kısmı var (Sayfa 19 de). Bu goto yada skip komutlarının kullanılmasını önlemek için ve bu sayede de 3 seviye pipeline (sayfa 10 da) işleminin bozulmması için eklenmiş. Şart sağlanmıyorsa komut NOP olarak işleniyor. 1 bit lik alanda condition code (status) icra edilen işlemden etkilensin mi etkilenmesin mi diye seçebiliyorsun. Sonra bir de barrel shifter var. tek bir instruction cycle da 32 bit kaydırma yapabiliyor. Şimdi 1 instruction cyleda bakın ne yapabiliyor:
if(Z ==1)R1 = R2+(R3x4)
Can be compiled to: 
EQADDS R1,R2,R3,LSL #2

Aynısının CISC mimarili işlemciler ne kadarda yapardı acaba. Tabi madalyonun öbür yüzünde bir interruptı disable etme işi de 3 instruction cycle alıyor  8O

Okumaya devam... gördüğünüz ve paylaşmak istediğiniz ilginç yerleri buraya aktaralım. En azından çeviri yapmış oluyoruz...
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

aYe

@petek

Teşekkür ederim petek hocam. Bir de test sonuçları arm thumb şeklinde ayrılmış. Nedir bu arm thumb ayrimi? İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

aYe

Ben sorumu sormadan cevabı gelmiş :) Bu ne hız :)
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)