Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

CortexM3 Assembly

Başlatan muhittin_kaplan, 15 Aralık 2012, 00:30:20

muhittin_kaplan

Geçikme rutini üzerinde çalışıyordum
bne.n 0x8001508
bu komut ne olaki (Atlama Komutu Muhtemelen ama intsruction set sum. da bulamadım)

z

Branch Not Equal

Yani daha önceki komutlar Zero flağını set etmedi ise verilen adrese zıpla demek.

if (ZFlag==0) goto ADRES;

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

muhittin_kaplan

delayla alakalı komutlar aşağıda Cycle larınıda çıkardım 1,2 ve anlıyorum ama yanlarındaki P, N gibi harflerin anlamı nedir ?

Buradan yola çıkarak zaman gecikmesini hesaplayacağım

Alıntı Yapdelay:
08001500: delay+0             push {r7}               1 + N
08001502: delay+2             sub sp, #12            1
08001504: delay+4             add r7, sp, #0         1
08001506: delay+6             str r0, [r7, #4]         2c
128                               while (--deger);
08001508: delay+8             ldr r3, [r7, #4]         2c
0800150a: delay+10            add.w r3, r3, #4294967295   1
0800150e: delay+14            str r3, [r7, #4]         2c
08001510: delay+16            ldr r3, [r7, #4]         2c
08001512: delay+18            cmp r3, #0            1
08001514: delay+20            bne.n 0x8001508 <delay+8>   
129                            }
08001516: delay+22            add.w r7, r7, #12         1
0800151a: delay+26            mov sp, r7            1 + P
0800151c: delay+28            pop {r7}               1 + N
0800151e: delay+30            bx lr                  1 + P
179                         {

z

#3
Tek register kullanıldığı için N=1

P den emin değilim.

Edit: Baktım şimdi,

P pipe line'ın tekrar dolması için o anki komuta bağlı değer.

Branch komutunda önemli. Dikkate almak gerekiyor fakat Mov komutunda sende PC kullanılmadığı için P=1. Fakat SP ye align edilmemiş değer yüklenirse P 1 den farklı olurmu bilmiyorum. Ne olur merak ettim.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337h/CHDDIGAC.html
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Sonuçta Kaç Cycle süreceğini hesaplayacağım hocam ona göre ms, us, olursa ns bekleme oluşturma fonksiyonu yazacağım ama tam çakmayacak sanırım.

z

Timerlar varken yazılımsal gecikmeler diğer rutinler için haksızlık.

Zamanlama rutininin şaşmaması için Delay rutininin başında tüm interrutları yasaklamalısın. Delaydan çıkarken de yasakladıklarını yeniden etkinleştirmen gerekir.

Bu durumda bekleme yapacaksın diye her şey ama herşey askıya alınmış olacak.




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

muhittin_kaplan

Bir Zamanlayıcıyı bu iş için Kullanmak banada Timer a haksızlık gbi geliyor.
system Tick bu iş için uygun gibi.

z

#7
Programı bir bütün olarak ele almak lazım. Ortada cevaplanması gereken interruptlar varken ne kadar hassas zamanlama için kafa yorarsan yor interruptları yasaklamadığın sürece yazılımsal gecikme rutinleri zaten sapıtacaktır.

Çok çok kritik zamanlama rutinlerini timer ile yapmak gerekir. Fakat bu rutinlere de çok güvenemeyiz. Çünkü bazı rutinler kritiktir ve bu rutinleri işletirken interruptları da yasaklarız. Bu durumda bu rutin çalışırken timer interrupt rutini de yasaklanacak demektir.

O zaman ne yapacağız?

Gerçekten kritik bir zamanlama varsa ya yazılımı bir şeylere senkron çalışacak şekilde yazacağız (bu her zaman mümkün olmaz) ya da donanımsal çözümlere yöneleceğiz.

Zamanlama için System tick, timer kullanmaktan daha avantajlı elbette. Çünkü exception sınıfında ve önceliği yüksek ve privileged modda müdahale edilebilir.



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

muhittin_kaplan

@gerbay
Hocam Pic mantığıyla alakalı değil bu durum. her komutun aynı cycle da bitmeyeceğini ve timer la çözümlenebileceğini kestirebiliyorum.  ama her zaman gecikmesinde timer mı kullanıyorsunuz ?

z

Tam olarak ne yapmak istiyorsun. Genel amacı sormuyorum, kritik zamanlamaya ihtiyaç duyduğun durumu soruyorum. Soft bir çözüm bulunabilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Amacım Yok Zamanlama Yapmaya Çalışıyorum.
Çalışıyorum, Bir Yukarı bir aşağı, Bir Library bir Assembly

pisayisi

https://www.picproje.org/index.php/topic,38296.msg320027.html#msg320027

linkte systick delay yapılmış stm32 assembler basit bir led flash uygulaması var, belki yardımcı olabilir...
Murat

speak48

Alıntı yapılan: gerbay - 15 Aralık 2012, 13:26:03
bu MCU lar 1 cycle da 1 den fazla opcode işleyebiliyor ve bu durum tamamen pipeline ın ve üretilen kodun durumuna bağl.. 2 cycle lık, 3 cycle lık hatta 7 cycle lık işlemler olduğu halde ortalama olarak neden bu MCU lar 1.25 DMIPS acaba...

bunu hep merak etmişimdir.
pipeline olsa bile bu dmips oranı nasıl oluyoda 1 üstünde oluyor diye soruyordum.





muhittin_kaplan

http://www-mdp.eng.cam.ac.uk/web/library/enginfo/mdp_micro/lecture1/lecture1-4-2.html
de bir komut için işlenecek durumlar gösteriliyor.
fetch, decode, execute gibi, burada 4 durumdan behsedilmiş. Anlayacağınız biz bir komut işlemek için bu enaz 1 kez, 4 işlemi yapmamız gerek. ama bir işlemci x kodunu fecth edildikten sonra decode edilme aşamasında y kodu fetch ediliyor böylelikle x komutunun işlenmesi bitmeden y komutuda başlamış oluyor.

speak48

bu pipelinede
istruction pointer nezaman artıyor
bu clockla artmıyormu
buna rağmen toplam işlediği intruction / toplam clk nasıl oluyorda 1 in üstünde oluyor.
pipeline anlamak isterim