Bir makina çevrim süresi

Başlatan sauakif, 22 Haziran 2010, 13:43:05

sauakif


   Merhaba arkadaşlar,asm kodda NOP komutu ile elde edilen bir makina çevrim süresini C kodu ile elde edebilir miyim?

controller

C51 de    _nop_();

ARM da   __asm{nop}
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

sauakif


sadece _nop_(); yazmak yeterli değil sanırım,derlerken hata veriyor.Tanımlanması gereken kütüphane veya başka birşey mi eklenmesi gerekiyor?Teşekkür ederim.

picmanya

siz kod kümenizin önce hiç uyarı ve hata vermeyen yazım halini verin sonra
nop(): ilaveli hata veya uyarı veren halini ilave edip verin bu şekilde
zannediyorum sorunu daha kolay çözeriz
nop(); türü komutlar genelde işlemcinizin header dosyasında tanımlıdır hata alıyor olmanız büyük ihtimal hatalı yazımınızdan kaynaklıdır.
ide niz keil derleyiciniz ve çalıştığınız işlemcinin adı nedir?
burdan bu konularda iyi yardım almanız için çok daha açık olmalısınız takıldığınız nokta çok alt seviye bir yer
ben ne o ide kullanıyorum nede ismini vereceğiniz derleyiciyi ama sorunu çözebileceğime güveniyorum.
size derleyicinizin eğitim-yardım dosyasına bakmanızı tavsiye ederim eminimki daha ilk 50 saydada nop(); yazımı açıkça verilmiştir.

sauakif

Öncelikle ilginiz için teşekkür ederim.89c51rc2 işlemcisini kullanıyorum.Kızılötesi iletişimle ilgili bir proje üzerinde çalışıyorum.Bir makina çevrim süresi çalıştırmam gereken yerler olduğu için bu komutu kullanmayı düşünüyorum.Neden illa ki bu komut diye soracak olursanız daha önce yaptığımız asm diliyle yazılmış bir çalışmada süre ayarlarını NOP komutu ile yapmıştık.Asm kodları C diline çevirmeye çalışıyorum.Keil yardım kısmında nop komutunun aşağıdaki şekilde kullanılabileceğinden bahsediyor.Aşağıdaki şekilde kullanınca ise derleme esnasında bazen problem çıkarıyor.O yüzden C ile belki kullanılabilir diye forumdan yardım istedim.

       #pragma asm 
   NOP;                                                          [Cdeki karşılığı olarak sadece nop(); yazıyorum.Bir yanlışlık yok gibi..]
        #pragma endasm

Keilde nop(); şeklinde yazınca hatasız derliyor.Fakat asm ile yazdığım sonuçları alamıyorum.asm kodlarla yazınca pulse üretiyor.(Yani yukarıdaki gibi)Ama C ile(nop();) yazınca üretmiyor.Sizce farklılık neden kaynaklanıyor olabilir?

picmanya

sizin sorun nop(); yazıp derleyince arasıra tanıyor ve hata vermiyormu?
yoksa nop(); hiçmi tanınmıyor.hep hata mı alınıyor.
yada nop(); hep tanınıyor ama asm deki NOP gibi sonuç mu üretmiyor
bunu anlamak için habire yazılarınızı okuyup duruyorum daha.

nop asm de olsa C de olsa aynı işlemi aynı zaman gecikmesinde aynı işlemci üzerinde aynı kristal hızlarında yapması gerekir.
diğer komutların çekeceği süreler değişsede nop asla değişmez 1 saykıllık temel komuttur.

sauakif


Cde,  yani nop(); yazınca sıkıntı yok..Derliyor..Ama pulse üretmiyor.

Asmde ise derlerken sıkıntı oluyor.5 derleme yapıyorsam belki birinde problem çıkmıyordur.Diğer durumlarda da programdan kaynaklanan bir hata veriyor.(çevrimiçi çözümler falan..) Ama bu şekilde de pulse üretiyor.

Bende farklılığın neden kaynaklandığını çözebilmiş değilim.

Kusura bakmayın.Tekrar teşekkür ederim..

controller

C51 de _nop_(); fonksiyonu INTRINS.H dosyasında tanımlıdır. Kodunuza

#include <INTRINS.H>

satırını ekleyin.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.