Keil de fonksiyon suresini öğrenmek

M_B

Üye
Katılım
16 Şubat 2023
Mesajlar
65
Keil'de yazmış olduğumuz programlar içerisindeki fonksiyonların ne kadar surede işlem yaptığını nasıl öğrenebilirim.
( Debug yaparak veya başka yöntemle . Programlayıcı St-Link )


Kod:
void taskTest(void);
void taskBuzzer(void);
void start(void);

int main(void)
{
    start();
    while(1)
        {
            taskTest();
            taskBuzzer();
        }
}

Örneğin yukarıdaki gibi bir kod yazdık taskTest(); fonksiyonu görevini ne kadar surede tamamlar.
Kullanılan işlemci STM32F0 veya F1 serisi
 
Fonksiyonun tamamlanma süresi ns civarında olmasını beklemiyorsan girişte çıkışta pin toggle et, scope ile ölç. Stm32 de hal kütüphanesi ile ortalama toggle 100-200ns alıyor olabilir. İkinci yaklaşım ki ben bunu seçerim, bir timer kur. Atıyorum her count u 100nS olsun(10Mhz de count edecek yani) fonksiyon giriş ve çıkışı arasındaki count a bak.

Edit: tabi 1ms sürecek bir hesaplamadan bahsediyorsak 10Mhz de olmaz, ona göre adaptif ayarlama yapmalısın.
 
Eger ST'nin ARM islemcileri ile calisiyorsan CPU clk ile sayan bir sayac var. Fonskiyona giriste ve cikista bu sayaci okur ve farkina bakarsan fonksiyonun isleme suresini cok dogru sekilde ogrenebilirisin.

Simdi baktim ARM7 Core'a ait bir ozellikmis.

Registerin adi DWT_CYCCNT
 
en sağlıklı yöntem timer kullanmandır. bir tane timer kur ve max clock frekansında çalışsın. tabi timer max değeri senin fonksiyonundan uzun olmalı. fonksiyona girdiğinde bu timer sıfırla ya da o anki değerini kaydet. fonksiyonun çıkışında timer son değerini kaydet.

daha sonra başka bir yerde çıkış - giriş farkın alıp timer periyot süresi ile çarparsan toplam geçen süreyi hassas şekilde ölçmüş olursun. sadece ilk giriş ve çıkıştaki timer operasyonları nedeniye çok az vakit kaybedeceksin. çok çok hassas ölçüm gerekiyorsa bunları da asm kodundan ne yaptığına bakıp operasyonların yaklaşık kaç cycle sürdügüne hesap ederek toplamdan çıkarablirsin.

tabi burada bir trick var. bu ölçümü yaparken hiçbir interrupt açık olmamalı. aksi halde sen kendi fonksiyonun içindeyken kod başka bir kesmeye atlar orada vakit kaybedebilir. mesela arm işlemcilerde tick timer kesmesi default açık gelir. hiç kesme kurmasan bie sürekli o koda gider.
 
Hocam burdakinden bahsediyor olsa gerek.
HAL lib de. stm32f1xx_it.c icinde
Kod:
/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */

  /* USER CODE END SysTick_IRQn 1 */
}
 
python'da time modülü var,

sanım C aynısı bundada vardır.
 
SYST_CSR Registerin 2. biti haric diger tum bitler resette 0 degerini aliyor.

SYST_CSR Registerin 0. biti Sys Tick Counteri enable/disable eden bit.

Dolayisi ile power on resette SysTick Counter calisamaz durumda kaliyor.
 
SYST_CSR Registerin 2. biti haric diger tum bitler resette 0 degerini aliyor.

SYST_CSR Registerin 0. biti Sys Tick Counteri enable/disable eden bit.

Dolayisi ile power on resette SysTick Counter calisamaz durumda kaliyor.
power one restten bahsetmiyorum. stm32 chipleri kaç kişi baremetal kullanıyor ? ya hal ya da std peripheral ile kullanıyoruz çoğu zaman da cube ide veya keil proje templateleri ile başlatılıyor proje. o templateler içinde de kod tict timer'ı başlatıyor.
 
Son düzenleme:

Çevrimiçi personel

Forum istatistikleri

Konular
5,985
Mesajlar
102,124
Üyeler
2,517
Son üye
Dzenit

Son kaynaklar

Son profil mesajları

deneyci wrote on hakan8470's profile.
Sibonge uNkulunkulu ngokuhlukahluka asinike kona.

Bu hangi dil? :)
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
Back
Top