Keil de fonksiyon suresini öğrenmek

M_B

Aktif Üye
Katılım
16 Şubat 2023
Mesajlar
126
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:

Forum istatistikleri

Konular
6,627
Mesajlar
112,644
Üyeler
2,722
Son üye
cansu

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
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?
Back
Top