DWT nedir?

Başlatan muhittin_kaplan, 01 Eylül 2013, 00:15:31

muhittin_kaplan

İki Komut arasını yada Interrupt arasını Debug anında ölçmek istediğimi Yabancı Forumlardan Birine Yazmıştım. DWT yi kullan dediler. Bende Herhangi Timer Kullanmak İstemiyorum Dedim. Onlarda DWT bir iç saıcı systemtick gibi ama farklı dediler kısaca, nedir bu DWT ?


muhittin_kaplan

Hocam Buldum Oraları, Şu An CoIde ile  SemiHost Yapmaya Çalışıyorum. Yapınca Zıplayacağım Oraya.
Ama Hiç Konusu Geçmemişti Forumda. Zamana Kayıt Düşelim.

muhittin_kaplan

#3
stm32f10x de NOP işlemi kaç saykılda yapılıyor. instruction set sum da bulamadım bir türlü.

mesaj birleştirme:: 01 Eylül 2013, 02:49:31

1 cycle yapıyormuş. Emin olmam gerekiyordu :-[

cicjoe

Hocam butun komutlar 1 cycle diye biliyorum.. RISC ve pipeline olmasi yuzunden..

muhittin_kaplan

hangi komut ne kadar sürede işlenir, Fonksiyonum çalışma süresi nedir derdine son.

mesaj birleştirme:: 01 Eylül 2013, 02:56:32

eminmisin çarpma işlemi felan ? bulamadım yahu.

cicjoe

Haklisiniz hocam.. Carpma islemi icin M0-3 olanlar 1-32 cycles, M4 1 cycle diyodu bi kitapta..

muhittin_kaplan

#7
nop 1 cycle da kesin.

mesaj birleştirme:: 01 Eylül 2013, 03:04:21

ldr r2, [r7, #20]
080006dc:   mov r3, r2
080006de:   mov.w r3, r3, lsl #2
080006e2:   adds r3, r3, r2
080006e4:   mov.w r3, r3, lsl #2
080006e8:   str r3, [r7, #20]


yukardaki komutlardan birini 2cycle de yapıyor.

mesaj birleştirme:: 01 Eylül 2013, 03:07:36

Şükür ARM ın sitesi açtı. Hata verip duruyordu.

cicjoe


muhittin_kaplan

#9
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337h/CHDDIGAC.html

mesaj birleştirme:: 01 Eylül 2013, 03:20:36

arm CM3 yada 4 için belirlediğim bir aralıktaki komutların kaç cycle olduğunu bilirsem zamanını hesaplayabilirim değil mi ?
(örnek 24MHz için)
:)

muhittin_kaplan

1/SystemClock yaparsam 1cycle nin zamanını bulurum oradan çarparım felan

1Cycle=1/24000000hz
          =41.6ns

işlemSüresi=DWT_CYCCNT*41.6 yaparsam
istediğim kod bloğunun ne kadar sürede işlem yaptığını bulabilirim. Teker Teker ASM kodları saysam hangisinin kaç cycle de işlem yaptığını çıkartsam da olur. Ama yapacağım yöntem daha kolaydır :D

muhittin_kaplan

#11
Hocam yok Espiri Olsun Diye Yazmıştım. Kodları Toparladım. Yazdım Çalışıyor, İstediğim iki nokta arasındaki C kodlarının Kaç CYCLE olduğunun bilgisini veriyor. Ama Sizlerde Denerseniz Sevinirim. Nöbetten Dolayı Ekleme Fırsatım Olmamıştı.

int main(void)
{
	int i;

	        volatile unsigned int *DWT_CYCCNT = (unsigned int *)0xE0001004;
	        volatile unsigned int *DWT_CONTROL = (unsigned int *)0xE0001000;
	        volatile unsigned int *SCB_DEMCR = (unsigned int *)0xE000EDFC;

	        *SCB_DEMCR = *SCB_DEMCR | 0x01000000;
	        *DWT_CYCCNT = 0;
	        *DWT_CONTROL = *DWT_CONTROL | 1 ; 


    while(1)

    {

    	volatile int count = 0;

    	*DWT_CYCCNT=0;

    	__asm("nop");
    	__asm("nop");


    	count = *DWT_CYCCNT; // bu işlem 3 cycle yapıyor. Hesaba Katılması Gerek.

         *DWT_CYCCNT=0; /Register sıfırlanıyor.
    	__asm("nop");
    	__asm("nop");
    	__asm("nop");
    	__asm("nop");
    	__asm("nop");
    	__asm("nop");
    	__asm("nop");
    	__asm("nop");
    	count = *DWT_CYCCNT;
    }
}


ilgili dökümanlar
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/CEGHJDCF.html
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/ch11s05s01.html



mesaj birleştirme:: 03 Eylül 2013, 09:48:54

Bu Arada MOD arkadaş Başlığı Düzeltirse Sevinirim DWT olacak