C içinde "asm" kullanmak

Başlatan YARGICH, 26 Nisan 2006, 01:50:50

YARGICH

Selam,

    IAR da C içerisinde asm ile komut yazarken C de kullandığımız değişkenleri nasıl kullanabiliriz. Değişkenlerin adreslerini öğrenerek yapmamız şart mı? Bunu IAR başlığı altında soracaktım ama, asm ile yazılacak kısım renesas'a uygun olması gerektiği için burda soruyorum.

for (i=0;i<104;i++)
 {
  for (j=0;j<8;j++)
    {
     Deger=GPL_Data[i]<<j;
     Deger=Deger & 0x80;
     if (Deger==128)  { T_Data=1; }
     else             { T_Data=0; }
     T_Clock=1;
     asm(" nop ");
     T_Clock=0;
    }
 }


   Örneğin burdaki program parçasını asm'ye çevirmek istiyorum. C de biraz yavaş kaldı, belki asm de hızlanabilir. Yine hızlanmazsa mecbur MCU yu yükseltecez. Yavaştan kastım burdaki döngüyü 300ms de 832 kez işleyebilmesi gerekiyor.

- Bu döngü kendi içinde toplam 104 x 8 = 832 kez dönüyor.
- 300ms de döngünün tamamı 832 x 832 = 692.224 kez dönmesi gerekiyor.
- 300.000us / 692.224 =450ns de döngü bir kere işleyebilmesi gerekiyor.
- Bendeki işlemci M30620, 62,5ns minumum komut işleme süresi var.

Yani yaklaşık olarak, toplam 7 komut da bir döngüyü işlemesi gerekiyor. 7 komut olmazda 10 komut olabilir, sorun değil. ama bu değerlerin fazla üstüne çıkmamam gerekiyor. Renesas zaten her komutu 62,5ns de işleyemeyeceğinden biraz artış olması kabul edilebilir düzeyde. Veya bu döngü kaç asm komut da yazılabilir?

   Benim yapmak istediğim, mesela burdaki "GPL_Data"  değişkenini asm de kullanabilmek. örneğin
   
asm( "ROLC.B    GPL_Data[i]" );
Burda GPL_Data yi kabul etmiyor.

    Renesas'ın asm si biraz karışık geldi. Daha önce kullanmış olan ustalardan yardım istiyorum. Olmazsa işlemciyi yükseltmek zorunda kalacağım. Bu da hiç istemediğim bir durum.



Teşekkürler, İyi Çalışmalar.
Uçurtmalar, rüzgarın kuvvetiyle değil, rüzgara karşı koydukları direnç ile yükselirler.

mp3dragon

IAR da daha çok yeniyim, Renesas'ı hiç bilmem ama IAR Renesas .asm veya .src gibi kaynak dosya oluşturuyor ise içinde döngünün bulunduğu kısmın derleyici tarafından nasıl asm'ye çevrildiğini incele derim.

Keil da asm eklerken sorunumu bu şekilde çözmüştüm.

veya direk olarak asm kaynak yazıp C içerisinden çağırabilirsin. (Link ile .obj birleştirmesi)
İyilik Yap, Denize At, Balık Bilmezse, Halik Bilir.

YARGICH

IAR dan assembly çıktısı aldım ama işin içine diziler girince kafayı yedim. Asm ile olmayacak, bit bit kullanmadan başka bir yöntem denedim, hız arttı ama çok da iç açıcı olmadı. Yeni bir işlemci bekliyorum, M30833. Bunu deneyecez bakalım, ne kadar bir artış olacak.


Teşekkürler
Uçurtmalar, rüzgarın kuvvetiyle değil, rüzgara karşı koydukları direnç ile yükselirler.